osxfont.cpp
来自「这是VCF框架的代码」· C++ 代码 · 共 380 行
CPP
380 行
//OSXFont.cpp/*Copyright 2000-2004 The VCF Project.Please see License.txt in the top level directorywhere you installed the VCF.*/#include "vcf/GraphicsKit/GraphicsKit.h"#include "vcf/GraphicsKit/GraphicsKitPrivate.h"using namespace VCF;OSXFont::OSXFont( const String& fontName ): fontStyle_(nil), attrBold_(FALSE), attrItalic_(FALSE), attrUnderlined_(FALSE), attrFontID_(0), font_(NULL){ attrColor_.red = 0; attrColor_.green = 0; attrColor_.blue = 0; attrColor_.alpha = 1.0; OSStatus err = ATSUCreateStyle (&fontStyle_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUCreateStyle failed to create font style!" ) ); } attrSize_ = IntToFixed((int)12); SInt16 iFONDNumber = 0; Str255 pStr; CopyCStringToPascal( fontName.empty() ? "Arial" : fontName.ansi_c_str(), pStr ); iFONDNumber = FMGetFontFamilyFromName( pStr ); err = ATSUFONDtoFontID(iFONDNumber, NULL, &attrFontID_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUFONDtoFontID failed to create font ID instance!" ) ); } initATSUAttrs();}OSXFont::OSXFont( const String& fontName, const double& pointSize ): fontStyle_(nil), attrBold_(FALSE), attrItalic_(FALSE), attrUnderlined_(FALSE), attrFontID_(0), font_(NULL){ attrColor_.red = 0; attrColor_.green = 0; attrColor_.blue = 0; attrColor_.alpha = 1.0; OSStatus err = ATSUCreateStyle (&fontStyle_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUCreateStyle failed to create font style!" ) ); } SInt16 iFONDNumber = 0; Str255 pStr; CopyCStringToPascal( fontName.empty() ? "Arial" : fontName.ansi_c_str(), pStr ); iFONDNumber = FMGetFontFamilyFromName( pStr ); err = ATSUFONDtoFontID(iFONDNumber, NULL, &attrFontID_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUFONDtoFontID failed to create font ID instance!" ) ); } attrSize_ = IntToFixed((int)pointSize); initATSUAttrs();}void OSXFont::initATSUAttrs(){ attrSizes_[OSXFont::attrFontName] = sizeof(ATSUFontID); attrSizes_[OSXFont::attrFontSize] = sizeof(Fixed); attrSizes_[OSXFont::attrFontBold] = sizeof(Boolean); attrSizes_[OSXFont::attrFontItalic] = sizeof(Boolean); attrSizes_[OSXFont::attrFontUnderline] = sizeof(Boolean); attrSizes_[OSXFont::attrFontColor] = sizeof(ATSURGBAlphaColor); attrValues_[OSXFont::attrFontName] = &attrFontID_; attrValues_[OSXFont::attrFontSize] = &attrSize_; attrValues_[OSXFont::attrFontBold] = &attrBold_; attrValues_[OSXFont::attrFontItalic] = &attrItalic_; attrValues_[OSXFont::attrFontUnderline] = &attrUnderlined_; attrValues_[OSXFont::attrFontColor] = &attrColor_; attrTags_[OSXFont::attrFontName] = kATSUFontTag; attrTags_[OSXFont::attrFontSize] = kATSUSizeTag; attrTags_[OSXFont::attrFontBold] = kATSUQDBoldfaceTag; attrTags_[OSXFont::attrFontItalic] = kATSUQDItalicTag; attrTags_[OSXFont::attrFontUnderline] = kATSUQDUnderlineTag; attrTags_[OSXFont::attrFontColor] = kATSURGBAlphaColorTag; updateStyleWithAttrs();}void OSXFont::updateStyleWithAttrs(){ OSStatus err = ATSUSetAttributes (fontStyle_, OSXFont::tagCount, attrTags_, attrSizes_, attrValues_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUSetAttributes failed in updateStyleWithAttrs()") ); }}OSXFont::~OSXFont(){ if ( nil != fontStyle_ ) { ATSUDisposeStyle( fontStyle_ ); }}void OSXFont::init(){}OSHandleID OSXFont::getFontHandleID(){ return (OSHandleID)fontStyle_;}String OSXFont::getName(){ return "FoobarBaz";}void OSXFont::setName( const String& name ){ SInt16 iFONDNumber = 0; Str255 pStr; CopyCStringToPascal( name.ansi_c_str(), pStr ); iFONDNumber = FMGetFontFamilyFromName( pStr ); if ( iFONDNumber != kInvalidFontFamily ) { OSStatus err = ATSUFONDtoFontID(iFONDNumber, NULL, &attrFontID_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUFONDtoFontID failed - probably due to an invalid font name, or perhaps conversion to a Pascal String failed.") ); } } updateStyleWithAttrs();}void OSXFont::setColor( Color* color ){ attrColor_.red = color->getRed(); attrColor_.green = color->getGreen(); attrColor_.blue = color->getBlue(); attrColor_.alpha = 1.0; updateStyleWithAttrs();}bool OSXFont::isTrueType(){ return true;}double OSXFont::getPointSize(){ return (double) VCF_FIXEDTOINT(attrSize_);}void OSXFont::setPointSize( const double pointSize ){ attrSize_ = VCF_INTTOFIXED((int)pointSize); updateStyleWithAttrs();}double OSXFont::getPixelSize(){ return (double) VCF_FIXEDTOINT(attrSize_);}void OSXFont::setPixelSize( const double pixelSize ){ setPointSize( pixelSize );}void OSXFont::setBold( const bool& bold ){ attrBold_ = bold ? TRUE : FALSE; updateStyleWithAttrs();}bool OSXFont::getBold(){ return (attrBold_ == TRUE) ? true : false;}bool OSXFont::getItalic(){ return (attrItalic_ == TRUE) ? true : false;}void OSXFont::setItalic( const bool& italic ){ attrItalic_ = italic ? TRUE : FALSE; updateStyleWithAttrs();}bool OSXFont::getUnderlined(){ return (attrUnderlined_ == TRUE) ? true : false;}void OSXFont::setUnderlined( const bool& underlined ){ attrUnderlined_ = underlined ? TRUE : FALSE; updateStyleWithAttrs();}bool OSXFont::getStrikeOut(){ return false;}void OSXFont::setStrikeOut( const bool& strikeout ){}void OSXFont::setFont( Font* font ) { font_ = font;}void OSXFont::setAttributes( const double& pointSize, const bool& bold, const bool& italic, const bool& underlined, const bool& struckOut, const String& name ){ attrBold_ = bold ? TRUE : FALSE; attrItalic_ = italic ? TRUE : FALSE; attrUnderlined_ = underlined ? TRUE : FALSE; attrSize_ = IntToFixed((int)pointSize); SInt16 iFONDNumber = 0; Str255 pStr; CopyCStringToPascal( name.ansi_c_str(), pStr ); iFONDNumber = FMGetFontFamilyFromName( pStr ); if ( iFONDNumber != kInvalidFontFamily ) { OSStatus err = ATSUFONDtoFontID(iFONDNumber, NULL, &attrFontID_); if ( err != noErr ) { throw RuntimeException( MAKE_ERROR_MSG_2("ATSUFONDtoFontID failed - probably due to an invalid font name, or perhaps conversion to a Pascal String failed.") ); } } updateStyleWithAttrs();}double OSXFont::getAscent(){ ATSUTextMeasurement val = 0; ByteCount sz = sizeof(val); OSStatus err = ATSUGetAttribute( fontStyle_, kATSUAscentTag, sizeof(val), &val, &sz ); if ( err != noErr ) { return -1.0; } return FixedPointNumber(val);}double OSXFont::getDescent(){ ATSUTextMeasurement val = 0; ByteCount sz = sizeof(val); OSStatus err = ATSUGetAttribute( fontStyle_, kATSUDescentTag, sizeof(val), &val, &sz ); if ( err != noErr ) { return -1.0; } return FixedPointNumber(val);}bool OSXFont::isFixedPitch(){ return false;}bool OSXFont::isEqual( Object* object ){ bool result = false; OSXFont* fntObj = dynamic_cast<OSXFont*>(object); if ( NULL != fntObj ){ if ( (this->attrFontID_ == fntObj->attrFontID_) && (this->attrBold_ == fntObj->attrBold_) && (this->attrItalic_ == fntObj->attrItalic_) && (this->attrUnderlined_ == fntObj->attrUnderlined_) && (this->attrSize_ == fntObj->attrSize_) ) { result = true; } } return result;}/***CVS Log info*$Log$*Revision 1.6 2006/04/07 02:35:41 ddiego*initial checkin of merge from 0.6.9 dev branch.**Revision 1.5.2.1 2005/11/27 23:55:45 ddiego*more osx updates.**Revision 1.5 2005/07/09 23:06:00 ddiego*added missing gtk files**Revision 1.4 2005/01/08 20:52:48 ddiego*fixed some glitches in osx impl.**Revision 1.3.2.1 2005/05/08 19:55:32 ddiego*osx updates, not yet functional.**Revision 1.3 2004/12/01 04:31:44 ddiego*merged over devmain-0-6-6 code. Marcello did a kick ass job*of fixing a nasty bug (1074768VCF application slows down modal dialogs.)*that he found. Many, many thanks for this Marcello.**Revision 1.2.2.2 2004/10/27 03:12:18 ddiego*integrated chrisk changes**Revision 1.2.2.1 2004/10/10 15:24:00 ddiego*updated os x code in graphics stuff.**Revision 1.2 2004/08/07 02:49:18 ddiego*merged in the devmain-0-6-5 branch to stable**Revision 1.1.2.7 2004/07/27 04:26:05 ddiego*updated devmain-0-6-5 branch with osx changes**Revision 1.1.2.6 2004/06/06 07:05:34 marcelloptr*changed macros, text reformatting, copyright sections**Revision 1.1.2.5 2004/05/31 13:20:58 ddiego*more osx updates**Revision 1.1.2.4 2004/05/06 03:01:29 ddiego*checking in OSX updates**Revision 1.1.2.3 2004/04/30 05:44:34 ddiego*added OSX changes for unicode migration**Revision 1.2 2004/04/03 15:48:47 ddiego*Merged over code from the 0-6-3 branch.**Revision 1.1.2.2 2004/02/22 06:50:22 ddiego*more progress with the OSX GraphicsKit - almost done!**Revision 1.1.2.1 2004/02/21 03:27:09 ddiego*updates for OSX porting**/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?