notepad-plus-plus/scintilla/macosx/QuartzTextStyleAttribute.h

145 lines
3.2 KiB
C++

/*
* QuartzTextStyleAttribute.h
*
* Original Code by Evan Jones on Wed Oct 02 2002.
* Contributors:
* Shane Caraveo, ActiveState
* Bernd Paradies, Adobe
*
*/
#include <Carbon/Carbon.h>
#ifndef _QUARTZ_TEXT_STYLE_ATTRIBUTE_H
#define _QUARTZ_TEXT_STYLE_ATTRIBUTE_H
class QuartzTextStyleAttribute
{
public:
QuartzTextStyleAttribute() {}
virtual ~QuartzTextStyleAttribute() {}
virtual ByteCount getSize() const = 0;
virtual ATSUAttributeValuePtr getValuePtr() = 0;
virtual ATSUAttributeTag getTag() const = 0;
};
class QuartzTextSize : public QuartzTextStyleAttribute
{
public:
QuartzTextSize( float points )
{
size = X2Fix( points );
}
ByteCount getSize() const
{
return sizeof( size );
}
ATSUAttributeValuePtr getValuePtr()
{
return &size;
}
ATSUAttributeTag getTag() const
{
return kATSUSizeTag;
}
private:
Fixed size;
};
class QuartzTextStyleAttributeBoolean : public QuartzTextStyleAttribute
{
public:
QuartzTextStyleAttributeBoolean( bool newVal ) : value( newVal ) {}
ByteCount getSize() const
{
return sizeof( value );
}
ATSUAttributeValuePtr getValuePtr()
{
return &value;
}
virtual ATSUAttributeTag getTag() const = 0;
private:
Boolean value;
};
class QuartzTextBold : public QuartzTextStyleAttributeBoolean
{
public:
QuartzTextBold( bool newVal ) : QuartzTextStyleAttributeBoolean( newVal ) {}
ATSUAttributeTag getTag() const
{
return kATSUQDBoldfaceTag;
}
};
class QuartzTextItalic : public QuartzTextStyleAttributeBoolean
{
public:
QuartzTextItalic( bool newVal ) : QuartzTextStyleAttributeBoolean( newVal ) {}
ATSUAttributeTag getTag() const
{
return kATSUQDItalicTag;
}
};
class QuartzTextUnderline : public QuartzTextStyleAttributeBoolean
{
public:
QuartzTextUnderline( bool newVal ) : QuartzTextStyleAttributeBoolean( newVal ) {}
ATSUAttributeTag getTag() const {
return kATSUQDUnderlineTag;
}
};
class QuartzFont : public QuartzTextStyleAttribute
{
public:
/** Create a font style from a name. */
QuartzFont( const char* name, int length )
{
assert( name != NULL && length > 0 && name[length] == '\0' );
// try to create font
OSStatus err = ATSUFindFontFromName( const_cast<char*>( name ), length, kFontFullName, (unsigned) kFontNoPlatform, kFontRomanScript, (unsigned) kFontNoLanguage, &fontid );
// need a fallback if font isn't installed
if( err != noErr || fontid == kATSUInvalidFontID )
::ATSUFindFontFromName( "Lucida Grande", 13, kFontFullName, (unsigned) kFontNoPlatform, kFontRomanScript, (unsigned) kFontNoLanguage, &fontid );
}
ByteCount getSize() const
{
return sizeof( fontid );
}
ATSUAttributeValuePtr getValuePtr()
{
return &fontid;
}
ATSUAttributeTag getTag() const
{
return kATSUFontTag;
}
ATSUFontID getFontID() const
{
return fontid;
}
private:
ATSUFontID fontid;
};
#endif