1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ftobjs.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* The FreeType private base classes (specification). */ 6*37da2899SCharles.Forsyth /* */ 7*37da2899SCharles.Forsyth /* Copyright 1996-2001, 2002 by */ 8*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9*37da2899SCharles.Forsyth /* */ 10*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 11*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 12*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 14*37da2899SCharles.Forsyth /* understand and accept it fully. */ 15*37da2899SCharles.Forsyth /* */ 16*37da2899SCharles.Forsyth /***************************************************************************/ 17*37da2899SCharles.Forsyth 18*37da2899SCharles.Forsyth 19*37da2899SCharles.Forsyth /*************************************************************************/ 20*37da2899SCharles.Forsyth /* */ 21*37da2899SCharles.Forsyth /* This file contains the definition of all internal FreeType classes. */ 22*37da2899SCharles.Forsyth /* */ 23*37da2899SCharles.Forsyth /*************************************************************************/ 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsyth 26*37da2899SCharles.Forsyth #ifndef __FTOBJS_H__ 27*37da2899SCharles.Forsyth #define __FTOBJS_H__ 28*37da2899SCharles.Forsyth 29*37da2899SCharles.Forsyth #include <ft2build.h> 30*37da2899SCharles.Forsyth #include FT_CONFIG_STANDARD_LIBRARY_H /* for ft_setjmp and ft_longjmp */ 31*37da2899SCharles.Forsyth #include FT_RENDER_H 32*37da2899SCharles.Forsyth #include FT_SIZES_H 33*37da2899SCharles.Forsyth #include FT_INTERNAL_MEMORY_H 34*37da2899SCharles.Forsyth #include FT_INTERNAL_GLYPH_LOADER_H 35*37da2899SCharles.Forsyth #include FT_INTERNAL_DRIVER_H 36*37da2899SCharles.Forsyth #include FT_INTERNAL_AUTOHINT_H 37*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECT_H 38*37da2899SCharles.Forsyth 39*37da2899SCharles.Forsyth #ifdef FT_CONFIG_OPTION_INCREMENTAL 40*37da2899SCharles.Forsyth #include FT_INCREMENTAL_H 41*37da2899SCharles.Forsyth #endif 42*37da2899SCharles.Forsyth 43*37da2899SCharles.Forsyth 44*37da2899SCharles.Forsyth FT_BEGIN_HEADER 45*37da2899SCharles.Forsyth 46*37da2899SCharles.Forsyth 47*37da2899SCharles.Forsyth /*************************************************************************/ 48*37da2899SCharles.Forsyth /* */ 49*37da2899SCharles.Forsyth /* Some generic definitions. */ 50*37da2899SCharles.Forsyth /* */ 51*37da2899SCharles.Forsyth #ifndef TRUE 52*37da2899SCharles.Forsyth #define TRUE 1 53*37da2899SCharles.Forsyth #endif 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth #ifndef FALSE 56*37da2899SCharles.Forsyth #define FALSE 0 57*37da2899SCharles.Forsyth #endif 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth #ifndef NULL 60*37da2899SCharles.Forsyth #define NULL (void*)0 61*37da2899SCharles.Forsyth #endif 62*37da2899SCharles.Forsyth 63*37da2899SCharles.Forsyth 64*37da2899SCharles.Forsyth /*************************************************************************/ 65*37da2899SCharles.Forsyth /* */ 66*37da2899SCharles.Forsyth /* The min and max functions missing in C. As usual, be careful not to */ 67*37da2899SCharles.Forsyth /* write things like MIN( a++, b++ ) to avoid side effects. */ 68*37da2899SCharles.Forsyth /* */ 69*37da2899SCharles.Forsyth #ifndef MIN 70*37da2899SCharles.Forsyth #define MIN( a, b ) ( (a) < (b) ? (a) : (b) ) 71*37da2899SCharles.Forsyth #endif 72*37da2899SCharles.Forsyth 73*37da2899SCharles.Forsyth #ifndef MAX 74*37da2899SCharles.Forsyth #define MAX( a, b ) ( (a) > (b) ? (a) : (b) ) 75*37da2899SCharles.Forsyth #endif 76*37da2899SCharles.Forsyth 77*37da2899SCharles.Forsyth #ifndef ABS 78*37da2899SCharles.Forsyth #define ABS( a ) ( (a) < 0 ? -(a) : (a) ) 79*37da2899SCharles.Forsyth #endif 80*37da2899SCharles.Forsyth 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth /*************************************************************************/ 83*37da2899SCharles.Forsyth /*************************************************************************/ 84*37da2899SCharles.Forsyth /*************************************************************************/ 85*37da2899SCharles.Forsyth /**** ****/ 86*37da2899SCharles.Forsyth /**** ****/ 87*37da2899SCharles.Forsyth /**** V A L I D A T I O N ****/ 88*37da2899SCharles.Forsyth /**** ****/ 89*37da2899SCharles.Forsyth /**** ****/ 90*37da2899SCharles.Forsyth /*************************************************************************/ 91*37da2899SCharles.Forsyth /*************************************************************************/ 92*37da2899SCharles.Forsyth /*************************************************************************/ 93*37da2899SCharles.Forsyth 94*37da2899SCharles.Forsyth /* handle to a validation object */ 95*37da2899SCharles.Forsyth typedef struct FT_ValidatorRec_* FT_Validator; 96*37da2899SCharles.Forsyth 97*37da2899SCharles.Forsyth 98*37da2899SCharles.Forsyth /*************************************************************************/ 99*37da2899SCharles.Forsyth /* */ 100*37da2899SCharles.Forsyth /* There are three distinct validation levels defined here: */ 101*37da2899SCharles.Forsyth /* */ 102*37da2899SCharles.Forsyth /* FT_VALIDATE_DEFAULT :: */ 103*37da2899SCharles.Forsyth /* A table that passes this validation level can be used reliably by */ 104*37da2899SCharles.Forsyth /* FreeType. It generally means that all offsets have been checked to */ 105*37da2899SCharles.Forsyth /* prevent out-of-bound reads, array counts are correct, etc. */ 106*37da2899SCharles.Forsyth /* */ 107*37da2899SCharles.Forsyth /* FT_VALIDATE_TIGHT :: */ 108*37da2899SCharles.Forsyth /* A table that passes this validation level can be used reliably and */ 109*37da2899SCharles.Forsyth /* doesn't contain invalid data. For example, a charmap table that */ 110*37da2899SCharles.Forsyth /* returns invalid glyph indices will not pass, even though it can */ 111*37da2899SCharles.Forsyth /* be used with FreeType in default mode (the library will simply */ 112*37da2899SCharles.Forsyth /* return an error later when trying to load the glyph). */ 113*37da2899SCharles.Forsyth /* */ 114*37da2899SCharles.Forsyth /* It also check that fields that must be a multiple of 2, 4, or 8 */ 115*37da2899SCharles.Forsyth /* dont' have incorrect values, etc. */ 116*37da2899SCharles.Forsyth /* */ 117*37da2899SCharles.Forsyth /* FT_VALIDATE_PARANOID :: */ 118*37da2899SCharles.Forsyth /* Only for font debugging. Checks that a table follows the */ 119*37da2899SCharles.Forsyth /* specification by 100%. Very few fonts will be able to pass this */ 120*37da2899SCharles.Forsyth /* level anyway but it can be useful for certain tools like font */ 121*37da2899SCharles.Forsyth /* editors/converters. */ 122*37da2899SCharles.Forsyth /* */ 123*37da2899SCharles.Forsyth typedef enum FT_ValidationLevel_ 124*37da2899SCharles.Forsyth { 125*37da2899SCharles.Forsyth FT_VALIDATE_DEFAULT = 0, 126*37da2899SCharles.Forsyth FT_VALIDATE_TIGHT, 127*37da2899SCharles.Forsyth FT_VALIDATE_PARANOID 128*37da2899SCharles.Forsyth 129*37da2899SCharles.Forsyth } FT_ValidationLevel; 130*37da2899SCharles.Forsyth 131*37da2899SCharles.Forsyth 132*37da2899SCharles.Forsyth /* validator structure */ 133*37da2899SCharles.Forsyth typedef struct FT_ValidatorRec_ 134*37da2899SCharles.Forsyth { 135*37da2899SCharles.Forsyth const FT_Byte* base; /* address of table in memory */ 136*37da2899SCharles.Forsyth const FT_Byte* limit; /* `base' + sizeof(table) in memory */ 137*37da2899SCharles.Forsyth FT_ValidationLevel level; /* validation level */ 138*37da2899SCharles.Forsyth FT_Error error; /* error returned. 0 means success */ 139*37da2899SCharles.Forsyth 140*37da2899SCharles.Forsyth ft_jmp_buf jump_buffer; /* used for exception handling */ 141*37da2899SCharles.Forsyth 142*37da2899SCharles.Forsyth } FT_ValidatorRec; 143*37da2899SCharles.Forsyth 144*37da2899SCharles.Forsyth 145*37da2899SCharles.Forsyth #define FT_VALIDATOR( x ) ((FT_Validator)( x )) 146*37da2899SCharles.Forsyth 147*37da2899SCharles.Forsyth 148*37da2899SCharles.Forsyth FT_BASE( void ) 149*37da2899SCharles.Forsyth ft_validator_init( FT_Validator valid, 150*37da2899SCharles.Forsyth const FT_Byte* base, 151*37da2899SCharles.Forsyth const FT_Byte* limit, 152*37da2899SCharles.Forsyth FT_ValidationLevel level ); 153*37da2899SCharles.Forsyth 154*37da2899SCharles.Forsyth FT_BASE( FT_Int ) 155*37da2899SCharles.Forsyth ft_validator_run( FT_Validator valid ); 156*37da2899SCharles.Forsyth 157*37da2899SCharles.Forsyth /* Sets the error field in a validator, then calls `longjmp' to return */ 158*37da2899SCharles.Forsyth /* to high-level caller. Using `setjmp/longjmp' avoids many stupid */ 159*37da2899SCharles.Forsyth /* error checks within the validation routines. */ 160*37da2899SCharles.Forsyth /* */ 161*37da2899SCharles.Forsyth FT_BASE( void ) 162*37da2899SCharles.Forsyth ft_validator_error( FT_Validator valid, 163*37da2899SCharles.Forsyth FT_Error error ); 164*37da2899SCharles.Forsyth 165*37da2899SCharles.Forsyth 166*37da2899SCharles.Forsyth /* Calls ft_validate_error. Assumes that the `valid' local variable */ 167*37da2899SCharles.Forsyth /* holds a pointer to the current validator object. */ 168*37da2899SCharles.Forsyth /* */ 169*37da2899SCharles.Forsyth #define FT_INVALID( _error ) ft_validator_error( valid, _error ) 170*37da2899SCharles.Forsyth 171*37da2899SCharles.Forsyth /* called when a broken table is detected */ 172*37da2899SCharles.Forsyth #define FT_INVALID_TOO_SHORT FT_INVALID( FT_Err_Invalid_Table ) 173*37da2899SCharles.Forsyth 174*37da2899SCharles.Forsyth /* called when an invalid offset is detected */ 175*37da2899SCharles.Forsyth #define FT_INVALID_OFFSET FT_INVALID( FT_Err_Invalid_Offset ) 176*37da2899SCharles.Forsyth 177*37da2899SCharles.Forsyth /* called when an invalid format/value is detected */ 178*37da2899SCharles.Forsyth #define FT_INVALID_FORMAT FT_INVALID( FT_Err_Invalid_Table ) 179*37da2899SCharles.Forsyth 180*37da2899SCharles.Forsyth /* called when an invalid glyph index is detected */ 181*37da2899SCharles.Forsyth #define FT_INVALID_GLYPH_ID FT_INVALID( FT_Err_Invalid_Glyph_Index ) 182*37da2899SCharles.Forsyth 183*37da2899SCharles.Forsyth /* called when an invalid field value is detected */ 184*37da2899SCharles.Forsyth #define FT_INVALID_DATA FT_INVALID( FT_Err_Invalid_Table ) 185*37da2899SCharles.Forsyth 186*37da2899SCharles.Forsyth 187*37da2899SCharles.Forsyth /*************************************************************************/ 188*37da2899SCharles.Forsyth /*************************************************************************/ 189*37da2899SCharles.Forsyth /*************************************************************************/ 190*37da2899SCharles.Forsyth /**** ****/ 191*37da2899SCharles.Forsyth /**** ****/ 192*37da2899SCharles.Forsyth /**** C H A R M A P S ****/ 193*37da2899SCharles.Forsyth /**** ****/ 194*37da2899SCharles.Forsyth /**** ****/ 195*37da2899SCharles.Forsyth /*************************************************************************/ 196*37da2899SCharles.Forsyth /*************************************************************************/ 197*37da2899SCharles.Forsyth /*************************************************************************/ 198*37da2899SCharles.Forsyth 199*37da2899SCharles.Forsyth /* handle to internal charmap object */ 200*37da2899SCharles.Forsyth typedef struct FT_CMapRec_* FT_CMap; 201*37da2899SCharles.Forsyth 202*37da2899SCharles.Forsyth /* handle to charmap class structure */ 203*37da2899SCharles.Forsyth typedef const struct FT_CMap_ClassRec_* FT_CMap_Class; 204*37da2899SCharles.Forsyth 205*37da2899SCharles.Forsyth /* internal charmap object structure */ 206*37da2899SCharles.Forsyth typedef struct FT_CMapRec_ 207*37da2899SCharles.Forsyth { 208*37da2899SCharles.Forsyth FT_CharMapRec charmap; 209*37da2899SCharles.Forsyth FT_CMap_Class clazz; 210*37da2899SCharles.Forsyth 211*37da2899SCharles.Forsyth } FT_CMapRec; 212*37da2899SCharles.Forsyth 213*37da2899SCharles.Forsyth /* typecase any pointer to a charmap handle */ 214*37da2899SCharles.Forsyth #define FT_CMAP( x ) ((FT_CMap)( x )) 215*37da2899SCharles.Forsyth 216*37da2899SCharles.Forsyth /* obvious macros */ 217*37da2899SCharles.Forsyth #define FT_CMAP_PLATFORM_ID( x ) FT_CMAP( x )->charmap.platform_id 218*37da2899SCharles.Forsyth #define FT_CMAP_ENCODING_ID( x ) FT_CMAP( x )->charmap.encoding_id 219*37da2899SCharles.Forsyth #define FT_CMAP_ENCODING( x ) FT_CMAP( x )->charmap.encoding 220*37da2899SCharles.Forsyth #define FT_CMAP_FACE( x ) FT_CMAP( x )->charmap.face 221*37da2899SCharles.Forsyth 222*37da2899SCharles.Forsyth 223*37da2899SCharles.Forsyth /* class method definitions */ 224*37da2899SCharles.Forsyth typedef FT_Error 225*37da2899SCharles.Forsyth (*FT_CMap_InitFunc)( FT_CMap cmap, 226*37da2899SCharles.Forsyth FT_Pointer init_data ); 227*37da2899SCharles.Forsyth 228*37da2899SCharles.Forsyth typedef void 229*37da2899SCharles.Forsyth (*FT_CMap_DoneFunc)( FT_CMap cmap ); 230*37da2899SCharles.Forsyth 231*37da2899SCharles.Forsyth typedef FT_UInt 232*37da2899SCharles.Forsyth (*FT_CMap_CharIndexFunc)( FT_CMap cmap, 233*37da2899SCharles.Forsyth FT_UInt32 char_code ); 234*37da2899SCharles.Forsyth 235*37da2899SCharles.Forsyth typedef FT_UInt 236*37da2899SCharles.Forsyth (*FT_CMap_CharNextFunc)( FT_CMap cmap, 237*37da2899SCharles.Forsyth FT_UInt32 *achar_code ); 238*37da2899SCharles.Forsyth 239*37da2899SCharles.Forsyth 240*37da2899SCharles.Forsyth typedef struct FT_CMap_ClassRec_ 241*37da2899SCharles.Forsyth { 242*37da2899SCharles.Forsyth FT_UInt size; 243*37da2899SCharles.Forsyth FT_CMap_InitFunc init; 244*37da2899SCharles.Forsyth FT_CMap_DoneFunc done; 245*37da2899SCharles.Forsyth FT_CMap_CharIndexFunc char_index; 246*37da2899SCharles.Forsyth FT_CMap_CharNextFunc char_next; 247*37da2899SCharles.Forsyth 248*37da2899SCharles.Forsyth } FT_CMap_ClassRec; 249*37da2899SCharles.Forsyth 250*37da2899SCharles.Forsyth 251*37da2899SCharles.Forsyth /* create a new charmap and add it to charmap->face */ 252*37da2899SCharles.Forsyth FT_BASE( FT_Error ) 253*37da2899SCharles.Forsyth FT_CMap_New( FT_CMap_Class clazz, 254*37da2899SCharles.Forsyth FT_Pointer init_data, 255*37da2899SCharles.Forsyth FT_CharMap charmap, 256*37da2899SCharles.Forsyth FT_CMap *acmap ); 257*37da2899SCharles.Forsyth 258*37da2899SCharles.Forsyth /* destroy a charmap (don't remove it from face's list though) */ 259*37da2899SCharles.Forsyth FT_BASE( void ) 260*37da2899SCharles.Forsyth FT_CMap_Done( FT_CMap cmap ); 261*37da2899SCharles.Forsyth 262*37da2899SCharles.Forsyth 263*37da2899SCharles.Forsyth /*************************************************************************/ 264*37da2899SCharles.Forsyth /* */ 265*37da2899SCharles.Forsyth /* <Struct> */ 266*37da2899SCharles.Forsyth /* FT_Face_InternalRec */ 267*37da2899SCharles.Forsyth /* */ 268*37da2899SCharles.Forsyth /* <Description> */ 269*37da2899SCharles.Forsyth /* This structure contains the internal fields of each FT_Face */ 270*37da2899SCharles.Forsyth /* object. These fields may change between different releases of */ 271*37da2899SCharles.Forsyth /* FreeType. */ 272*37da2899SCharles.Forsyth /* */ 273*37da2899SCharles.Forsyth /* <Fields> */ 274*37da2899SCharles.Forsyth /* max_points :: The maximal number of points used to store the */ 275*37da2899SCharles.Forsyth /* vectorial outline of any glyph in this face. */ 276*37da2899SCharles.Forsyth /* If this value cannot be known in advance, or */ 277*37da2899SCharles.Forsyth /* if the face isn't scalable, this should be set */ 278*37da2899SCharles.Forsyth /* to 0. Only relevant for scalable formats. */ 279*37da2899SCharles.Forsyth /* */ 280*37da2899SCharles.Forsyth /* max_contours :: The maximal number of contours used to store */ 281*37da2899SCharles.Forsyth /* the vectorial outline of any glyph in this */ 282*37da2899SCharles.Forsyth /* face. If this value cannot be known in */ 283*37da2899SCharles.Forsyth /* advance, or if the face isn't scalable, this */ 284*37da2899SCharles.Forsyth /* should be set to 0. Only relevant for */ 285*37da2899SCharles.Forsyth /* scalable formats. */ 286*37da2899SCharles.Forsyth /* */ 287*37da2899SCharles.Forsyth /* transform_matrix :: A 2x2 matrix of 16.16 coefficients used to */ 288*37da2899SCharles.Forsyth /* transform glyph outlines after they are loaded */ 289*37da2899SCharles.Forsyth /* from the font. Only used by the convenience */ 290*37da2899SCharles.Forsyth /* functions. */ 291*37da2899SCharles.Forsyth /* */ 292*37da2899SCharles.Forsyth /* transform_delta :: A translation vector used to transform glyph */ 293*37da2899SCharles.Forsyth /* outlines after they are loaded from the font. */ 294*37da2899SCharles.Forsyth /* Only used by the convenience functions. */ 295*37da2899SCharles.Forsyth /* */ 296*37da2899SCharles.Forsyth /* transform_flags :: Some flags used to classify the transform. */ 297*37da2899SCharles.Forsyth /* Only used by the convenience functions. */ 298*37da2899SCharles.Forsyth /* */ 299*37da2899SCharles.Forsyth /* hint_flags :: Some flags used to change the hinters' */ 300*37da2899SCharles.Forsyth /* behaviour. Only used for debugging for now. */ 301*37da2899SCharles.Forsyth /* */ 302*37da2899SCharles.Forsyth /* postscript_name :: Postscript font name for this face. */ 303*37da2899SCharles.Forsyth /* */ 304*37da2899SCharles.Forsyth /* incremental_interface :: */ 305*37da2899SCharles.Forsyth /* If non-null, the interface through */ 306*37da2899SCharles.Forsyth /* which glyph data and metrics are loaded */ 307*37da2899SCharles.Forsyth /* incrementally for faces that do not provide */ 308*37da2899SCharles.Forsyth /* all of this data when first opened. */ 309*37da2899SCharles.Forsyth /* This field exists only if */ 310*37da2899SCharles.Forsyth /* @FT_CONFIG_OPTION_INCREMENTAL is defined. */ 311*37da2899SCharles.Forsyth /* */ 312*37da2899SCharles.Forsyth typedef struct FT_Face_InternalRec_ 313*37da2899SCharles.Forsyth { 314*37da2899SCharles.Forsyth FT_UShort max_points; 315*37da2899SCharles.Forsyth FT_Short max_contours; 316*37da2899SCharles.Forsyth 317*37da2899SCharles.Forsyth FT_Matrix transform_matrix; 318*37da2899SCharles.Forsyth FT_Vector transform_delta; 319*37da2899SCharles.Forsyth FT_Int transform_flags; 320*37da2899SCharles.Forsyth 321*37da2899SCharles.Forsyth FT_UInt32 hint_flags; 322*37da2899SCharles.Forsyth 323*37da2899SCharles.Forsyth const char* postscript_name; 324*37da2899SCharles.Forsyth 325*37da2899SCharles.Forsyth #ifdef FT_CONFIG_OPTION_INCREMENTAL 326*37da2899SCharles.Forsyth FT_Incremental_InterfaceRec* incremental_interface; 327*37da2899SCharles.Forsyth #endif 328*37da2899SCharles.Forsyth 329*37da2899SCharles.Forsyth } FT_Face_InternalRec; 330*37da2899SCharles.Forsyth 331*37da2899SCharles.Forsyth 332*37da2899SCharles.Forsyth /*************************************************************************/ 333*37da2899SCharles.Forsyth /* */ 334*37da2899SCharles.Forsyth /* <Struct> */ 335*37da2899SCharles.Forsyth /* FT_Slot_InternalRec */ 336*37da2899SCharles.Forsyth /* */ 337*37da2899SCharles.Forsyth /* <Description> */ 338*37da2899SCharles.Forsyth /* This structure contains the internal fields of each FT_GlyphSlot */ 339*37da2899SCharles.Forsyth /* object. These fields may change between different releases of */ 340*37da2899SCharles.Forsyth /* FreeType. */ 341*37da2899SCharles.Forsyth /* */ 342*37da2899SCharles.Forsyth /* <Fields> */ 343*37da2899SCharles.Forsyth /* loader :: The glyph loader object used to load outlines */ 344*37da2899SCharles.Forsyth /* into the glyph slot. */ 345*37da2899SCharles.Forsyth /* */ 346*37da2899SCharles.Forsyth /* glyph_transformed :: Boolean. Set to TRUE when the loaded glyph */ 347*37da2899SCharles.Forsyth /* must be transformed through a specific */ 348*37da2899SCharles.Forsyth /* font transformation. This is _not_ the same */ 349*37da2899SCharles.Forsyth /* as the face transform set through */ 350*37da2899SCharles.Forsyth /* FT_Set_Transform(). */ 351*37da2899SCharles.Forsyth /* */ 352*37da2899SCharles.Forsyth /* glyph_matrix :: The 2x2 matrix corresponding to the glyph */ 353*37da2899SCharles.Forsyth /* transformation, if necessary. */ 354*37da2899SCharles.Forsyth /* */ 355*37da2899SCharles.Forsyth /* glyph_delta :: The 2d translation vector corresponding to */ 356*37da2899SCharles.Forsyth /* the glyph transformation, if necessary. */ 357*37da2899SCharles.Forsyth /* */ 358*37da2899SCharles.Forsyth /* glyph_hints :: Format-specific glyph hints management. */ 359*37da2899SCharles.Forsyth /* */ 360*37da2899SCharles.Forsyth typedef struct FT_Slot_InternalRec_ 361*37da2899SCharles.Forsyth { 362*37da2899SCharles.Forsyth FT_GlyphLoader loader; 363*37da2899SCharles.Forsyth FT_Bool glyph_transformed; 364*37da2899SCharles.Forsyth FT_Matrix glyph_matrix; 365*37da2899SCharles.Forsyth FT_Vector glyph_delta; 366*37da2899SCharles.Forsyth void* glyph_hints; 367*37da2899SCharles.Forsyth 368*37da2899SCharles.Forsyth } FT_GlyphSlot_InternalRec; 369*37da2899SCharles.Forsyth 370*37da2899SCharles.Forsyth 371*37da2899SCharles.Forsyth /*************************************************************************/ 372*37da2899SCharles.Forsyth /*************************************************************************/ 373*37da2899SCharles.Forsyth /*************************************************************************/ 374*37da2899SCharles.Forsyth /**** ****/ 375*37da2899SCharles.Forsyth /**** ****/ 376*37da2899SCharles.Forsyth /**** M O D U L E S ****/ 377*37da2899SCharles.Forsyth /**** ****/ 378*37da2899SCharles.Forsyth /**** ****/ 379*37da2899SCharles.Forsyth /*************************************************************************/ 380*37da2899SCharles.Forsyth /*************************************************************************/ 381*37da2899SCharles.Forsyth /*************************************************************************/ 382*37da2899SCharles.Forsyth 383*37da2899SCharles.Forsyth 384*37da2899SCharles.Forsyth /*************************************************************************/ 385*37da2899SCharles.Forsyth /* */ 386*37da2899SCharles.Forsyth /* <Struct> */ 387*37da2899SCharles.Forsyth /* FT_ModuleRec */ 388*37da2899SCharles.Forsyth /* */ 389*37da2899SCharles.Forsyth /* <Description> */ 390*37da2899SCharles.Forsyth /* A module object instance. */ 391*37da2899SCharles.Forsyth /* */ 392*37da2899SCharles.Forsyth /* <Fields> */ 393*37da2899SCharles.Forsyth /* clazz :: A pointer to the module's class. */ 394*37da2899SCharles.Forsyth /* */ 395*37da2899SCharles.Forsyth /* library :: A handle to the parent library object. */ 396*37da2899SCharles.Forsyth /* */ 397*37da2899SCharles.Forsyth /* memory :: A handle to the memory manager. */ 398*37da2899SCharles.Forsyth /* */ 399*37da2899SCharles.Forsyth /* generic :: A generic structure for user-level extensibility (?). */ 400*37da2899SCharles.Forsyth /* */ 401*37da2899SCharles.Forsyth typedef struct FT_ModuleRec_ 402*37da2899SCharles.Forsyth { 403*37da2899SCharles.Forsyth FT_Module_Class* clazz; 404*37da2899SCharles.Forsyth FT_Library library; 405*37da2899SCharles.Forsyth FT_Memory memory; 406*37da2899SCharles.Forsyth FT_Generic generic; 407*37da2899SCharles.Forsyth 408*37da2899SCharles.Forsyth } FT_ModuleRec; 409*37da2899SCharles.Forsyth 410*37da2899SCharles.Forsyth 411*37da2899SCharles.Forsyth /* typecast an object to a FT_Module */ 412*37da2899SCharles.Forsyth #define FT_MODULE( x ) ((FT_Module)( x )) 413*37da2899SCharles.Forsyth #define FT_MODULE_CLASS( x ) FT_MODULE( x )->clazz 414*37da2899SCharles.Forsyth #define FT_MODULE_LIBRARY( x ) FT_MODULE( x )->library 415*37da2899SCharles.Forsyth #define FT_MODULE_MEMORY( x ) FT_MODULE( x )->memory 416*37da2899SCharles.Forsyth 417*37da2899SCharles.Forsyth 418*37da2899SCharles.Forsyth #define FT_MODULE_IS_DRIVER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 419*37da2899SCharles.Forsyth ft_module_font_driver ) 420*37da2899SCharles.Forsyth 421*37da2899SCharles.Forsyth #define FT_MODULE_IS_RENDERER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 422*37da2899SCharles.Forsyth ft_module_renderer ) 423*37da2899SCharles.Forsyth 424*37da2899SCharles.Forsyth #define FT_MODULE_IS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 425*37da2899SCharles.Forsyth ft_module_hinter ) 426*37da2899SCharles.Forsyth 427*37da2899SCharles.Forsyth #define FT_MODULE_IS_STYLER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 428*37da2899SCharles.Forsyth ft_module_styler ) 429*37da2899SCharles.Forsyth 430*37da2899SCharles.Forsyth #define FT_DRIVER_IS_SCALABLE( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 431*37da2899SCharles.Forsyth ft_module_driver_scalable ) 432*37da2899SCharles.Forsyth 433*37da2899SCharles.Forsyth #define FT_DRIVER_USES_OUTLINES( x ) !( FT_MODULE_CLASS( x )->module_flags & \ 434*37da2899SCharles.Forsyth ft_module_driver_no_outlines ) 435*37da2899SCharles.Forsyth 436*37da2899SCharles.Forsyth #define FT_DRIVER_HAS_HINTER( x ) ( FT_MODULE_CLASS( x )->module_flags & \ 437*37da2899SCharles.Forsyth ft_module_driver_has_hinter ) 438*37da2899SCharles.Forsyth 439*37da2899SCharles.Forsyth 440*37da2899SCharles.Forsyth /*************************************************************************/ 441*37da2899SCharles.Forsyth /* */ 442*37da2899SCharles.Forsyth /* <Function> */ 443*37da2899SCharles.Forsyth /* FT_Get_Module_Interface */ 444*37da2899SCharles.Forsyth /* */ 445*37da2899SCharles.Forsyth /* <Description> */ 446*37da2899SCharles.Forsyth /* Finds a module and returns its specific interface as a typeless */ 447*37da2899SCharles.Forsyth /* pointer. */ 448*37da2899SCharles.Forsyth /* */ 449*37da2899SCharles.Forsyth /* <Input> */ 450*37da2899SCharles.Forsyth /* library :: A handle to the library object. */ 451*37da2899SCharles.Forsyth /* */ 452*37da2899SCharles.Forsyth /* module_name :: The module's name (as an ASCII string). */ 453*37da2899SCharles.Forsyth /* */ 454*37da2899SCharles.Forsyth /* <Return> */ 455*37da2899SCharles.Forsyth /* A module-specific interface if available, 0 otherwise. */ 456*37da2899SCharles.Forsyth /* */ 457*37da2899SCharles.Forsyth /* <Note> */ 458*37da2899SCharles.Forsyth /* You should better be familiar with FreeType internals to know */ 459*37da2899SCharles.Forsyth /* which module to look for, and what its interface is :-) */ 460*37da2899SCharles.Forsyth /* */ 461*37da2899SCharles.Forsyth FT_BASE( const void* ) 462*37da2899SCharles.Forsyth FT_Get_Module_Interface( FT_Library library, 463*37da2899SCharles.Forsyth const char* mod_name ); 464*37da2899SCharles.Forsyth 465*37da2899SCharles.Forsyth 466*37da2899SCharles.Forsyth /*************************************************************************/ 467*37da2899SCharles.Forsyth /*************************************************************************/ 468*37da2899SCharles.Forsyth /*************************************************************************/ 469*37da2899SCharles.Forsyth /**** ****/ 470*37da2899SCharles.Forsyth /**** ****/ 471*37da2899SCharles.Forsyth /**** FACE, SIZE & GLYPH SLOT OBJECTS ****/ 472*37da2899SCharles.Forsyth /**** ****/ 473*37da2899SCharles.Forsyth /**** ****/ 474*37da2899SCharles.Forsyth /*************************************************************************/ 475*37da2899SCharles.Forsyth /*************************************************************************/ 476*37da2899SCharles.Forsyth /*************************************************************************/ 477*37da2899SCharles.Forsyth 478*37da2899SCharles.Forsyth /* a few macros used to perform easy typecasts with minimal brain damage */ 479*37da2899SCharles.Forsyth 480*37da2899SCharles.Forsyth #define FT_FACE( x ) ((FT_Face)(x)) 481*37da2899SCharles.Forsyth #define FT_SIZE( x ) ((FT_Size)(x)) 482*37da2899SCharles.Forsyth #define FT_SLOT( x ) ((FT_GlyphSlot)(x)) 483*37da2899SCharles.Forsyth 484*37da2899SCharles.Forsyth #define FT_FACE_DRIVER( x ) FT_FACE( x )->driver 485*37da2899SCharles.Forsyth #define FT_FACE_LIBRARY( x ) FT_FACE_DRIVER( x )->root.library 486*37da2899SCharles.Forsyth #define FT_FACE_MEMORY( x ) FT_FACE( x )->memory 487*37da2899SCharles.Forsyth #define FT_FACE_STREAM( x ) FT_FACE( x )->stream 488*37da2899SCharles.Forsyth 489*37da2899SCharles.Forsyth #define FT_SIZE_FACE( x ) FT_SIZE( x )->face 490*37da2899SCharles.Forsyth #define FT_SLOT_FACE( x ) FT_SLOT( x )->face 491*37da2899SCharles.Forsyth 492*37da2899SCharles.Forsyth #define FT_FACE_SLOT( x ) FT_FACE( x )->glyph 493*37da2899SCharles.Forsyth #define FT_FACE_SIZE( x ) FT_FACE( x )->size 494*37da2899SCharles.Forsyth 495*37da2899SCharles.Forsyth 496*37da2899SCharles.Forsyth /*************************************************************************/ 497*37da2899SCharles.Forsyth /* */ 498*37da2899SCharles.Forsyth /* <Function> */ 499*37da2899SCharles.Forsyth /* FT_New_GlyphSlot */ 500*37da2899SCharles.Forsyth /* */ 501*37da2899SCharles.Forsyth /* <Description> */ 502*37da2899SCharles.Forsyth /* It is sometimes useful to have more than one glyph slot for a */ 503*37da2899SCharles.Forsyth /* given face object. This function is used to create additional */ 504*37da2899SCharles.Forsyth /* slots. All of them are automatically discarded when the face is */ 505*37da2899SCharles.Forsyth /* destroyed. */ 506*37da2899SCharles.Forsyth /* */ 507*37da2899SCharles.Forsyth /* <Input> */ 508*37da2899SCharles.Forsyth /* face :: A handle to a parent face object. */ 509*37da2899SCharles.Forsyth /* */ 510*37da2899SCharles.Forsyth /* <Output> */ 511*37da2899SCharles.Forsyth /* aslot :: A handle to a new glyph slot object. */ 512*37da2899SCharles.Forsyth /* */ 513*37da2899SCharles.Forsyth /* <Return> */ 514*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 515*37da2899SCharles.Forsyth /* */ 516*37da2899SCharles.Forsyth FT_BASE( FT_Error ) 517*37da2899SCharles.Forsyth FT_New_GlyphSlot( FT_Face face, 518*37da2899SCharles.Forsyth FT_GlyphSlot *aslot ); 519*37da2899SCharles.Forsyth 520*37da2899SCharles.Forsyth 521*37da2899SCharles.Forsyth /*************************************************************************/ 522*37da2899SCharles.Forsyth /* */ 523*37da2899SCharles.Forsyth /* <Function> */ 524*37da2899SCharles.Forsyth /* FT_Done_GlyphSlot */ 525*37da2899SCharles.Forsyth /* */ 526*37da2899SCharles.Forsyth /* <Description> */ 527*37da2899SCharles.Forsyth /* Destroys a given glyph slot. Remember however that all slots are */ 528*37da2899SCharles.Forsyth /* automatically destroyed with its parent. Using this function is */ 529*37da2899SCharles.Forsyth /* not always mandatory. */ 530*37da2899SCharles.Forsyth /* */ 531*37da2899SCharles.Forsyth /* <Input> */ 532*37da2899SCharles.Forsyth /* slot :: A handle to a target glyph slot. */ 533*37da2899SCharles.Forsyth /* */ 534*37da2899SCharles.Forsyth FT_BASE( void ) 535*37da2899SCharles.Forsyth FT_Done_GlyphSlot( FT_GlyphSlot slot ); 536*37da2899SCharles.Forsyth 537*37da2899SCharles.Forsyth 538*37da2899SCharles.Forsyth /*************************************************************************/ 539*37da2899SCharles.Forsyth /*************************************************************************/ 540*37da2899SCharles.Forsyth /*************************************************************************/ 541*37da2899SCharles.Forsyth /**** ****/ 542*37da2899SCharles.Forsyth /**** ****/ 543*37da2899SCharles.Forsyth /**** R E N D E R E R S ****/ 544*37da2899SCharles.Forsyth /**** ****/ 545*37da2899SCharles.Forsyth /**** ****/ 546*37da2899SCharles.Forsyth /*************************************************************************/ 547*37da2899SCharles.Forsyth /*************************************************************************/ 548*37da2899SCharles.Forsyth /*************************************************************************/ 549*37da2899SCharles.Forsyth 550*37da2899SCharles.Forsyth 551*37da2899SCharles.Forsyth #define FT_RENDERER( x ) ((FT_Renderer)( x )) 552*37da2899SCharles.Forsyth #define FT_GLYPH( x ) ((FT_Glyph)( x )) 553*37da2899SCharles.Forsyth #define FT_BITMAP_GLYPH( x ) ((FT_BitmapGlyph)( x )) 554*37da2899SCharles.Forsyth #define FT_OUTLINE_GLYPH( x ) ((FT_OutlineGlyph)( x )) 555*37da2899SCharles.Forsyth 556*37da2899SCharles.Forsyth 557*37da2899SCharles.Forsyth typedef struct FT_RendererRec_ 558*37da2899SCharles.Forsyth { 559*37da2899SCharles.Forsyth FT_ModuleRec root; 560*37da2899SCharles.Forsyth FT_Renderer_Class* clazz; 561*37da2899SCharles.Forsyth FT_Glyph_Format glyph_format; 562*37da2899SCharles.Forsyth FT_Glyph_Class glyph_class; 563*37da2899SCharles.Forsyth 564*37da2899SCharles.Forsyth FT_Raster raster; 565*37da2899SCharles.Forsyth FT_Raster_Render_Func raster_render; 566*37da2899SCharles.Forsyth FT_Renderer_RenderFunc render; 567*37da2899SCharles.Forsyth 568*37da2899SCharles.Forsyth } FT_RendererRec; 569*37da2899SCharles.Forsyth 570*37da2899SCharles.Forsyth 571*37da2899SCharles.Forsyth /*************************************************************************/ 572*37da2899SCharles.Forsyth /*************************************************************************/ 573*37da2899SCharles.Forsyth /*************************************************************************/ 574*37da2899SCharles.Forsyth /**** ****/ 575*37da2899SCharles.Forsyth /**** ****/ 576*37da2899SCharles.Forsyth /**** F O N T D R I V E R S ****/ 577*37da2899SCharles.Forsyth /**** ****/ 578*37da2899SCharles.Forsyth /**** ****/ 579*37da2899SCharles.Forsyth /*************************************************************************/ 580*37da2899SCharles.Forsyth /*************************************************************************/ 581*37da2899SCharles.Forsyth /*************************************************************************/ 582*37da2899SCharles.Forsyth 583*37da2899SCharles.Forsyth 584*37da2899SCharles.Forsyth /* typecast a module into a driver easily */ 585*37da2899SCharles.Forsyth #define FT_DRIVER( x ) ((FT_Driver)(x)) 586*37da2899SCharles.Forsyth 587*37da2899SCharles.Forsyth /* typecast a module as a driver, and get its driver class */ 588*37da2899SCharles.Forsyth #define FT_DRIVER_CLASS( x ) FT_DRIVER( x )->clazz 589*37da2899SCharles.Forsyth 590*37da2899SCharles.Forsyth 591*37da2899SCharles.Forsyth /*************************************************************************/ 592*37da2899SCharles.Forsyth /* */ 593*37da2899SCharles.Forsyth /* <Struct> */ 594*37da2899SCharles.Forsyth /* FT_DriverRec */ 595*37da2899SCharles.Forsyth /* */ 596*37da2899SCharles.Forsyth /* <Description> */ 597*37da2899SCharles.Forsyth /* The root font driver class. A font driver is responsible for */ 598*37da2899SCharles.Forsyth /* managing and loading font files of a given format. */ 599*37da2899SCharles.Forsyth /* */ 600*37da2899SCharles.Forsyth /* <Fields> */ 601*37da2899SCharles.Forsyth /* root :: Contains the fields of the root module class. */ 602*37da2899SCharles.Forsyth /* */ 603*37da2899SCharles.Forsyth /* clazz :: A pointer to the font driver's class. Note that */ 604*37da2899SCharles.Forsyth /* this is NOT root.clazz. `class' wasn't used */ 605*37da2899SCharles.Forsyth /* as it is a reserved word in C++. */ 606*37da2899SCharles.Forsyth /* */ 607*37da2899SCharles.Forsyth /* faces_list :: The list of faces currently opened by this */ 608*37da2899SCharles.Forsyth /* driver. */ 609*37da2899SCharles.Forsyth /* */ 610*37da2899SCharles.Forsyth /* extensions :: A typeless pointer to the driver's extensions */ 611*37da2899SCharles.Forsyth /* registry, if they are supported through the */ 612*37da2899SCharles.Forsyth /* configuration macro FT_CONFIG_OPTION_EXTENSIONS. */ 613*37da2899SCharles.Forsyth /* */ 614*37da2899SCharles.Forsyth /* glyph_loader :: The glyph loader for all faces managed by this */ 615*37da2899SCharles.Forsyth /* driver. This object isn't defined for unscalable */ 616*37da2899SCharles.Forsyth /* formats. */ 617*37da2899SCharles.Forsyth /* */ 618*37da2899SCharles.Forsyth typedef struct FT_DriverRec_ 619*37da2899SCharles.Forsyth { 620*37da2899SCharles.Forsyth FT_ModuleRec root; 621*37da2899SCharles.Forsyth FT_Driver_Class clazz; 622*37da2899SCharles.Forsyth 623*37da2899SCharles.Forsyth FT_ListRec faces_list; 624*37da2899SCharles.Forsyth void* extensions; 625*37da2899SCharles.Forsyth 626*37da2899SCharles.Forsyth FT_GlyphLoader glyph_loader; 627*37da2899SCharles.Forsyth 628*37da2899SCharles.Forsyth } FT_DriverRec; 629*37da2899SCharles.Forsyth 630*37da2899SCharles.Forsyth 631*37da2899SCharles.Forsyth /*************************************************************************/ 632*37da2899SCharles.Forsyth /*************************************************************************/ 633*37da2899SCharles.Forsyth /*************************************************************************/ 634*37da2899SCharles.Forsyth /**** ****/ 635*37da2899SCharles.Forsyth /**** ****/ 636*37da2899SCharles.Forsyth /**** L I B R A R I E S ****/ 637*37da2899SCharles.Forsyth /**** ****/ 638*37da2899SCharles.Forsyth /**** ****/ 639*37da2899SCharles.Forsyth /*************************************************************************/ 640*37da2899SCharles.Forsyth /*************************************************************************/ 641*37da2899SCharles.Forsyth /*************************************************************************/ 642*37da2899SCharles.Forsyth 643*37da2899SCharles.Forsyth 644*37da2899SCharles.Forsyth #define FT_DEBUG_HOOK_TRUETYPE 0 645*37da2899SCharles.Forsyth #define FT_DEBUG_HOOK_TYPE1 1 646*37da2899SCharles.Forsyth 647*37da2899SCharles.Forsyth 648*37da2899SCharles.Forsyth /*************************************************************************/ 649*37da2899SCharles.Forsyth /* */ 650*37da2899SCharles.Forsyth /* <Struct> */ 651*37da2899SCharles.Forsyth /* FT_LibraryRec */ 652*37da2899SCharles.Forsyth /* */ 653*37da2899SCharles.Forsyth /* <Description> */ 654*37da2899SCharles.Forsyth /* The FreeType library class. This is the root of all FreeType */ 655*37da2899SCharles.Forsyth /* data. Use FT_New_Library() to create a library object, and */ 656*37da2899SCharles.Forsyth /* FT_Done_Library() to discard it and all child objects. */ 657*37da2899SCharles.Forsyth /* */ 658*37da2899SCharles.Forsyth /* <Fields> */ 659*37da2899SCharles.Forsyth /* memory :: The library's memory object. Manages memory */ 660*37da2899SCharles.Forsyth /* allocation. */ 661*37da2899SCharles.Forsyth /* */ 662*37da2899SCharles.Forsyth /* generic :: Client data variable. Used to extend the */ 663*37da2899SCharles.Forsyth /* Library class by higher levels and clients. */ 664*37da2899SCharles.Forsyth /* */ 665*37da2899SCharles.Forsyth /* num_modules :: The number of modules currently registered */ 666*37da2899SCharles.Forsyth /* within this library. This is set to 0 for new */ 667*37da2899SCharles.Forsyth /* libraries. New modules are added through the */ 668*37da2899SCharles.Forsyth /* FT_Add_Module() API function. */ 669*37da2899SCharles.Forsyth /* */ 670*37da2899SCharles.Forsyth /* modules :: A table used to store handles to the currently */ 671*37da2899SCharles.Forsyth /* registered modules. Note that each font driver */ 672*37da2899SCharles.Forsyth /* contains a list of its opened faces. */ 673*37da2899SCharles.Forsyth /* */ 674*37da2899SCharles.Forsyth /* renderers :: The list of renderers currently registered */ 675*37da2899SCharles.Forsyth /* within the library. */ 676*37da2899SCharles.Forsyth /* */ 677*37da2899SCharles.Forsyth /* cur_renderer :: The current outline renderer. This is a */ 678*37da2899SCharles.Forsyth /* shortcut used to avoid parsing the list on */ 679*37da2899SCharles.Forsyth /* each call to FT_Outline_Render(). It is a */ 680*37da2899SCharles.Forsyth /* handle to the current renderer for the */ 681*37da2899SCharles.Forsyth /* FT_GLYPH_FORMAT_OUTLINE format. */ 682*37da2899SCharles.Forsyth /* */ 683*37da2899SCharles.Forsyth /* auto_hinter :: XXX */ 684*37da2899SCharles.Forsyth /* */ 685*37da2899SCharles.Forsyth /* raster_pool :: The raster object's render pool. This can */ 686*37da2899SCharles.Forsyth /* ideally be changed dynamically at run-time. */ 687*37da2899SCharles.Forsyth /* */ 688*37da2899SCharles.Forsyth /* raster_pool_size :: The size of the render pool in bytes. */ 689*37da2899SCharles.Forsyth /* */ 690*37da2899SCharles.Forsyth /* debug_hooks :: XXX */ 691*37da2899SCharles.Forsyth /* */ 692*37da2899SCharles.Forsyth typedef struct FT_LibraryRec_ 693*37da2899SCharles.Forsyth { 694*37da2899SCharles.Forsyth FT_Memory memory; /* library's memory manager */ 695*37da2899SCharles.Forsyth 696*37da2899SCharles.Forsyth FT_Generic generic; 697*37da2899SCharles.Forsyth 698*37da2899SCharles.Forsyth FT_Int version_major; 699*37da2899SCharles.Forsyth FT_Int version_minor; 700*37da2899SCharles.Forsyth FT_Int version_patch; 701*37da2899SCharles.Forsyth 702*37da2899SCharles.Forsyth FT_UInt num_modules; 703*37da2899SCharles.Forsyth FT_Module modules[FT_MAX_MODULES]; /* module objects */ 704*37da2899SCharles.Forsyth 705*37da2899SCharles.Forsyth FT_ListRec renderers; /* list of renderers */ 706*37da2899SCharles.Forsyth FT_Renderer cur_renderer; /* current outline renderer */ 707*37da2899SCharles.Forsyth FT_Module auto_hinter; 708*37da2899SCharles.Forsyth 709*37da2899SCharles.Forsyth FT_Byte* raster_pool; /* scan-line conversion */ 710*37da2899SCharles.Forsyth /* render pool */ 711*37da2899SCharles.Forsyth FT_ULong raster_pool_size; /* size of render pool in bytes */ 712*37da2899SCharles.Forsyth 713*37da2899SCharles.Forsyth FT_DebugHook_Func debug_hooks[4]; 714*37da2899SCharles.Forsyth 715*37da2899SCharles.Forsyth FT_MetaClassRec meta_class; 716*37da2899SCharles.Forsyth 717*37da2899SCharles.Forsyth } FT_LibraryRec; 718*37da2899SCharles.Forsyth 719*37da2899SCharles.Forsyth 720*37da2899SCharles.Forsyth FT_BASE( FT_Renderer ) 721*37da2899SCharles.Forsyth FT_Lookup_Renderer( FT_Library library, 722*37da2899SCharles.Forsyth FT_Glyph_Format format, 723*37da2899SCharles.Forsyth FT_ListNode* node ); 724*37da2899SCharles.Forsyth 725*37da2899SCharles.Forsyth FT_BASE( FT_Error ) 726*37da2899SCharles.Forsyth FT_Render_Glyph_Internal( FT_Library library, 727*37da2899SCharles.Forsyth FT_GlyphSlot slot, 728*37da2899SCharles.Forsyth FT_Render_Mode render_mode ); 729*37da2899SCharles.Forsyth 730*37da2899SCharles.Forsyth typedef const char* 731*37da2899SCharles.Forsyth (*FT_Face_GetPostscriptNameFunc)( FT_Face face ); 732*37da2899SCharles.Forsyth 733*37da2899SCharles.Forsyth typedef FT_Error 734*37da2899SCharles.Forsyth (*FT_Face_GetGlyphNameFunc)( FT_Face face, 735*37da2899SCharles.Forsyth FT_UInt glyph_index, 736*37da2899SCharles.Forsyth FT_Pointer buffer, 737*37da2899SCharles.Forsyth FT_UInt buffer_max ); 738*37da2899SCharles.Forsyth 739*37da2899SCharles.Forsyth typedef FT_UInt 740*37da2899SCharles.Forsyth (*FT_Face_GetGlyphNameIndexFunc)( FT_Face face, 741*37da2899SCharles.Forsyth FT_String* glyph_name ); 742*37da2899SCharles.Forsyth 743*37da2899SCharles.Forsyth 744*37da2899SCharles.Forsyth #ifndef FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM 745*37da2899SCharles.Forsyth 746*37da2899SCharles.Forsyth /*************************************************************************/ 747*37da2899SCharles.Forsyth /* */ 748*37da2899SCharles.Forsyth /* <Function> */ 749*37da2899SCharles.Forsyth /* FT_New_Memory */ 750*37da2899SCharles.Forsyth /* */ 751*37da2899SCharles.Forsyth /* <Description> */ 752*37da2899SCharles.Forsyth /* Creates a new memory object. */ 753*37da2899SCharles.Forsyth /* */ 754*37da2899SCharles.Forsyth /* <Return> */ 755*37da2899SCharles.Forsyth /* A pointer to the new memory object. 0 in case of error. */ 756*37da2899SCharles.Forsyth /* */ 757*37da2899SCharles.Forsyth FT_EXPORT( FT_Memory ) 758*37da2899SCharles.Forsyth FT_New_Memory( void ); 759*37da2899SCharles.Forsyth 760*37da2899SCharles.Forsyth 761*37da2899SCharles.Forsyth /*************************************************************************/ 762*37da2899SCharles.Forsyth /* */ 763*37da2899SCharles.Forsyth /* <Function> */ 764*37da2899SCharles.Forsyth /* FT_Done_Memory */ 765*37da2899SCharles.Forsyth /* */ 766*37da2899SCharles.Forsyth /* <Description> */ 767*37da2899SCharles.Forsyth /* Discards memory manager. */ 768*37da2899SCharles.Forsyth /* */ 769*37da2899SCharles.Forsyth /* <Input> */ 770*37da2899SCharles.Forsyth /* memory :: A handle to the memory manager. */ 771*37da2899SCharles.Forsyth /* */ 772*37da2899SCharles.Forsyth FT_EXPORT( void ) 773*37da2899SCharles.Forsyth FT_Done_Memory( FT_Memory memory ); 774*37da2899SCharles.Forsyth 775*37da2899SCharles.Forsyth #endif /* !FT_CONFIG_OPTION_NO_DEFAULT_SYSTEM */ 776*37da2899SCharles.Forsyth 777*37da2899SCharles.Forsyth 778*37da2899SCharles.Forsyth /* Define default raster's interface. The default raster is located in */ 779*37da2899SCharles.Forsyth /* `src/base/ftraster.c'. */ 780*37da2899SCharles.Forsyth /* */ 781*37da2899SCharles.Forsyth /* Client applications can register new rasters through the */ 782*37da2899SCharles.Forsyth /* FT_Set_Raster() API. */ 783*37da2899SCharles.Forsyth 784*37da2899SCharles.Forsyth #ifndef FT_NO_DEFAULT_RASTER 785*37da2899SCharles.Forsyth FT_EXPORT_VAR( FT_Raster_Funcs ) ft_default_raster; 786*37da2899SCharles.Forsyth #endif 787*37da2899SCharles.Forsyth 788*37da2899SCharles.Forsyth 789*37da2899SCharles.Forsyth FT_END_HEADER 790*37da2899SCharles.Forsyth 791*37da2899SCharles.Forsyth #endif /* __FTOBJS_H__ */ 792*37da2899SCharles.Forsyth 793*37da2899SCharles.Forsyth 794*37da2899SCharles.Forsyth /* END */ 795