diff options
Diffstat (limited to 'cocoa/QuartzTextStyle.h')
-rw-r--r-- | cocoa/QuartzTextStyle.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/cocoa/QuartzTextStyle.h b/cocoa/QuartzTextStyle.h new file mode 100644 index 000000000..36729b77b --- /dev/null +++ b/cocoa/QuartzTextStyle.h @@ -0,0 +1,90 @@ +/* + * QuartzTextStyle.h + * + * Created by Evan Jones on Wed Oct 02 2002. + * + */ + +#ifndef _QUARTZ_TEXT_STYLE_H +#define _QUARTZ_TEXT_STYLE_H + +#include "QuartzTextStyleAttribute.h" + +class QuartzTextStyle +{ +public: + QuartzTextStyle() + { + ATSUCreateStyle( &style ); + } + + ~QuartzTextStyle() + { + if ( style != NULL ) + ATSUDisposeStyle( style ); + style = NULL; + } + + void setAttribute( ATSUAttributeTag tag, ByteCount size, ATSUAttributeValuePtr value ) + { + ATSUSetAttributes( style, 1, &tag, &size, &value ); + } + + void setAttribute( QuartzTextStyleAttribute& attribute ) + { + setAttribute( attribute.getTag(), attribute.getSize(), attribute.getValuePtr() ); + } + + void getAttribute( ATSUAttributeTag tag, ByteCount size, ATSUAttributeValuePtr value, ByteCount* actualSize ) + { + ATSUGetAttribute( style, tag, size, value, actualSize ); + } + + template <class T> + T getAttribute( ATSUAttributeTag tag ) + { + T value; + ByteCount actualSize; + ATSUGetAttribute( style, tag, sizeof( T ), &value, &actualSize ); + return value; + } + + // TODO: Is calling this actually faster than calling setAttribute multiple times? + void setAttributes( QuartzTextStyleAttribute* attributes[], int number ) + { + // Create the parallel arrays and initialize them properly + ATSUAttributeTag* tags = new ATSUAttributeTag[ number ]; + ByteCount* sizes = new ByteCount[ number ]; + ATSUAttributeValuePtr* values = new ATSUAttributeValuePtr[ number ]; + + for ( int i = 0; i < number; ++ i ) + { + tags[i] = attributes[i]->getTag(); + sizes[i] = attributes[i]->getSize(); + values[i] = attributes[i]->getValuePtr(); + } + + ATSUSetAttributes( style, number, tags, sizes, values ); + + // Free the arrays that were allocated + delete[] tags; + delete[] sizes; + delete[] values; + } + + void setFontFeature( ATSUFontFeatureType featureType, ATSUFontFeatureSelector selector ) + { + ATSUSetFontFeatures( style, 1, &featureType, &selector ); + } + + const ATSUStyle& getATSUStyle() const + { + return style; + } + +private: + ATSUStyle style; +}; + +#endif + |