1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* ttobjs.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* Objects manager (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 #ifndef __TTOBJS_H__ 20*37da2899SCharles.Forsyth #define __TTOBJS_H__ 21*37da2899SCharles.Forsyth 22*37da2899SCharles.Forsyth 23*37da2899SCharles.Forsyth #include <ft2build.h> 24*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H 25*37da2899SCharles.Forsyth #include FT_INTERNAL_TRUETYPE_TYPES_H 26*37da2899SCharles.Forsyth 27*37da2899SCharles.Forsyth 28*37da2899SCharles.Forsyth FT_BEGIN_HEADER 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth 31*37da2899SCharles.Forsyth /*************************************************************************/ 32*37da2899SCharles.Forsyth /* */ 33*37da2899SCharles.Forsyth /* <Type> */ 34*37da2899SCharles.Forsyth /* TT_Driver */ 35*37da2899SCharles.Forsyth /* */ 36*37da2899SCharles.Forsyth /* <Description> */ 37*37da2899SCharles.Forsyth /* A handle to a TrueType driver object. */ 38*37da2899SCharles.Forsyth /* */ 39*37da2899SCharles.Forsyth typedef struct TT_DriverRec_* TT_Driver; 40*37da2899SCharles.Forsyth 41*37da2899SCharles.Forsyth 42*37da2899SCharles.Forsyth /*************************************************************************/ 43*37da2899SCharles.Forsyth /* */ 44*37da2899SCharles.Forsyth /* <Type> */ 45*37da2899SCharles.Forsyth /* TT_Instance */ 46*37da2899SCharles.Forsyth /* */ 47*37da2899SCharles.Forsyth /* <Description> */ 48*37da2899SCharles.Forsyth /* A handle to a TrueType size object. */ 49*37da2899SCharles.Forsyth /* */ 50*37da2899SCharles.Forsyth typedef struct TT_SizeRec_* TT_Size; 51*37da2899SCharles.Forsyth 52*37da2899SCharles.Forsyth 53*37da2899SCharles.Forsyth /*************************************************************************/ 54*37da2899SCharles.Forsyth /* */ 55*37da2899SCharles.Forsyth /* <Type> */ 56*37da2899SCharles.Forsyth /* TT_GlyphSlot */ 57*37da2899SCharles.Forsyth /* */ 58*37da2899SCharles.Forsyth /* <Description> */ 59*37da2899SCharles.Forsyth /* A handle to a TrueType glyph slot object. */ 60*37da2899SCharles.Forsyth /* */ 61*37da2899SCharles.Forsyth /* <Note> */ 62*37da2899SCharles.Forsyth /* This is a direct typedef of FT_GlyphSlot, as there is nothing */ 63*37da2899SCharles.Forsyth /* specific about the TrueType glyph slot. */ 64*37da2899SCharles.Forsyth /* */ 65*37da2899SCharles.Forsyth typedef FT_GlyphSlot TT_GlyphSlot; 66*37da2899SCharles.Forsyth 67*37da2899SCharles.Forsyth 68*37da2899SCharles.Forsyth /*************************************************************************/ 69*37da2899SCharles.Forsyth /* */ 70*37da2899SCharles.Forsyth /* <Struct> */ 71*37da2899SCharles.Forsyth /* TT_GraphicsState */ 72*37da2899SCharles.Forsyth /* */ 73*37da2899SCharles.Forsyth /* <Description> */ 74*37da2899SCharles.Forsyth /* The TrueType graphics state used during bytecode interpretation. */ 75*37da2899SCharles.Forsyth /* */ 76*37da2899SCharles.Forsyth typedef struct TT_GraphicsState_ 77*37da2899SCharles.Forsyth { 78*37da2899SCharles.Forsyth FT_UShort rp0; 79*37da2899SCharles.Forsyth FT_UShort rp1; 80*37da2899SCharles.Forsyth FT_UShort rp2; 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth FT_UnitVector dualVector; 83*37da2899SCharles.Forsyth FT_UnitVector projVector; 84*37da2899SCharles.Forsyth FT_UnitVector freeVector; 85*37da2899SCharles.Forsyth 86*37da2899SCharles.Forsyth FT_Long loop; 87*37da2899SCharles.Forsyth FT_F26Dot6 minimum_distance; 88*37da2899SCharles.Forsyth FT_Int round_state; 89*37da2899SCharles.Forsyth 90*37da2899SCharles.Forsyth FT_Bool auto_flip; 91*37da2899SCharles.Forsyth FT_F26Dot6 control_value_cutin; 92*37da2899SCharles.Forsyth FT_F26Dot6 single_width_cutin; 93*37da2899SCharles.Forsyth FT_F26Dot6 single_width_value; 94*37da2899SCharles.Forsyth FT_Short delta_base; 95*37da2899SCharles.Forsyth FT_Short delta_shift; 96*37da2899SCharles.Forsyth 97*37da2899SCharles.Forsyth FT_Byte instruct_control; 98*37da2899SCharles.Forsyth FT_Bool scan_control; 99*37da2899SCharles.Forsyth FT_Int scan_type; 100*37da2899SCharles.Forsyth 101*37da2899SCharles.Forsyth FT_UShort gep0; 102*37da2899SCharles.Forsyth FT_UShort gep1; 103*37da2899SCharles.Forsyth FT_UShort gep2; 104*37da2899SCharles.Forsyth 105*37da2899SCharles.Forsyth } TT_GraphicsState; 106*37da2899SCharles.Forsyth 107*37da2899SCharles.Forsyth 108*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER 109*37da2899SCharles.Forsyth 110*37da2899SCharles.Forsyth FT_LOCAL( void ) 111*37da2899SCharles.Forsyth tt_glyphzone_done( TT_GlyphZone zone ); 112*37da2899SCharles.Forsyth 113*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 114*37da2899SCharles.Forsyth tt_glyphzone_new( FT_Memory memory, 115*37da2899SCharles.Forsyth FT_UShort maxPoints, 116*37da2899SCharles.Forsyth FT_Short maxContours, 117*37da2899SCharles.Forsyth TT_GlyphZone zone ); 118*37da2899SCharles.Forsyth 119*37da2899SCharles.Forsyth #endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ 120*37da2899SCharles.Forsyth 121*37da2899SCharles.Forsyth 122*37da2899SCharles.Forsyth 123*37da2899SCharles.Forsyth /*************************************************************************/ 124*37da2899SCharles.Forsyth /* */ 125*37da2899SCharles.Forsyth /* EXECUTION SUBTABLES */ 126*37da2899SCharles.Forsyth /* */ 127*37da2899SCharles.Forsyth /* These sub-tables relate to instruction execution. */ 128*37da2899SCharles.Forsyth /* */ 129*37da2899SCharles.Forsyth /*************************************************************************/ 130*37da2899SCharles.Forsyth 131*37da2899SCharles.Forsyth 132*37da2899SCharles.Forsyth #define TT_MAX_CODE_RANGES 3 133*37da2899SCharles.Forsyth 134*37da2899SCharles.Forsyth 135*37da2899SCharles.Forsyth /*************************************************************************/ 136*37da2899SCharles.Forsyth /* */ 137*37da2899SCharles.Forsyth /* There can only be 3 active code ranges at once: */ 138*37da2899SCharles.Forsyth /* - the Font Program */ 139*37da2899SCharles.Forsyth /* - the CVT Program */ 140*37da2899SCharles.Forsyth /* - a glyph's instructions set */ 141*37da2899SCharles.Forsyth /* */ 142*37da2899SCharles.Forsyth typedef enum TT_CodeRange_Tag_ 143*37da2899SCharles.Forsyth { 144*37da2899SCharles.Forsyth tt_coderange_none = 0, 145*37da2899SCharles.Forsyth tt_coderange_font, 146*37da2899SCharles.Forsyth tt_coderange_cvt, 147*37da2899SCharles.Forsyth tt_coderange_glyph 148*37da2899SCharles.Forsyth 149*37da2899SCharles.Forsyth } TT_CodeRange_Tag; 150*37da2899SCharles.Forsyth 151*37da2899SCharles.Forsyth 152*37da2899SCharles.Forsyth typedef struct TT_CodeRange_ 153*37da2899SCharles.Forsyth { 154*37da2899SCharles.Forsyth FT_Byte* base; 155*37da2899SCharles.Forsyth FT_ULong size; 156*37da2899SCharles.Forsyth 157*37da2899SCharles.Forsyth } TT_CodeRange; 158*37da2899SCharles.Forsyth 159*37da2899SCharles.Forsyth typedef TT_CodeRange TT_CodeRangeTable[TT_MAX_CODE_RANGES]; 160*37da2899SCharles.Forsyth 161*37da2899SCharles.Forsyth 162*37da2899SCharles.Forsyth /*************************************************************************/ 163*37da2899SCharles.Forsyth /* */ 164*37da2899SCharles.Forsyth /* Defines a function/instruction definition record. */ 165*37da2899SCharles.Forsyth /* */ 166*37da2899SCharles.Forsyth typedef struct TT_DefRecord_ 167*37da2899SCharles.Forsyth { 168*37da2899SCharles.Forsyth FT_Int range; /* in which code range is it located? */ 169*37da2899SCharles.Forsyth FT_Long start; /* where does it start? */ 170*37da2899SCharles.Forsyth FT_UInt opc; /* function #, or instruction code */ 171*37da2899SCharles.Forsyth FT_Bool active; /* is it active? */ 172*37da2899SCharles.Forsyth 173*37da2899SCharles.Forsyth } TT_DefRecord, *TT_DefArray; 174*37da2899SCharles.Forsyth 175*37da2899SCharles.Forsyth 176*37da2899SCharles.Forsyth /*************************************************************************/ 177*37da2899SCharles.Forsyth /* */ 178*37da2899SCharles.Forsyth /* Subglyph transformation record. */ 179*37da2899SCharles.Forsyth /* */ 180*37da2899SCharles.Forsyth typedef struct TT_Transform_ 181*37da2899SCharles.Forsyth { 182*37da2899SCharles.Forsyth FT_Fixed xx, xy; /* transformation matrix coefficients */ 183*37da2899SCharles.Forsyth FT_Fixed yx, yy; 184*37da2899SCharles.Forsyth FT_F26Dot6 ox, oy; /* offsets */ 185*37da2899SCharles.Forsyth 186*37da2899SCharles.Forsyth } TT_Transform; 187*37da2899SCharles.Forsyth 188*37da2899SCharles.Forsyth 189*37da2899SCharles.Forsyth /*************************************************************************/ 190*37da2899SCharles.Forsyth /* */ 191*37da2899SCharles.Forsyth /* Subglyph loading record. Used to load composite components. */ 192*37da2899SCharles.Forsyth /* */ 193*37da2899SCharles.Forsyth typedef struct TT_SubglyphRec_ 194*37da2899SCharles.Forsyth { 195*37da2899SCharles.Forsyth FT_Long index; /* subglyph index; initialized with -1 */ 196*37da2899SCharles.Forsyth FT_Bool is_scaled; /* is the subglyph scaled? */ 197*37da2899SCharles.Forsyth FT_Bool is_hinted; /* should it be hinted? */ 198*37da2899SCharles.Forsyth FT_Bool preserve_pps; /* preserve phantom points? */ 199*37da2899SCharles.Forsyth 200*37da2899SCharles.Forsyth FT_Long file_offset; 201*37da2899SCharles.Forsyth 202*37da2899SCharles.Forsyth FT_BBox bbox; 203*37da2899SCharles.Forsyth FT_Pos left_bearing; 204*37da2899SCharles.Forsyth FT_Pos advance; 205*37da2899SCharles.Forsyth 206*37da2899SCharles.Forsyth TT_GlyphZoneRec zone; 207*37da2899SCharles.Forsyth 208*37da2899SCharles.Forsyth FT_Long arg1; /* first argument */ 209*37da2899SCharles.Forsyth FT_Long arg2; /* second argument */ 210*37da2899SCharles.Forsyth 211*37da2899SCharles.Forsyth FT_UShort element_flag; /* current load element flag */ 212*37da2899SCharles.Forsyth 213*37da2899SCharles.Forsyth TT_Transform transform; /* transformation matrix */ 214*37da2899SCharles.Forsyth 215*37da2899SCharles.Forsyth FT_Vector pp1, pp2; /* phantom points */ 216*37da2899SCharles.Forsyth 217*37da2899SCharles.Forsyth } TT_SubGlyphRec, *TT_SubGlyph_Stack; 218*37da2899SCharles.Forsyth 219*37da2899SCharles.Forsyth 220*37da2899SCharles.Forsyth /*************************************************************************/ 221*37da2899SCharles.Forsyth /* */ 222*37da2899SCharles.Forsyth /* A note regarding non-squared pixels: */ 223*37da2899SCharles.Forsyth /* */ 224*37da2899SCharles.Forsyth /* (This text will probably go into some docs at some time; for now, it */ 225*37da2899SCharles.Forsyth /* is kept here to explain some definitions in the TIns_Metrics */ 226*37da2899SCharles.Forsyth /* record). */ 227*37da2899SCharles.Forsyth /* */ 228*37da2899SCharles.Forsyth /* The CVT is a one-dimensional array containing values that control */ 229*37da2899SCharles.Forsyth /* certain important characteristics in a font, like the height of all */ 230*37da2899SCharles.Forsyth /* capitals, all lowercase letter, default spacing or stem width/height. */ 231*37da2899SCharles.Forsyth /* */ 232*37da2899SCharles.Forsyth /* These values are found in FUnits in the font file, and must be scaled */ 233*37da2899SCharles.Forsyth /* to pixel coordinates before being used by the CVT and glyph programs. */ 234*37da2899SCharles.Forsyth /* Unfortunately, when using distinct x and y resolutions (or distinct x */ 235*37da2899SCharles.Forsyth /* and y pointsizes), there are two possible scalings. */ 236*37da2899SCharles.Forsyth /* */ 237*37da2899SCharles.Forsyth /* A first try was to implement a `lazy' scheme where all values were */ 238*37da2899SCharles.Forsyth /* scaled when first used. However, while some values are always used */ 239*37da2899SCharles.Forsyth /* in the same direction, some others are used under many different */ 240*37da2899SCharles.Forsyth /* circumstances and orientations. */ 241*37da2899SCharles.Forsyth /* */ 242*37da2899SCharles.Forsyth /* I have found a simpler way to do the same, and it even seems to work */ 243*37da2899SCharles.Forsyth /* in most of the cases: */ 244*37da2899SCharles.Forsyth /* */ 245*37da2899SCharles.Forsyth /* - All CVT values are scaled to the maximum ppem size. */ 246*37da2899SCharles.Forsyth /* */ 247*37da2899SCharles.Forsyth /* - When performing a read or write in the CVT, a ratio factor is used */ 248*37da2899SCharles.Forsyth /* to perform adequate scaling. Example: */ 249*37da2899SCharles.Forsyth /* */ 250*37da2899SCharles.Forsyth /* x_ppem = 14 */ 251*37da2899SCharles.Forsyth /* y_ppem = 10 */ 252*37da2899SCharles.Forsyth /* */ 253*37da2899SCharles.Forsyth /* We choose ppem = x_ppem = 14 as the CVT scaling size. All cvt */ 254*37da2899SCharles.Forsyth /* entries are scaled to it. */ 255*37da2899SCharles.Forsyth /* */ 256*37da2899SCharles.Forsyth /* x_ratio = 1.0 */ 257*37da2899SCharles.Forsyth /* y_ratio = y_ppem/ppem (< 1.0) */ 258*37da2899SCharles.Forsyth /* */ 259*37da2899SCharles.Forsyth /* We compute the current ratio like: */ 260*37da2899SCharles.Forsyth /* */ 261*37da2899SCharles.Forsyth /* - If projVector is horizontal, */ 262*37da2899SCharles.Forsyth /* ratio = x_ratio = 1.0 */ 263*37da2899SCharles.Forsyth /* */ 264*37da2899SCharles.Forsyth /* - if projVector is vertical, */ 265*37da2899SCharles.Forsyth /* ratio = y_ratio */ 266*37da2899SCharles.Forsyth /* */ 267*37da2899SCharles.Forsyth /* - else, */ 268*37da2899SCharles.Forsyth /* ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 ) */ 269*37da2899SCharles.Forsyth /* */ 270*37da2899SCharles.Forsyth /* Reading a cvt value returns */ 271*37da2899SCharles.Forsyth /* ratio * cvt[index] */ 272*37da2899SCharles.Forsyth /* */ 273*37da2899SCharles.Forsyth /* Writing a cvt value in pixels: */ 274*37da2899SCharles.Forsyth /* cvt[index] / ratio */ 275*37da2899SCharles.Forsyth /* */ 276*37da2899SCharles.Forsyth /* The current ppem is simply */ 277*37da2899SCharles.Forsyth /* ratio * ppem */ 278*37da2899SCharles.Forsyth /* */ 279*37da2899SCharles.Forsyth /*************************************************************************/ 280*37da2899SCharles.Forsyth 281*37da2899SCharles.Forsyth 282*37da2899SCharles.Forsyth /*************************************************************************/ 283*37da2899SCharles.Forsyth /* */ 284*37da2899SCharles.Forsyth /* Metrics used by the TrueType size and context objects. */ 285*37da2899SCharles.Forsyth /* */ 286*37da2899SCharles.Forsyth typedef struct TT_Size_Metrics_ 287*37da2899SCharles.Forsyth { 288*37da2899SCharles.Forsyth /* for non-square pixels */ 289*37da2899SCharles.Forsyth FT_Long x_ratio; 290*37da2899SCharles.Forsyth FT_Long y_ratio; 291*37da2899SCharles.Forsyth 292*37da2899SCharles.Forsyth FT_UShort ppem; /* maximum ppem size */ 293*37da2899SCharles.Forsyth FT_Long ratio; /* current ratio */ 294*37da2899SCharles.Forsyth FT_Fixed scale; 295*37da2899SCharles.Forsyth 296*37da2899SCharles.Forsyth FT_F26Dot6 compensations[4]; /* device-specific compensations */ 297*37da2899SCharles.Forsyth 298*37da2899SCharles.Forsyth FT_Bool valid; 299*37da2899SCharles.Forsyth 300*37da2899SCharles.Forsyth FT_Bool rotated; /* `is the glyph rotated?'-flag */ 301*37da2899SCharles.Forsyth FT_Bool stretched; /* `is the glyph stretched?'-flag */ 302*37da2899SCharles.Forsyth 303*37da2899SCharles.Forsyth } TT_Size_Metrics; 304*37da2899SCharles.Forsyth 305*37da2899SCharles.Forsyth 306*37da2899SCharles.Forsyth /*************************************************************************/ 307*37da2899SCharles.Forsyth /* */ 308*37da2899SCharles.Forsyth /* TrueType size class. */ 309*37da2899SCharles.Forsyth /* */ 310*37da2899SCharles.Forsyth typedef struct TT_SizeRec_ 311*37da2899SCharles.Forsyth { 312*37da2899SCharles.Forsyth FT_SizeRec root; 313*37da2899SCharles.Forsyth 314*37da2899SCharles.Forsyth TT_Size_Metrics ttmetrics; 315*37da2899SCharles.Forsyth 316*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS 317*37da2899SCharles.Forsyth 318*37da2899SCharles.Forsyth FT_UInt strike_index; /* 0xFFFF to indicate invalid */ 319*37da2899SCharles.Forsyth FT_Size_Metrics strike_metrics; /* current strike's metrics */ 320*37da2899SCharles.Forsyth 321*37da2899SCharles.Forsyth #endif 322*37da2899SCharles.Forsyth 323*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER 324*37da2899SCharles.Forsyth 325*37da2899SCharles.Forsyth FT_UInt num_function_defs; /* number of function definitions */ 326*37da2899SCharles.Forsyth FT_UInt max_function_defs; 327*37da2899SCharles.Forsyth TT_DefArray function_defs; /* table of function definitions */ 328*37da2899SCharles.Forsyth 329*37da2899SCharles.Forsyth FT_UInt num_instruction_defs; /* number of ins. definitions */ 330*37da2899SCharles.Forsyth FT_UInt max_instruction_defs; 331*37da2899SCharles.Forsyth TT_DefArray instruction_defs; /* table of ins. definitions */ 332*37da2899SCharles.Forsyth 333*37da2899SCharles.Forsyth FT_UInt max_func; 334*37da2899SCharles.Forsyth FT_UInt max_ins; 335*37da2899SCharles.Forsyth 336*37da2899SCharles.Forsyth TT_CodeRangeTable codeRangeTable; 337*37da2899SCharles.Forsyth 338*37da2899SCharles.Forsyth TT_GraphicsState GS; 339*37da2899SCharles.Forsyth 340*37da2899SCharles.Forsyth FT_ULong cvt_size; /* the scaled control value table */ 341*37da2899SCharles.Forsyth FT_Long* cvt; 342*37da2899SCharles.Forsyth 343*37da2899SCharles.Forsyth FT_UShort storage_size; /* The storage area is now part of */ 344*37da2899SCharles.Forsyth FT_Long* storage; /* the instance */ 345*37da2899SCharles.Forsyth 346*37da2899SCharles.Forsyth TT_GlyphZoneRec twilight; /* The instance's twilight zone */ 347*37da2899SCharles.Forsyth 348*37da2899SCharles.Forsyth /* debugging variables */ 349*37da2899SCharles.Forsyth 350*37da2899SCharles.Forsyth /* When using the debugger, we must keep the */ 351*37da2899SCharles.Forsyth /* execution context tied to the instance */ 352*37da2899SCharles.Forsyth /* object rather than asking it on demand. */ 353*37da2899SCharles.Forsyth 354*37da2899SCharles.Forsyth FT_Bool debug; 355*37da2899SCharles.Forsyth TT_ExecContext context; 356*37da2899SCharles.Forsyth 357*37da2899SCharles.Forsyth #endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */ 358*37da2899SCharles.Forsyth 359*37da2899SCharles.Forsyth } TT_SizeRec; 360*37da2899SCharles.Forsyth 361*37da2899SCharles.Forsyth 362*37da2899SCharles.Forsyth /*************************************************************************/ 363*37da2899SCharles.Forsyth /* */ 364*37da2899SCharles.Forsyth /* TrueType driver class. */ 365*37da2899SCharles.Forsyth /* */ 366*37da2899SCharles.Forsyth typedef struct TT_DriverRec_ 367*37da2899SCharles.Forsyth { 368*37da2899SCharles.Forsyth FT_DriverRec root; 369*37da2899SCharles.Forsyth TT_ExecContext context; /* execution context */ 370*37da2899SCharles.Forsyth TT_GlyphZoneRec zone; /* glyph loader points zone */ 371*37da2899SCharles.Forsyth 372*37da2899SCharles.Forsyth void* extension_component; 373*37da2899SCharles.Forsyth 374*37da2899SCharles.Forsyth } TT_DriverRec; 375*37da2899SCharles.Forsyth 376*37da2899SCharles.Forsyth 377*37da2899SCharles.Forsyth /*************************************************************************/ 378*37da2899SCharles.Forsyth /* */ 379*37da2899SCharles.Forsyth /* Face functions */ 380*37da2899SCharles.Forsyth /* */ 381*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 382*37da2899SCharles.Forsyth tt_face_init( FT_Stream stream, 383*37da2899SCharles.Forsyth TT_Face face, 384*37da2899SCharles.Forsyth FT_Int face_index, 385*37da2899SCharles.Forsyth FT_Int num_params, 386*37da2899SCharles.Forsyth FT_Parameter* params ); 387*37da2899SCharles.Forsyth 388*37da2899SCharles.Forsyth FT_LOCAL( void ) 389*37da2899SCharles.Forsyth tt_face_done( TT_Face face ); 390*37da2899SCharles.Forsyth 391*37da2899SCharles.Forsyth 392*37da2899SCharles.Forsyth /*************************************************************************/ 393*37da2899SCharles.Forsyth /* */ 394*37da2899SCharles.Forsyth /* Size functions */ 395*37da2899SCharles.Forsyth /* */ 396*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 397*37da2899SCharles.Forsyth tt_size_init( TT_Size size ); 398*37da2899SCharles.Forsyth 399*37da2899SCharles.Forsyth FT_LOCAL( void ) 400*37da2899SCharles.Forsyth tt_size_done( TT_Size size ); 401*37da2899SCharles.Forsyth 402*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 403*37da2899SCharles.Forsyth tt_size_reset( TT_Size size ); 404*37da2899SCharles.Forsyth 405*37da2899SCharles.Forsyth 406*37da2899SCharles.Forsyth /*************************************************************************/ 407*37da2899SCharles.Forsyth /* */ 408*37da2899SCharles.Forsyth /* Driver functions */ 409*37da2899SCharles.Forsyth /* */ 410*37da2899SCharles.Forsyth FT_LOCAL( FT_Error ) 411*37da2899SCharles.Forsyth tt_driver_init( TT_Driver driver ); 412*37da2899SCharles.Forsyth 413*37da2899SCharles.Forsyth FT_LOCAL( void ) 414*37da2899SCharles.Forsyth tt_driver_done( TT_Driver driver ); 415*37da2899SCharles.Forsyth 416*37da2899SCharles.Forsyth 417*37da2899SCharles.Forsyth FT_END_HEADER 418*37da2899SCharles.Forsyth 419*37da2899SCharles.Forsyth #endif /* __TTOBJS_H__ */ 420*37da2899SCharles.Forsyth 421*37da2899SCharles.Forsyth 422*37da2899SCharles.Forsyth /* END */ 423