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