/* File: Fonts.h Contains: Public interface to the Font Manager. Version: Technology: Mac OS 9 Release: QuickTime 6.0.2 Copyright: (c) 1985-2001 by Apple Computer, Inc., all rights reserved Bugs?: For bug reports, consult the following page on the World Wide Web: http://developer.apple.com/bugreporter/ */ #ifndef __FONTS__ #define __FONTS__ #ifndef __MACTYPES__ #include #endif #ifndef __FILES__ #include #endif #ifndef __QUICKDRAW__ #include #endif #ifndef __TEXTCOMMON__ #include #endif #ifndef __MACERRORS__ #include #endif #if PRAGMA_ONCE #pragma once #endif #ifdef __cplusplus extern "C" { #endif #if PRAGMA_IMPORT #pragma import on #endif #if PRAGMA_STRUCT_ALIGN #pragma options align=mac68k #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(push, 2) #elif PRAGMA_STRUCT_PACK #pragma pack(2) #endif enum { systemFont = 0, applFont = 1 }; /* kPlatformDefaultGuiFontID is used in QuickTime 3.0. */ #if TARGET_OS_MAC enum { kPlatformDefaultGuiFontID = applFont }; #else enum { kPlatformDefaultGuiFontID = -1 }; #endif /* TARGET_OS_MAC */ /* The following font constants are deprecated; use GetFNum() to look up the font ID by name. */ enum { kFontIDNewYork = 2, kFontIDGeneva = 3, kFontIDMonaco = 4, kFontIDVenice = 5, kFontIDLondon = 6, kFontIDAthens = 7, kFontIDSanFrancisco = 8, kFontIDToronto = 9, kFontIDCairo = 11, kFontIDLosAngeles = 12, kFontIDTimes = 20, kFontIDHelvetica = 21, kFontIDCourier = 22, kFontIDSymbol = 23, kFontIDMobile = 24 }; enum { commandMark = 17, checkMark = 18, diamondMark = 19, appleMark = 20 }; enum { propFont = 36864L, prpFntH = 36865L, prpFntW = 36866L, prpFntHW = 36867L, fixedFont = 45056L, fxdFntH = 45057L, fxdFntW = 45058L, fxdFntHW = 45059L, fontWid = 44208L }; struct FMInput { short family; short size; Style face; Boolean needBits; short device; Point numer; Point denom; }; typedef struct FMInput FMInput; struct FMOutput { short errNum; Handle fontHandle; UInt8 boldPixels; UInt8 italicPixels; UInt8 ulOffset; UInt8 ulShadow; UInt8 ulThick; UInt8 shadowPixels; SInt8 extra; UInt8 ascent; UInt8 descent; UInt8 widMax; SInt8 leading; SInt8 curStyle; Point numer; Point denom; }; typedef struct FMOutput FMOutput; typedef FMOutput * FMOutputPtr; typedef FMOutputPtr FMOutPtr; struct FontRec { short fontType; /*font type*/ short firstChar; /*ASCII code of first character*/ short lastChar; /*ASCII code of last character*/ short widMax; /*maximum character width*/ short kernMax; /*negative of maximum character kern*/ short nDescent; /*negative of descent*/ short fRectWidth; /*width of font rectangle*/ short fRectHeight; /*height of font rectangle*/ unsigned short owTLoc; /*offset to offset/width table*/ short ascent; /*ascent*/ short descent; /*descent*/ short leading; /*leading*/ short rowWords; /*row width of bit image / 2 */ }; typedef struct FontRec FontRec; typedef FontRec * FontRecPtr; typedef FontRecPtr * FontRecHdl; struct FMetricRec { Fixed ascent; /*base line to top*/ Fixed descent; /*base line to bottom*/ Fixed leading; /*leading between lines*/ Fixed widMax; /*maximum character width*/ Handle wTabHandle; /*handle to font width table*/ }; typedef struct FMetricRec FMetricRec; typedef FMetricRec * FMetricRecPtr; typedef FMetricRecPtr * FMetricRecHandle; struct WidEntry { short widStyle; /*style entry applies to*/ }; typedef struct WidEntry WidEntry; struct WidTable { short numWidths; /*number of entries - 1*/ }; typedef struct WidTable WidTable; struct AsscEntry { short fontSize; short fontStyle; short fontID; /*font resource ID*/ }; typedef struct AsscEntry AsscEntry; struct FontAssoc { short numAssoc; /*number of entries - 1*/ }; typedef struct FontAssoc FontAssoc; struct StyleTable { short fontClass; long offset; long reserved; char indexes[48]; }; typedef struct StyleTable StyleTable; struct NameTable { short stringCount; Str255 baseFontName; }; typedef struct NameTable NameTable; struct KernPair { char kernFirst; /*1st character of kerned pair*/ char kernSecond; /*2nd character of kerned pair*/ short kernWidth; /*kerning in 1pt fixed format*/ }; typedef struct KernPair KernPair; struct KernEntry { short kernStyle; /*style the entry applies to*/ short kernLength; /*length of this entry*/ }; typedef struct KernEntry KernEntry; struct KernTable { short numKerns; /*number of kerning entries*/ }; typedef struct KernTable KernTable; struct WidthTable { Fixed tabData[256]; /*character widths*/ Handle tabFont; /*font record used to build table*/ long sExtra; /*space extra used for table*/ long style; /*extra due to style*/ short fID; /*font family ID*/ short fSize; /*font size request*/ short face; /*style (face) request*/ short device; /*device requested*/ Point inNumer; /*scale factors requested*/ Point inDenom; /*scale factors requested*/ short aFID; /*actual font family ID for table*/ Handle fHand; /*family record used to build up table*/ Boolean usedFam; /*used fixed point family widths*/ UInt8 aFace; /*actual face produced*/ short vOutput; /*vertical scale output value*/ short hOutput; /*horizontal scale output value*/ short vFactor; /*vertical scale output value*/ short hFactor; /*horizontal scale output value*/ short aSize; /*actual size of actual font used*/ short tabSize; /*total size of table*/ }; typedef struct WidthTable WidthTable; typedef WidthTable * WidthTablePtr; typedef WidthTablePtr * WidthTableHdl; struct FamRec { short ffFlags; /*flags for family*/ short ffFamID; /*family ID number*/ short ffFirstChar; /*ASCII code of 1st character*/ short ffLastChar; /*ASCII code of last character*/ short ffAscent; /*maximum ascent for 1pt font*/ short ffDescent; /*maximum descent for 1pt font*/ short ffLeading; /*maximum leading for 1pt font*/ short ffWidMax; /*maximum widMax for 1pt font*/ long ffWTabOff; /*offset to width table*/ long ffKernOff; /*offset to kerning table*/ long ffStylOff; /*offset to style mapping table*/ short ffProperty[9]; /*style property info*/ short ffIntl[2]; /*for international use*/ short ffVersion; /*version number*/ }; typedef struct FamRec FamRec; typedef SInt16 FontPointSize; #if CALL_NOT_IN_CARBON EXTERN_API( void ) InitFonts (void) ONEWORDINLINE(0xA8FE); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( void ) GetFontName (short familyID, Str255 name) ONEWORDINLINE(0xA8FF); EXTERN_API( void ) GetFNum (ConstStr255Param name, short * familyID) ONEWORDINLINE(0xA900); EXTERN_API( Boolean ) RealFont (short fontNum, short size) ONEWORDINLINE(0xA902); #if CALL_NOT_IN_CARBON EXTERN_API( void ) SetFontLock (Boolean lockFlag) ONEWORDINLINE(0xA903); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API( FMOutPtr ) FMSwapFont (const FMInput * inRec) ONEWORDINLINE(0xA901); EXTERN_API( void ) SetFScaleDisable (Boolean fscaleDisable) ONEWORDINLINE(0xA834); EXTERN_API( void ) FontMetrics (FMetricRecPtr theMetrics) ONEWORDINLINE(0xA835); EXTERN_API( void ) SetFractEnable (Boolean fractEnable) ONEWORDINLINE(0xA814); EXTERN_API( short ) GetDefFontSize (void) FIVEWORDINLINE(0x3EB8, 0x0BA8, 0x6604, 0x3EBC, 0x000C); EXTERN_API( Boolean ) IsOutline (Point numer, Point denom) TWOWORDINLINE(0x7000, 0xA854); EXTERN_API( void ) SetOutlinePreferred (Boolean outlinePreferred) TWOWORDINLINE(0x7001, 0xA854); EXTERN_API( Boolean ) GetOutlinePreferred (void) TWOWORDINLINE(0x7009, 0xA854); EXTERN_API( OSErr ) OutlineMetrics (short byteCount, const void * textPtr, Point numer, Point denom, short * yMax, short * yMin, FixedPtr awArray, FixedPtr lsbArray, RectPtr boundsArray) TWOWORDINLINE(0x7008, 0xA854); EXTERN_API( void ) SetPreserveGlyph (Boolean preserveGlyph) TWOWORDINLINE(0x700A, 0xA854); EXTERN_API( Boolean ) GetPreserveGlyph (void) TWOWORDINLINE(0x700B, 0xA854); #if CALL_NOT_IN_CARBON EXTERN_API( OSErr ) FlushFonts (void) TWOWORDINLINE(0x700C, 0xA854); #endif /* CALL_NOT_IN_CARBON */ EXTERN_API_C( void ) getfnum (const char * theName, short * familyID); EXTERN_API_C( void ) getfontname (short familyID, char * theName); EXTERN_API( short ) GetSysFont (void) TWOWORDINLINE(0x3EB8, 0x0BA6); EXTERN_API( short ) GetAppFont (void) TWOWORDINLINE(0x3EB8, 0x0984); /*--------------------------------------------------------------------------------------*/ /* Extended font data functions (available only with Mac OS 8.5 or later) */ /*--------------------------------------------------------------------------------------*/ EXTERN_API( OSStatus ) SetAntiAliasedTextEnabled (Boolean iEnable, SInt16 iMinFontSize) TWOWORDINLINE(0x7011, 0xA854); EXTERN_API( Boolean ) IsAntiAliasedTextEnabled (SInt16 * oMinFontSize) TWOWORDINLINE(0x7012, 0xA854); EXTERN_API( void ) QDTextBounds (short byteCount, const void * textAddr, Rect * bounds) TWOWORDINLINE(0x7013, 0xA854); EXTERN_API( OSErr ) FetchFontInfo (SInt16 fontID, SInt16 fontSize, SInt16 fontStyle, FontInfo * info) TWOWORDINLINE(0x7014, 0xA854); /*--------------------------------------------------------------------------------------*/ /* Font access and data management functions (available only with Mac OS 9.0 or later) */ /*--------------------------------------------------------------------------------------*/ typedef UInt32 FMGeneration; /* The FMFontFamily reference represents a collection of fonts with the same design */ /* characteristics. It replaces the standard QuickDraw font identifer and may be used */ /* with all QuickDraw functions including GetFontName and TextFont. It cannot be used */ /* with the Resource Manager to access information from a FOND resource handle. A font */ /* reference does not imply a particular script system, nor is the character encoding */ /* of a font family determined by an arithmetic mapping of its value. */ typedef SInt16 FMFontFamily; typedef SInt16 FMFontStyle; typedef SInt16 FMFontSize; /* The font family is a collection of fonts, each of which is identified by an FMFont */ /* reference that maps to a single object registered with the font database. The font */ /* references associated with the font family consist of individual outline and */ /* bitmapped fonts that may be used with the font access routines of the Font Manager */ /* and ATS Unicode. */ typedef UInt32 FMFont; struct FMFontFamilyInstance { FMFontFamily fontFamily; FMFontStyle fontStyle; }; typedef struct FMFontFamilyInstance FMFontFamilyInstance; struct FMFontFamilyIterator { UInt32 reserved[16]; }; typedef struct FMFontFamilyIterator FMFontFamilyIterator; struct FMFontIterator { UInt32 reserved[16]; }; typedef struct FMFontIterator FMFontIterator; struct FMFontFamilyInstanceIterator { UInt32 reserved[16]; }; typedef struct FMFontFamilyInstanceIterator FMFontFamilyInstanceIterator; enum { kInvalidGeneration = 0L, kInvalidFontFamily = -1, kInvalidFont = 0L, kFMCurrentFilterFormat = 0L, kFMDefaultOptions = kNilOptions, kFMUseGlobalScopeOption = 0x00000001 }; typedef UInt32 FMFilterSelector; enum { kFMInvalidFilterSelector = 0L, kFMFontTechnologyFilterSelector = 1L, kFMFontContainerFilterSelector = 2L, kFMGenerationFilterSelector = 3L, kFMFontFamilyCallbackFilterSelector = 4L, kFMFontCallbackFilterSelector = 5L }; enum { kFMTrueTypeFontTechnology = FOUR_CHAR_CODE('true'), kFMPostScriptFontTechnology = FOUR_CHAR_CODE('typ1') }; typedef CALLBACK_API( OSStatus , FMFontFamilyCallbackFilterProcPtr )(FMFontFamily iFontFamily, void *iRefCon); typedef CALLBACK_API( OSStatus , FMFontCallbackFilterProcPtr )(FMFont iFont, void *iRefCon); typedef STACK_UPP_TYPE(FMFontFamilyCallbackFilterProcPtr) FMFontFamilyCallbackFilterUPP; typedef STACK_UPP_TYPE(FMFontCallbackFilterProcPtr) FMFontCallbackFilterUPP; #if OPAQUE_UPP_TYPES #if CALL_NOT_IN_CARBON EXTERN_API(FMFontFamilyCallbackFilterUPP) NewFMFontFamilyCallbackFilterUPP (FMFontFamilyCallbackFilterProcPtr userRoutine); EXTERN_API(FMFontCallbackFilterUPP) NewFMFontCallbackFilterUPP (FMFontCallbackFilterProcPtr userRoutine); EXTERN_API(void) DisposeFMFontFamilyCallbackFilterUPP (FMFontFamilyCallbackFilterUPP userUPP); EXTERN_API(void) DisposeFMFontCallbackFilterUPP (FMFontCallbackFilterUPP userUPP); EXTERN_API(OSStatus) InvokeFMFontFamilyCallbackFilterUPP (FMFontFamily iFontFamily, void * iRefCon, FMFontFamilyCallbackFilterUPP userUPP); EXTERN_API(OSStatus) InvokeFMFontCallbackFilterUPP (FMFont iFont, void * iRefCon, FMFontCallbackFilterUPP userUPP); #endif /* CALL_NOT_IN_CARBON */ #else enum { uppFMFontFamilyCallbackFilterProcInfo = 0x000003B0 }; /* pascal 4_bytes Func(2_bytes, 4_bytes) */ enum { uppFMFontCallbackFilterProcInfo = 0x000003F0 }; /* pascal 4_bytes Func(4_bytes, 4_bytes) */ #define NewFMFontFamilyCallbackFilterUPP(userRoutine) (FMFontFamilyCallbackFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFMFontFamilyCallbackFilterProcInfo, GetCurrentArchitecture()) #define NewFMFontCallbackFilterUPP(userRoutine) (FMFontCallbackFilterUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppFMFontCallbackFilterProcInfo, GetCurrentArchitecture()) #define DisposeFMFontFamilyCallbackFilterUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define DisposeFMFontCallbackFilterUPP(userUPP) DisposeRoutineDescriptor(userUPP) #define InvokeFMFontFamilyCallbackFilterUPP(iFontFamily, iRefCon, userUPP) (OSStatus)CALL_TWO_PARAMETER_UPP((userUPP), uppFMFontFamilyCallbackFilterProcInfo, (iFontFamily), (iRefCon)) #define InvokeFMFontCallbackFilterUPP(iFont, iRefCon, userUPP) (OSStatus)CALL_TWO_PARAMETER_UPP((userUPP), uppFMFontCallbackFilterProcInfo, (iFont), (iRefCon)) #endif /* support for pre-Carbon UPP routines: NewXXXProc and CallXXXProc */ #define NewFMFontFamilyCallbackFilterProc(userRoutine) NewFMFontFamilyCallbackFilterUPP(userRoutine) #define NewFMFontCallbackFilterProc(userRoutine) NewFMFontCallbackFilterUPP(userRoutine) #define CallFMFontFamilyCallbackFilterProc(userRoutine, iFontFamily, iRefCon) InvokeFMFontFamilyCallbackFilterUPP(iFontFamily, iRefCon, userRoutine) #define CallFMFontCallbackFilterProc(userRoutine, iFont, iRefCon) InvokeFMFontCallbackFilterUPP(iFont, iRefCon, userRoutine) struct FMFilter { UInt32 format; FMFilterSelector selector; union { FourCharCode fontTechnologyFilter; FSSpec fontContainerFilter; FMGeneration generationFilter; FMFontFamilyCallbackFilterUPP fontFamilyCallbackFilter; FMFontCallbackFilterUPP fontCallbackFilter; } filter; }; typedef struct FMFilter FMFilter; /* Enumeration */ EXTERN_API_C( OSStatus ) FMCreateFontFamilyIterator (const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions, FMFontFamilyIterator * ioIterator); EXTERN_API_C( OSStatus ) FMDisposeFontFamilyIterator (FMFontFamilyIterator * ioIterator); EXTERN_API_C( OSStatus ) FMResetFontFamilyIterator (const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions, FMFontFamilyIterator * ioIterator); EXTERN_API_C( OSStatus ) FMGetNextFontFamily (FMFontFamilyIterator * ioIterator, FMFontFamily * oFontFamily); EXTERN_API_C( OSStatus ) FMCreateFontIterator (const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions, FMFontIterator * ioIterator); EXTERN_API_C( OSStatus ) FMDisposeFontIterator (FMFontIterator * ioIterator); EXTERN_API_C( OSStatus ) FMResetFontIterator (const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions, FMFontIterator * ioIterator); EXTERN_API_C( OSStatus ) FMGetNextFont (FMFontIterator * ioIterator, FMFont * oFont); /* Font families */ EXTERN_API_C( OSStatus ) FMCreateFontFamilyInstanceIterator (FMFontFamily iFontFamily, FMFontFamilyInstanceIterator * ioIterator); EXTERN_API_C( OSStatus ) FMDisposeFontFamilyInstanceIterator (FMFontFamilyInstanceIterator * ioIterator); EXTERN_API_C( OSStatus ) FMResetFontFamilyInstanceIterator (FMFontFamily iFontFamily, FMFontFamilyInstanceIterator * ioIterator); EXTERN_API_C( OSStatus ) FMGetNextFontFamilyInstance (FMFontFamilyInstanceIterator * ioIterator, FMFont * oFont, FMFontStyle * oStyle, /* can be NULL */ FMFontSize * oSize) /* can be NULL */; EXTERN_API_C( FMFontFamily ) FMGetFontFamilyFromName (ConstStr255Param iName); EXTERN_API_C( OSStatus ) FMGetFontFamilyName (FMFontFamily iFontFamily, Str255 oName); EXTERN_API_C( OSStatus ) FMGetFontFamilyTextEncoding (FMFontFamily iFontFamily, TextEncoding * oTextEncoding); EXTERN_API_C( OSStatus ) FMGetFontFamilyGeneration (FMFontFamily iFontFamily, FMGeneration * oGeneration); /* Fonts */ EXTERN_API_C( OSStatus ) FMGetFontFormat (FMFont iFont, FourCharCode * oFormat); EXTERN_API_C( OSStatus ) FMGetFontTableDirectory (FMFont iFont, ByteCount iLength, void * iBuffer, ByteCount * oActualLength) /* can be NULL */; EXTERN_API_C( OSStatus ) FMGetFontTable (FMFont iFont, FourCharCode iTag, ByteOffset iOffset, ByteCount iLength, void * iBuffer, ByteCount * oActualLength) /* can be NULL */; EXTERN_API_C( OSStatus ) FMGetFontGeneration (FMFont iFont, FMGeneration * oGeneration); EXTERN_API_C( OSStatus ) FMGetFontContainer (FMFont iFont, FSSpec * oFontContainer); /* Conversion */ EXTERN_API_C( OSStatus ) FMGetFontFromFontFamilyInstance (FMFontFamily iFontFamily, FMFontStyle iStyle, FMFont * oFont, FMFontStyle * oIntrinsicStyle) /* can be NULL */; EXTERN_API_C( OSStatus ) FMGetFontFamilyInstanceFromFont (FMFont iFont, FMFontFamily * oFontFamily, FMFontStyle * oStyle); /* Activation */ EXTERN_API_C( OSStatus ) FMActivateFonts (const FSSpec * iFontContainer, const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions); EXTERN_API_C( OSStatus ) FMDeactivateFonts (const FSSpec * iFontContainer, const FMFilter * iFilter, /* can be NULL */ void * iRefCon, OptionBits iOptions); EXTERN_API_C( FMGeneration ) FMGetGeneration (void); typedef FMFontFamily FontFamilyID; /*--------------------------------------------------------------------------------------*/ #if OLDROUTINENAMES enum { newYork = kFontIDNewYork, geneva = kFontIDGeneva, monaco = kFontIDMonaco, venice = kFontIDVenice, london = kFontIDLondon, athens = kFontIDAthens, sanFran = kFontIDSanFrancisco, toronto = kFontIDToronto, cairo = kFontIDCairo, losAngeles = kFontIDLosAngeles, times = kFontIDTimes, helvetica = kFontIDHelvetica, courier = kFontIDCourier, symbol = kFontIDSymbol, mobile = kFontIDMobile }; #endif /* OLDROUTINENAMES */ /*--------------------------------------------------------------------------------------*/ #if PRAGMA_STRUCT_ALIGN #pragma options align=reset #elif PRAGMA_STRUCT_PACKPUSH #pragma pack(pop) #elif PRAGMA_STRUCT_PACK #pragma pack() #endif #ifdef PRAGMA_IMPORT_OFF #pragma import off #elif PRAGMA_IMPORT #pragma import reset #endif #ifdef __cplusplus } #endif #endif /* __FONTS__ */