Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: 68a66a4ab3
Fetching contributors…

Cannot retrieve contributors at this time

file 142 lines (117 sloc) 3.266 kb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
/**
* QuartzTextStyleAttribute.h
*
* Original Code by Evan Jones on Wed Oct 02 2002.
* Contributors:
* Shane Caraveo, ActiveState
* Bernd Paradies, Adobe
*
*/


#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

Something went wrong with that request. Please try again.