1*37da2899SCharles.Forsyth /***************************************************************************/ 2*37da2899SCharles.Forsyth /* */ 3*37da2899SCharles.Forsyth /* pshints.h */ 4*37da2899SCharles.Forsyth /* */ 5*37da2899SCharles.Forsyth /* Interface to Postscript-specific (Type 1 and Type 2) hints */ 6*37da2899SCharles.Forsyth /* recorders (specification only). These are used to support native */ 7*37da2899SCharles.Forsyth /* T1/T2 hints in the "type1", "cid" and "cff" font drivers. */ 8*37da2899SCharles.Forsyth /* */ 9*37da2899SCharles.Forsyth /* Copyright 2001, 2002 by */ 10*37da2899SCharles.Forsyth /* David Turner, Robert Wilhelm, and Werner Lemberg. */ 11*37da2899SCharles.Forsyth /* */ 12*37da2899SCharles.Forsyth /* This file is part of the FreeType project, and may only be used, */ 13*37da2899SCharles.Forsyth /* modified, and distributed under the terms of the FreeType project */ 14*37da2899SCharles.Forsyth /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 15*37da2899SCharles.Forsyth /* this file you indicate that you have read the license and */ 16*37da2899SCharles.Forsyth /* understand and accept it fully. */ 17*37da2899SCharles.Forsyth /* */ 18*37da2899SCharles.Forsyth /***************************************************************************/ 19*37da2899SCharles.Forsyth 20*37da2899SCharles.Forsyth 21*37da2899SCharles.Forsyth #ifndef __PSHINTS_H__ 22*37da2899SCharles.Forsyth #define __PSHINTS_H__ 23*37da2899SCharles.Forsyth 24*37da2899SCharles.Forsyth 25*37da2899SCharles.Forsyth #include <ft2build.h> 26*37da2899SCharles.Forsyth #include FT_FREETYPE_H 27*37da2899SCharles.Forsyth #include FT_TYPE1_TABLES_H 28*37da2899SCharles.Forsyth 29*37da2899SCharles.Forsyth 30*37da2899SCharles.Forsyth FT_BEGIN_HEADER 31*37da2899SCharles.Forsyth 32*37da2899SCharles.Forsyth 33*37da2899SCharles.Forsyth /*************************************************************************/ 34*37da2899SCharles.Forsyth /*************************************************************************/ 35*37da2899SCharles.Forsyth /***** *****/ 36*37da2899SCharles.Forsyth /***** INTERNAL REPRESENTATION OF GLOBALS *****/ 37*37da2899SCharles.Forsyth /***** *****/ 38*37da2899SCharles.Forsyth /*************************************************************************/ 39*37da2899SCharles.Forsyth /*************************************************************************/ 40*37da2899SCharles.Forsyth 41*37da2899SCharles.Forsyth typedef struct PSH_GlobalsRec_* PSH_Globals; 42*37da2899SCharles.Forsyth 43*37da2899SCharles.Forsyth typedef FT_Error 44*37da2899SCharles.Forsyth (*PSH_Globals_NewFunc)( FT_Memory memory, 45*37da2899SCharles.Forsyth T1_Private* private_dict, 46*37da2899SCharles.Forsyth PSH_Globals* aglobals ); 47*37da2899SCharles.Forsyth 48*37da2899SCharles.Forsyth typedef FT_Error 49*37da2899SCharles.Forsyth (*PSH_Globals_SetScaleFunc)( PSH_Globals globals, 50*37da2899SCharles.Forsyth FT_Fixed x_scale, 51*37da2899SCharles.Forsyth FT_Fixed y_scale, 52*37da2899SCharles.Forsyth FT_Fixed x_delta, 53*37da2899SCharles.Forsyth FT_Fixed y_delta ); 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth typedef void 56*37da2899SCharles.Forsyth (*PSH_Globals_DestroyFunc)( PSH_Globals globals ); 57*37da2899SCharles.Forsyth 58*37da2899SCharles.Forsyth 59*37da2899SCharles.Forsyth typedef struct PSH_Globals_FuncsRec_ 60*37da2899SCharles.Forsyth { 61*37da2899SCharles.Forsyth PSH_Globals_NewFunc create; 62*37da2899SCharles.Forsyth PSH_Globals_SetScaleFunc set_scale; 63*37da2899SCharles.Forsyth PSH_Globals_DestroyFunc destroy; 64*37da2899SCharles.Forsyth 65*37da2899SCharles.Forsyth } PSH_Globals_FuncsRec, *PSH_Globals_Funcs; 66*37da2899SCharles.Forsyth 67*37da2899SCharles.Forsyth 68*37da2899SCharles.Forsyth /*************************************************************************/ 69*37da2899SCharles.Forsyth /*************************************************************************/ 70*37da2899SCharles.Forsyth /***** *****/ 71*37da2899SCharles.Forsyth /***** PUBLIC TYPE 1 HINTS RECORDER *****/ 72*37da2899SCharles.Forsyth /***** *****/ 73*37da2899SCharles.Forsyth /*************************************************************************/ 74*37da2899SCharles.Forsyth /*************************************************************************/ 75*37da2899SCharles.Forsyth 76*37da2899SCharles.Forsyth /*************************************************************************/ 77*37da2899SCharles.Forsyth /* */ 78*37da2899SCharles.Forsyth /* @type: */ 79*37da2899SCharles.Forsyth /* T1_Hints */ 80*37da2899SCharles.Forsyth /* */ 81*37da2899SCharles.Forsyth /* @description: */ 82*37da2899SCharles.Forsyth /* This is a handle to an opaque structure used to record glyph hints */ 83*37da2899SCharles.Forsyth /* from a Type 1 character glyph character string. */ 84*37da2899SCharles.Forsyth /* */ 85*37da2899SCharles.Forsyth /* The methods used to operate on this object are defined by the */ 86*37da2899SCharles.Forsyth /* @T1_Hints_FuncsRec structure. Recording glyph hints is normally */ 87*37da2899SCharles.Forsyth /* achieved through the following scheme: */ 88*37da2899SCharles.Forsyth /* */ 89*37da2899SCharles.Forsyth /* - Open a new hint recording session by calling the "open" method. */ 90*37da2899SCharles.Forsyth /* This will rewind the recorder and prepare it for new input. */ 91*37da2899SCharles.Forsyth /* */ 92*37da2899SCharles.Forsyth /* - For each hint found in the glyph charstring, call the */ 93*37da2899SCharles.Forsyth /* corresponding method ("stem", "stem3", or "reset"). Note that */ 94*37da2899SCharles.Forsyth /* these functions do not return an error code. */ 95*37da2899SCharles.Forsyth /* */ 96*37da2899SCharles.Forsyth /* - Close the recording session by calling the "close" method. It */ 97*37da2899SCharles.Forsyth /* will return an error code if the hints were invalid or something */ 98*37da2899SCharles.Forsyth /* strange happened (e.g. memory shortage). */ 99*37da2899SCharles.Forsyth /* */ 100*37da2899SCharles.Forsyth /* The hints accumulated in the object can later be used by the */ 101*37da2899SCharles.Forsyth /* PostScript hinter. */ 102*37da2899SCharles.Forsyth /* */ 103*37da2899SCharles.Forsyth typedef struct T1_HintsRec_* T1_Hints; 104*37da2899SCharles.Forsyth 105*37da2899SCharles.Forsyth 106*37da2899SCharles.Forsyth /*************************************************************************/ 107*37da2899SCharles.Forsyth /* */ 108*37da2899SCharles.Forsyth /* @type: */ 109*37da2899SCharles.Forsyth /* T1_Hints_Funcs */ 110*37da2899SCharles.Forsyth /* */ 111*37da2899SCharles.Forsyth /* @description: */ 112*37da2899SCharles.Forsyth /* A pointer to the @T1_Hints_FuncsRec structure that defines the */ 113*37da2899SCharles.Forsyth /* API of a given @T1_Hints object. */ 114*37da2899SCharles.Forsyth /* */ 115*37da2899SCharles.Forsyth typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs; 116*37da2899SCharles.Forsyth 117*37da2899SCharles.Forsyth 118*37da2899SCharles.Forsyth /*************************************************************************/ 119*37da2899SCharles.Forsyth /* */ 120*37da2899SCharles.Forsyth /* @functype: */ 121*37da2899SCharles.Forsyth /* T1_Hints_OpenFunc */ 122*37da2899SCharles.Forsyth /* */ 123*37da2899SCharles.Forsyth /* @description: */ 124*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to prepare it for a new */ 125*37da2899SCharles.Forsyth /* Type 1 hints recording session. */ 126*37da2899SCharles.Forsyth /* */ 127*37da2899SCharles.Forsyth /* @input: */ 128*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 129*37da2899SCharles.Forsyth /* */ 130*37da2899SCharles.Forsyth /* @note: */ 131*37da2899SCharles.Forsyth /* You should always call the @T1_Hints_CloseFunc method in order to */ 132*37da2899SCharles.Forsyth /* close an opened recording session. */ 133*37da2899SCharles.Forsyth /* */ 134*37da2899SCharles.Forsyth typedef void 135*37da2899SCharles.Forsyth (*T1_Hints_OpenFunc)( T1_Hints hints ); 136*37da2899SCharles.Forsyth 137*37da2899SCharles.Forsyth 138*37da2899SCharles.Forsyth /*************************************************************************/ 139*37da2899SCharles.Forsyth /* */ 140*37da2899SCharles.Forsyth /* @functype: */ 141*37da2899SCharles.Forsyth /* T1_Hints_SetStemFunc */ 142*37da2899SCharles.Forsyth /* */ 143*37da2899SCharles.Forsyth /* @description: */ 144*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to record a new horizontal or */ 145*37da2899SCharles.Forsyth /* vertical stem. This corresponds to the Type 1 "hstem" and "vstem" */ 146*37da2899SCharles.Forsyth /* operators. */ 147*37da2899SCharles.Forsyth /* */ 148*37da2899SCharles.Forsyth /* @input: */ 149*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 150*37da2899SCharles.Forsyth /* */ 151*37da2899SCharles.Forsyth /* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */ 152*37da2899SCharles.Forsyth /* (vstem). */ 153*37da2899SCharles.Forsyth /* */ 154*37da2899SCharles.Forsyth /* coords :: Array of 2 integers, used as (position,length) stem */ 155*37da2899SCharles.Forsyth /* descriptor. */ 156*37da2899SCharles.Forsyth /* */ 157*37da2899SCharles.Forsyth /* @note: */ 158*37da2899SCharles.Forsyth /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ 159*37da2899SCharles.Forsyth /* horizontal coordinates (x) for vertical stems (dim=1). */ 160*37da2899SCharles.Forsyth /* */ 161*37da2899SCharles.Forsyth /* "coords[0]" is the absolute stem position (lowest coordinate); */ 162*37da2899SCharles.Forsyth /* "coords[1]" is the length. */ 163*37da2899SCharles.Forsyth /* */ 164*37da2899SCharles.Forsyth /* The length can be negative, in which case it must be either -20 or */ 165*37da2899SCharles.Forsyth /* -21. It will be interpreted as a "ghost" stem, according to */ 166*37da2899SCharles.Forsyth /* Type 1 specification. */ 167*37da2899SCharles.Forsyth /* */ 168*37da2899SCharles.Forsyth /* If the length is -21 (corresponding to a bottom ghost stem), then */ 169*37da2899SCharles.Forsyth /* the real stem position is "coords[0]+coords[1]". */ 170*37da2899SCharles.Forsyth /* */ 171*37da2899SCharles.Forsyth typedef void 172*37da2899SCharles.Forsyth (*T1_Hints_SetStemFunc)( T1_Hints hints, 173*37da2899SCharles.Forsyth FT_UInt dimension, 174*37da2899SCharles.Forsyth FT_Long* coords ); 175*37da2899SCharles.Forsyth 176*37da2899SCharles.Forsyth 177*37da2899SCharles.Forsyth /*************************************************************************/ 178*37da2899SCharles.Forsyth /* */ 179*37da2899SCharles.Forsyth /* @functype: */ 180*37da2899SCharles.Forsyth /* T1_Hints_SetStem3Func */ 181*37da2899SCharles.Forsyth /* */ 182*37da2899SCharles.Forsyth /* @description: */ 183*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to record three */ 184*37da2899SCharles.Forsyth /* counter-controlled horizontal or vertical stems at once. */ 185*37da2899SCharles.Forsyth /* */ 186*37da2899SCharles.Forsyth /* @input: */ 187*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 188*37da2899SCharles.Forsyth /* */ 189*37da2899SCharles.Forsyth /* dimension :: 0 for horizontal stems, 1 for vertical ones. */ 190*37da2899SCharles.Forsyth /* */ 191*37da2899SCharles.Forsyth /* coords :: An array of 6 integers, holding 3 (position,length) */ 192*37da2899SCharles.Forsyth /* pairs for the counter-controlled stems. */ 193*37da2899SCharles.Forsyth /* */ 194*37da2899SCharles.Forsyth /* @note: */ 195*37da2899SCharles.Forsyth /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ 196*37da2899SCharles.Forsyth /* horizontal coordinates (x) for vertical stems (dim=1). */ 197*37da2899SCharles.Forsyth /* */ 198*37da2899SCharles.Forsyth /* The lengths cannot be negative (ghost stems are never */ 199*37da2899SCharles.Forsyth /* counter-controlled). */ 200*37da2899SCharles.Forsyth /* */ 201*37da2899SCharles.Forsyth typedef void 202*37da2899SCharles.Forsyth (*T1_Hints_SetStem3Func)( T1_Hints hints, 203*37da2899SCharles.Forsyth FT_UInt dimension, 204*37da2899SCharles.Forsyth FT_Long* coords ); 205*37da2899SCharles.Forsyth 206*37da2899SCharles.Forsyth 207*37da2899SCharles.Forsyth /*************************************************************************/ 208*37da2899SCharles.Forsyth /* */ 209*37da2899SCharles.Forsyth /* @functype: */ 210*37da2899SCharles.Forsyth /* T1_Hints_ResetFunc */ 211*37da2899SCharles.Forsyth /* */ 212*37da2899SCharles.Forsyth /* @description: */ 213*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to reset the stems hints in a */ 214*37da2899SCharles.Forsyth /* recording session. */ 215*37da2899SCharles.Forsyth /* */ 216*37da2899SCharles.Forsyth /* @input: */ 217*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 218*37da2899SCharles.Forsyth /* */ 219*37da2899SCharles.Forsyth /* end_point :: The index of the last point in the input glyph in */ 220*37da2899SCharles.Forsyth /* which the previously defined hints apply. */ 221*37da2899SCharles.Forsyth /* */ 222*37da2899SCharles.Forsyth typedef void 223*37da2899SCharles.Forsyth (*T1_Hints_ResetFunc)( T1_Hints hints, 224*37da2899SCharles.Forsyth FT_UInt end_point ); 225*37da2899SCharles.Forsyth 226*37da2899SCharles.Forsyth 227*37da2899SCharles.Forsyth /*************************************************************************/ 228*37da2899SCharles.Forsyth /* */ 229*37da2899SCharles.Forsyth /* @functype: */ 230*37da2899SCharles.Forsyth /* T1_Hints_CloseFunc */ 231*37da2899SCharles.Forsyth /* */ 232*37da2899SCharles.Forsyth /* @description: */ 233*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to close a hint recording */ 234*37da2899SCharles.Forsyth /* session. */ 235*37da2899SCharles.Forsyth /* */ 236*37da2899SCharles.Forsyth /* @input: */ 237*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 238*37da2899SCharles.Forsyth /* */ 239*37da2899SCharles.Forsyth /* end_point :: The index of the last point in the input glyph. */ 240*37da2899SCharles.Forsyth /* */ 241*37da2899SCharles.Forsyth /* @return: */ 242*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 243*37da2899SCharles.Forsyth /* */ 244*37da2899SCharles.Forsyth /* @note: */ 245*37da2899SCharles.Forsyth /* The error code will be set to indicate that an error occured */ 246*37da2899SCharles.Forsyth /* during the recording session. */ 247*37da2899SCharles.Forsyth /* */ 248*37da2899SCharles.Forsyth typedef FT_Error 249*37da2899SCharles.Forsyth (*T1_Hints_CloseFunc)( T1_Hints hints, 250*37da2899SCharles.Forsyth FT_UInt end_point ); 251*37da2899SCharles.Forsyth 252*37da2899SCharles.Forsyth 253*37da2899SCharles.Forsyth /*************************************************************************/ 254*37da2899SCharles.Forsyth /* */ 255*37da2899SCharles.Forsyth /* @functype: */ 256*37da2899SCharles.Forsyth /* T1_Hints_ApplyFunc */ 257*37da2899SCharles.Forsyth /* */ 258*37da2899SCharles.Forsyth /* @description: */ 259*37da2899SCharles.Forsyth /* A method of the @T1_Hints class used to apply hints to the */ 260*37da2899SCharles.Forsyth /* corresponding glyph outline. Must be called once all hints have */ 261*37da2899SCharles.Forsyth /* been recorded. */ 262*37da2899SCharles.Forsyth /* */ 263*37da2899SCharles.Forsyth /* @input: */ 264*37da2899SCharles.Forsyth /* hints :: A handle to the Type 1 hints recorder. */ 265*37da2899SCharles.Forsyth /* */ 266*37da2899SCharles.Forsyth /* outline :: A pointer to the target outline descriptor. */ 267*37da2899SCharles.Forsyth /* */ 268*37da2899SCharles.Forsyth /* globals :: The hinter globals for this font. */ 269*37da2899SCharles.Forsyth /* */ 270*37da2899SCharles.Forsyth /* hint_flags :: Hinter bit flags. */ 271*37da2899SCharles.Forsyth /* */ 272*37da2899SCharles.Forsyth /* @return: */ 273*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 274*37da2899SCharles.Forsyth /* */ 275*37da2899SCharles.Forsyth /* @note: */ 276*37da2899SCharles.Forsyth /* On input, all points within the outline are in font coordinates. */ 277*37da2899SCharles.Forsyth /* On output, they are in 1/64th of pixels. */ 278*37da2899SCharles.Forsyth /* */ 279*37da2899SCharles.Forsyth /* The scaling transformation is taken from the "globals" object */ 280*37da2899SCharles.Forsyth /* which must correspond to the same font as the glyph. */ 281*37da2899SCharles.Forsyth /* */ 282*37da2899SCharles.Forsyth typedef FT_Error 283*37da2899SCharles.Forsyth (*T1_Hints_ApplyFunc)( T1_Hints hints, 284*37da2899SCharles.Forsyth FT_Outline* outline, 285*37da2899SCharles.Forsyth PSH_Globals globals, 286*37da2899SCharles.Forsyth FT_Render_Mode hint_mode ); 287*37da2899SCharles.Forsyth 288*37da2899SCharles.Forsyth 289*37da2899SCharles.Forsyth /*************************************************************************/ 290*37da2899SCharles.Forsyth /* */ 291*37da2899SCharles.Forsyth /* @struct: */ 292*37da2899SCharles.Forsyth /* T1_Hints_FuncsRec */ 293*37da2899SCharles.Forsyth /* */ 294*37da2899SCharles.Forsyth /* @description: */ 295*37da2899SCharles.Forsyth /* The structure used to provide the API to @T1_Hints objects. */ 296*37da2899SCharles.Forsyth /* */ 297*37da2899SCharles.Forsyth /* @fields: */ 298*37da2899SCharles.Forsyth /* hints :: A handle to the T1 Hints recorder. */ 299*37da2899SCharles.Forsyth /* */ 300*37da2899SCharles.Forsyth /* open :: The function to open a recording session. */ 301*37da2899SCharles.Forsyth /* */ 302*37da2899SCharles.Forsyth /* close :: The function to close a recording session. */ 303*37da2899SCharles.Forsyth /* */ 304*37da2899SCharles.Forsyth /* stem :: The function to set a simple stem. */ 305*37da2899SCharles.Forsyth /* */ 306*37da2899SCharles.Forsyth /* stem3 :: The function to set counter-controlled stems. */ 307*37da2899SCharles.Forsyth /* */ 308*37da2899SCharles.Forsyth /* reset :: The function to reset stem hints. */ 309*37da2899SCharles.Forsyth /* */ 310*37da2899SCharles.Forsyth /* apply :: The function to apply the hints to the corresponding */ 311*37da2899SCharles.Forsyth /* glyph outline. */ 312*37da2899SCharles.Forsyth /* */ 313*37da2899SCharles.Forsyth typedef struct T1_Hints_FuncsRec_ 314*37da2899SCharles.Forsyth { 315*37da2899SCharles.Forsyth T1_Hints hints; 316*37da2899SCharles.Forsyth T1_Hints_OpenFunc open; 317*37da2899SCharles.Forsyth T1_Hints_CloseFunc close; 318*37da2899SCharles.Forsyth T1_Hints_SetStemFunc stem; 319*37da2899SCharles.Forsyth T1_Hints_SetStem3Func stem3; 320*37da2899SCharles.Forsyth T1_Hints_ResetFunc reset; 321*37da2899SCharles.Forsyth T1_Hints_ApplyFunc apply; 322*37da2899SCharles.Forsyth 323*37da2899SCharles.Forsyth } T1_Hints_FuncsRec; 324*37da2899SCharles.Forsyth 325*37da2899SCharles.Forsyth 326*37da2899SCharles.Forsyth /*************************************************************************/ 327*37da2899SCharles.Forsyth /*************************************************************************/ 328*37da2899SCharles.Forsyth /***** *****/ 329*37da2899SCharles.Forsyth /***** PUBLIC TYPE 2 HINTS RECORDER *****/ 330*37da2899SCharles.Forsyth /***** *****/ 331*37da2899SCharles.Forsyth /*************************************************************************/ 332*37da2899SCharles.Forsyth /*************************************************************************/ 333*37da2899SCharles.Forsyth 334*37da2899SCharles.Forsyth /*************************************************************************/ 335*37da2899SCharles.Forsyth /* */ 336*37da2899SCharles.Forsyth /* @type: */ 337*37da2899SCharles.Forsyth /* T2_Hints */ 338*37da2899SCharles.Forsyth /* */ 339*37da2899SCharles.Forsyth /* @description: */ 340*37da2899SCharles.Forsyth /* This is a handle to an opaque structure used to record glyph hints */ 341*37da2899SCharles.Forsyth /* from a Type 2 character glyph character string. */ 342*37da2899SCharles.Forsyth /* */ 343*37da2899SCharles.Forsyth /* The methods used to operate on this object are defined by the */ 344*37da2899SCharles.Forsyth /* @T2_Hints_FuncsRec structure. Recording glyph hints is normally */ 345*37da2899SCharles.Forsyth /* achieved through the following scheme: */ 346*37da2899SCharles.Forsyth /* */ 347*37da2899SCharles.Forsyth /* - Open a new hint recording session by calling the "open" method. */ 348*37da2899SCharles.Forsyth /* This will rewind the recorder and prepare it for new input. */ 349*37da2899SCharles.Forsyth /* */ 350*37da2899SCharles.Forsyth /* - For each hint found in the glyph charstring, call the */ 351*37da2899SCharles.Forsyth /* corresponding method ("stems", "hintmask", "counters"). Note */ 352*37da2899SCharles.Forsyth /* that these functions do not return an error code. */ 353*37da2899SCharles.Forsyth /* */ 354*37da2899SCharles.Forsyth /* - Close the recording session by calling the "close" method. It */ 355*37da2899SCharles.Forsyth /* will return an error code if the hints were invalid or something */ 356*37da2899SCharles.Forsyth /* strange happened (e.g. memory shortage). */ 357*37da2899SCharles.Forsyth /* */ 358*37da2899SCharles.Forsyth /* The hints accumulated in the object can later be used by the */ 359*37da2899SCharles.Forsyth /* Postscript hinter. */ 360*37da2899SCharles.Forsyth /* */ 361*37da2899SCharles.Forsyth typedef struct T2_HintsRec_* T2_Hints; 362*37da2899SCharles.Forsyth 363*37da2899SCharles.Forsyth 364*37da2899SCharles.Forsyth /*************************************************************************/ 365*37da2899SCharles.Forsyth /* */ 366*37da2899SCharles.Forsyth /* @type: */ 367*37da2899SCharles.Forsyth /* T2_Hints_Funcs */ 368*37da2899SCharles.Forsyth /* */ 369*37da2899SCharles.Forsyth /* @description: */ 370*37da2899SCharles.Forsyth /* A pointer to the @T2_Hints_FuncsRec structure that defines the API */ 371*37da2899SCharles.Forsyth /* of a given @T2_Hints object. */ 372*37da2899SCharles.Forsyth /* */ 373*37da2899SCharles.Forsyth typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs; 374*37da2899SCharles.Forsyth 375*37da2899SCharles.Forsyth 376*37da2899SCharles.Forsyth /*************************************************************************/ 377*37da2899SCharles.Forsyth /* */ 378*37da2899SCharles.Forsyth /* @functype: */ 379*37da2899SCharles.Forsyth /* T2_Hints_OpenFunc */ 380*37da2899SCharles.Forsyth /* */ 381*37da2899SCharles.Forsyth /* @description: */ 382*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to prepare it for a new */ 383*37da2899SCharles.Forsyth /* Type 2 hints recording session. */ 384*37da2899SCharles.Forsyth /* */ 385*37da2899SCharles.Forsyth /* @input: */ 386*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 387*37da2899SCharles.Forsyth /* */ 388*37da2899SCharles.Forsyth /* @note: */ 389*37da2899SCharles.Forsyth /* You should always call the @T2_Hints_CloseFunc method in order to */ 390*37da2899SCharles.Forsyth /* close an opened recording session. */ 391*37da2899SCharles.Forsyth /* */ 392*37da2899SCharles.Forsyth typedef void 393*37da2899SCharles.Forsyth (*T2_Hints_OpenFunc)( T2_Hints hints ); 394*37da2899SCharles.Forsyth 395*37da2899SCharles.Forsyth 396*37da2899SCharles.Forsyth /*************************************************************************/ 397*37da2899SCharles.Forsyth /* */ 398*37da2899SCharles.Forsyth /* @functype: */ 399*37da2899SCharles.Forsyth /* T2_Hints_StemsFunc */ 400*37da2899SCharles.Forsyth /* */ 401*37da2899SCharles.Forsyth /* @description: */ 402*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to set the table of stems in */ 403*37da2899SCharles.Forsyth /* either the vertical or horizontal dimension. Equivalent to the */ 404*37da2899SCharles.Forsyth /* "hstem", "vstem", "hstemhm", and "vstemhm" Type 2 operators. */ 405*37da2899SCharles.Forsyth /* */ 406*37da2899SCharles.Forsyth /* @input: */ 407*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 408*37da2899SCharles.Forsyth /* */ 409*37da2899SCharles.Forsyth /* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */ 410*37da2899SCharles.Forsyth /* (vstem). */ 411*37da2899SCharles.Forsyth /* */ 412*37da2899SCharles.Forsyth /* count :: The number of stems. */ 413*37da2899SCharles.Forsyth /* */ 414*37da2899SCharles.Forsyth /* coords :: An array of "count" (position,length) pairs. */ 415*37da2899SCharles.Forsyth /* */ 416*37da2899SCharles.Forsyth /* @note: */ 417*37da2899SCharles.Forsyth /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ 418*37da2899SCharles.Forsyth /* horizontal coordinates (x) for vertical stems (dim=1). */ 419*37da2899SCharles.Forsyth /* */ 420*37da2899SCharles.Forsyth /* There are "2*count" elements in the "coords" aray. Each even */ 421*37da2899SCharles.Forsyth /* element is an absolute position in font units, each odd element is */ 422*37da2899SCharles.Forsyth /* a length in font units. */ 423*37da2899SCharles.Forsyth /* */ 424*37da2899SCharles.Forsyth /* A length can be negative, in which case it must be either -20 or */ 425*37da2899SCharles.Forsyth /* -21. It will be interpreted as a "ghost" stem, according to the */ 426*37da2899SCharles.Forsyth /* Type 1 specification. */ 427*37da2899SCharles.Forsyth /* */ 428*37da2899SCharles.Forsyth typedef void 429*37da2899SCharles.Forsyth (*T2_Hints_StemsFunc)( T2_Hints hints, 430*37da2899SCharles.Forsyth FT_UInt dimension, 431*37da2899SCharles.Forsyth FT_UInt count, 432*37da2899SCharles.Forsyth FT_Fixed* coordinates ); 433*37da2899SCharles.Forsyth 434*37da2899SCharles.Forsyth 435*37da2899SCharles.Forsyth /*************************************************************************/ 436*37da2899SCharles.Forsyth /* */ 437*37da2899SCharles.Forsyth /* @functype: */ 438*37da2899SCharles.Forsyth /* T2_Hints_MaskFunc */ 439*37da2899SCharles.Forsyth /* */ 440*37da2899SCharles.Forsyth /* @description: */ 441*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to set a given hintmask */ 442*37da2899SCharles.Forsyth /* (this corresponds to the "hintmask" Type 2 operator). */ 443*37da2899SCharles.Forsyth /* */ 444*37da2899SCharles.Forsyth /* @input: */ 445*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 446*37da2899SCharles.Forsyth /* */ 447*37da2899SCharles.Forsyth /* end_point :: The glyph index of the last point to which the */ 448*37da2899SCharles.Forsyth /* previously defined/activated hints apply. */ 449*37da2899SCharles.Forsyth /* */ 450*37da2899SCharles.Forsyth /* bit_count :: The number of bits in the hint mask. */ 451*37da2899SCharles.Forsyth /* */ 452*37da2899SCharles.Forsyth /* bytes :: An array of bytes modelling the hint mask. */ 453*37da2899SCharles.Forsyth /* */ 454*37da2899SCharles.Forsyth /* @note: */ 455*37da2899SCharles.Forsyth /* If the hintmask starts the charstring (before any glyph point */ 456*37da2899SCharles.Forsyth /* definition), the value of "end_point" should be 0. */ 457*37da2899SCharles.Forsyth /* */ 458*37da2899SCharles.Forsyth /* "bit_count" is the number of meaningful bits in the "bytes" array; */ 459*37da2899SCharles.Forsyth /* it must be equal to the total number of hints defined so far */ 460*37da2899SCharles.Forsyth /* (i.e. horizontal+verticals). */ 461*37da2899SCharles.Forsyth /* */ 462*37da2899SCharles.Forsyth /* The "bytes" array can come directly from the Type 2 charstring and */ 463*37da2899SCharles.Forsyth /* respects the same format. */ 464*37da2899SCharles.Forsyth /* */ 465*37da2899SCharles.Forsyth typedef void 466*37da2899SCharles.Forsyth (*T2_Hints_MaskFunc)( T2_Hints hints, 467*37da2899SCharles.Forsyth FT_UInt end_point, 468*37da2899SCharles.Forsyth FT_UInt bit_count, 469*37da2899SCharles.Forsyth const FT_Byte* bytes ); 470*37da2899SCharles.Forsyth 471*37da2899SCharles.Forsyth 472*37da2899SCharles.Forsyth /*************************************************************************/ 473*37da2899SCharles.Forsyth /* */ 474*37da2899SCharles.Forsyth /* @functype: */ 475*37da2899SCharles.Forsyth /* T2_Hints_CounterFunc */ 476*37da2899SCharles.Forsyth /* */ 477*37da2899SCharles.Forsyth /* @description: */ 478*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to set a given counter mask */ 479*37da2899SCharles.Forsyth /* (this corresponds to the "hintmask" Type 2 operator). */ 480*37da2899SCharles.Forsyth /* */ 481*37da2899SCharles.Forsyth /* @input: */ 482*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 483*37da2899SCharles.Forsyth /* */ 484*37da2899SCharles.Forsyth /* end_point :: A glyph index of the last point to which the */ 485*37da2899SCharles.Forsyth /* previously defined/active hints apply. */ 486*37da2899SCharles.Forsyth /* */ 487*37da2899SCharles.Forsyth /* bit_count :: The number of bits in the hint mask. */ 488*37da2899SCharles.Forsyth /* */ 489*37da2899SCharles.Forsyth /* bytes :: An array of bytes modelling the hint mask. */ 490*37da2899SCharles.Forsyth /* */ 491*37da2899SCharles.Forsyth /* @note: */ 492*37da2899SCharles.Forsyth /* If the hintmask starts the charstring (before any glyph point */ 493*37da2899SCharles.Forsyth /* definition), the value of "end_point" should be 0. */ 494*37da2899SCharles.Forsyth /* */ 495*37da2899SCharles.Forsyth /* "bit_count" is the number of meaningful bits in the "bytes" array; */ 496*37da2899SCharles.Forsyth /* it must be equal to the total number of hints defined so far */ 497*37da2899SCharles.Forsyth /* (i.e. horizontal+verticals). */ 498*37da2899SCharles.Forsyth /* */ 499*37da2899SCharles.Forsyth /* The "bytes" array can come directly from the Type 2 charstring and */ 500*37da2899SCharles.Forsyth /* respects the same format. */ 501*37da2899SCharles.Forsyth /* */ 502*37da2899SCharles.Forsyth typedef void 503*37da2899SCharles.Forsyth (*T2_Hints_CounterFunc)( T2_Hints hints, 504*37da2899SCharles.Forsyth FT_UInt bit_count, 505*37da2899SCharles.Forsyth const FT_Byte* bytes ); 506*37da2899SCharles.Forsyth 507*37da2899SCharles.Forsyth 508*37da2899SCharles.Forsyth /*************************************************************************/ 509*37da2899SCharles.Forsyth /* */ 510*37da2899SCharles.Forsyth /* @functype: */ 511*37da2899SCharles.Forsyth /* T2_Hints_CloseFunc */ 512*37da2899SCharles.Forsyth /* */ 513*37da2899SCharles.Forsyth /* @description: */ 514*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to close a hint recording */ 515*37da2899SCharles.Forsyth /* session. */ 516*37da2899SCharles.Forsyth /* */ 517*37da2899SCharles.Forsyth /* @input: */ 518*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 519*37da2899SCharles.Forsyth /* */ 520*37da2899SCharles.Forsyth /* end_point :: The index of the last point in the input glyph. */ 521*37da2899SCharles.Forsyth /* */ 522*37da2899SCharles.Forsyth /* @return: */ 523*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 524*37da2899SCharles.Forsyth /* */ 525*37da2899SCharles.Forsyth /* @note: */ 526*37da2899SCharles.Forsyth /* The error code will be set to indicate that an error occured */ 527*37da2899SCharles.Forsyth /* during the recording session. */ 528*37da2899SCharles.Forsyth /* */ 529*37da2899SCharles.Forsyth typedef FT_Error 530*37da2899SCharles.Forsyth (*T2_Hints_CloseFunc)( T2_Hints hints, 531*37da2899SCharles.Forsyth FT_UInt end_point ); 532*37da2899SCharles.Forsyth 533*37da2899SCharles.Forsyth 534*37da2899SCharles.Forsyth /*************************************************************************/ 535*37da2899SCharles.Forsyth /* */ 536*37da2899SCharles.Forsyth /* @functype: */ 537*37da2899SCharles.Forsyth /* T2_Hints_ApplyFunc */ 538*37da2899SCharles.Forsyth /* */ 539*37da2899SCharles.Forsyth /* @description: */ 540*37da2899SCharles.Forsyth /* A method of the @T2_Hints class used to apply hints to the */ 541*37da2899SCharles.Forsyth /* corresponding glyph outline. Must be called after the "close" */ 542*37da2899SCharles.Forsyth /* method. */ 543*37da2899SCharles.Forsyth /* */ 544*37da2899SCharles.Forsyth /* @input: */ 545*37da2899SCharles.Forsyth /* hints :: A handle to the Type 2 hints recorder. */ 546*37da2899SCharles.Forsyth /* */ 547*37da2899SCharles.Forsyth /* outline :: A pointer to the target outline descriptor. */ 548*37da2899SCharles.Forsyth /* */ 549*37da2899SCharles.Forsyth /* globals :: The hinter globals for this font. */ 550*37da2899SCharles.Forsyth /* */ 551*37da2899SCharles.Forsyth /* hint_flags :: Hinter bit flags. */ 552*37da2899SCharles.Forsyth /* */ 553*37da2899SCharles.Forsyth /* @return: */ 554*37da2899SCharles.Forsyth /* FreeType error code. 0 means success. */ 555*37da2899SCharles.Forsyth /* */ 556*37da2899SCharles.Forsyth /* @note: */ 557*37da2899SCharles.Forsyth /* On input, all points within the outline are in font coordinates. */ 558*37da2899SCharles.Forsyth /* On output, they are in 1/64th of pixels. */ 559*37da2899SCharles.Forsyth /* */ 560*37da2899SCharles.Forsyth /* The scaling transformation is taken from the "globals" object */ 561*37da2899SCharles.Forsyth /* which must correspond to the same font than the glyph. */ 562*37da2899SCharles.Forsyth /* */ 563*37da2899SCharles.Forsyth typedef FT_Error 564*37da2899SCharles.Forsyth (*T2_Hints_ApplyFunc)( T2_Hints hints, 565*37da2899SCharles.Forsyth FT_Outline* outline, 566*37da2899SCharles.Forsyth PSH_Globals globals, 567*37da2899SCharles.Forsyth FT_Render_Mode hint_mode ); 568*37da2899SCharles.Forsyth 569*37da2899SCharles.Forsyth 570*37da2899SCharles.Forsyth /*************************************************************************/ 571*37da2899SCharles.Forsyth /* */ 572*37da2899SCharles.Forsyth /* @struct: */ 573*37da2899SCharles.Forsyth /* T2_Hints_FuncsRec */ 574*37da2899SCharles.Forsyth /* */ 575*37da2899SCharles.Forsyth /* @description: */ 576*37da2899SCharles.Forsyth /* The structure used to provide the API to @T2_Hints objects. */ 577*37da2899SCharles.Forsyth /* */ 578*37da2899SCharles.Forsyth /* @fields: */ 579*37da2899SCharles.Forsyth /* hints :: A handle to the T2 hints recorder object. */ 580*37da2899SCharles.Forsyth /* */ 581*37da2899SCharles.Forsyth /* open :: The function to open a recording session. */ 582*37da2899SCharles.Forsyth /* */ 583*37da2899SCharles.Forsyth /* close :: The function to close a recording session. */ 584*37da2899SCharles.Forsyth /* */ 585*37da2899SCharles.Forsyth /* stems :: The function to set the dimension's stems table. */ 586*37da2899SCharles.Forsyth /* */ 587*37da2899SCharles.Forsyth /* hintmask :: The function to set hint masks. */ 588*37da2899SCharles.Forsyth /* */ 589*37da2899SCharles.Forsyth /* counter :: The function to set counter masks. */ 590*37da2899SCharles.Forsyth /* */ 591*37da2899SCharles.Forsyth /* apply :: The function to apply the hints on the corresponding */ 592*37da2899SCharles.Forsyth /* glyph outline. */ 593*37da2899SCharles.Forsyth /* */ 594*37da2899SCharles.Forsyth typedef struct T2_Hints_FuncsRec_ 595*37da2899SCharles.Forsyth { 596*37da2899SCharles.Forsyth T2_Hints hints; 597*37da2899SCharles.Forsyth T2_Hints_OpenFunc open; 598*37da2899SCharles.Forsyth T2_Hints_CloseFunc close; 599*37da2899SCharles.Forsyth T2_Hints_StemsFunc stems; 600*37da2899SCharles.Forsyth T2_Hints_MaskFunc hintmask; 601*37da2899SCharles.Forsyth T2_Hints_CounterFunc counter; 602*37da2899SCharles.Forsyth T2_Hints_ApplyFunc apply; 603*37da2899SCharles.Forsyth 604*37da2899SCharles.Forsyth } T2_Hints_FuncsRec; 605*37da2899SCharles.Forsyth 606*37da2899SCharles.Forsyth 607*37da2899SCharles.Forsyth /* */ 608*37da2899SCharles.Forsyth 609*37da2899SCharles.Forsyth 610*37da2899SCharles.Forsyth typedef struct PSHinter_Interface_ 611*37da2899SCharles.Forsyth { 612*37da2899SCharles.Forsyth PSH_Globals_Funcs (*get_globals_funcs)( FT_Module module ); 613*37da2899SCharles.Forsyth T1_Hints_Funcs (*get_t1_funcs) ( FT_Module module ); 614*37da2899SCharles.Forsyth T2_Hints_Funcs (*get_t2_funcs) ( FT_Module module ); 615*37da2899SCharles.Forsyth 616*37da2899SCharles.Forsyth } PSHinter_Interface; 617*37da2899SCharles.Forsyth 618*37da2899SCharles.Forsyth typedef PSHinter_Interface* PSHinter_Service; 619*37da2899SCharles.Forsyth 620*37da2899SCharles.Forsyth 621*37da2899SCharles.Forsyth FT_END_HEADER 622*37da2899SCharles.Forsyth 623*37da2899SCharles.Forsyth #endif /* __PSHINTS_H__ */ 624*37da2899SCharles.Forsyth 625*37da2899SCharles.Forsyth 626*37da2899SCharles.Forsyth /* END */ 627