diff options
Diffstat (limited to 'include/freetype/internal/pshints.h')
-rw-r--r-- | include/freetype/internal/pshints.h | 1025 |
1 files changed, 557 insertions, 468 deletions
diff --git a/include/freetype/internal/pshints.h b/include/freetype/internal/pshints.h index 4384ad791..87a4d806d 100644 --- a/include/freetype/internal/pshints.h +++ b/include/freetype/internal/pshints.h @@ -3,8 +3,8 @@ /* pshints.h */ /* */ /* Interface to Postscript-specific (Type 1 and Type 2) hints */ -/* recorders. These are used to support native T1/T2 hints */ -/* in the "type1", "cid" and "cff" font drivers */ +/* recorders (specification only). These are used to support native */ +/* T1/T2 hints in the "type1", "cid" and "cff" font drivers. */ /* */ /* Copyright 2001 by */ /* David Turner, Robert Wilhelm, and Werner Lemberg. */ @@ -17,491 +17,575 @@ /* */ /***************************************************************************/ + #ifndef __PSHINTS_H__ #define __PSHINTS_H__ + #include <ft2build.h> #include FT_FREETYPE_H #include FT_TYPE1_TABLES_H #include FT_INTERNAL_POSTSCRIPT_GLOBALS_H + FT_BEGIN_HEADER - /**********************************************************************/ - /**********************************************************************/ - /***** *****/ - /***** INTERNAL REPRESENTATION OF GLOBALS *****/ - /***** *****/ - /**********************************************************************/ - /**********************************************************************/ - - typedef struct PSH_GlobalsRec_* PSH_Globals; - - typedef FT_Error (*PSH_Globals_NewFunc)( FT_Memory memory, - T1_Private* private_dict, - PSH_Globals* aglobals ); - - typedef FT_Error (*PSH_Globals_SetScaleFunc)( PSH_Globals globals, - FT_Fixed x_scale, - FT_Fixed y_scale, - FT_Fixed x_delta, - FT_Fixed y_delta ); - - typedef void (*PSH_Globals_DestroyFunc)( PSH_Globals globals ); - - typedef struct + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** INTERNAL REPRESENTATION OF GLOBALS *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + typedef struct PSH_GlobalsRec_* PSH_Globals; + + typedef FT_Error + (*PSH_Globals_NewFunc)( FT_Memory memory, + T1_Private* private_dict, + PSH_Globals* aglobals ); + + typedef FT_Error + (*PSH_Globals_SetScaleFunc)( PSH_Globals globals, + FT_Fixed x_scale, + FT_Fixed y_scale, + FT_Fixed x_delta, + FT_Fixed y_delta ); + + typedef void + (*PSH_Globals_DestroyFunc)( PSH_Globals globals ); + + + typedef struct PSH_Globals_FuncsRec_ { PSH_Globals_NewFunc create; PSH_Globals_SetScaleFunc set_scale; PSH_Globals_DestroyFunc destroy; - + } PSH_Globals_FuncsRec, *PSH_Globals_Funcs; - /**********************************************************************/ - /**********************************************************************/ - /***** *****/ - /***** PUBLIC TYPE 1 HINTS RECORDER *****/ - /***** *****/ - /**********************************************************************/ - /**********************************************************************/ - - /************************************************************************ - * - * @type: T1_Hints - * - * @description: - * this is a handle to an opaque structure used to record glyph - * hints from a Type 1 character glyph character string. - * - * the methods used to operate on this object are defined by the - * @T1_Hints_FuncsRec structure. Recording glyph hints is normally - * achieved through the following scheme: - * - * - open a new hint recording session by calling the "open" - * method. This will rewind the recorder and prepare it for - * new input - * - * - for each hint found in the glyph charstring, call the - * corresponding method ("stem", "stem3" or "reset"). - * note that these functions do not return an error code - * - * - close the recording session by calling the "close" method - * it will return an error code if the hints were invalid or - * something strange happened (e.g. memory shortage) - * - * the hints accumulated in the object can later be used by the - * Postscript hinter - */ - typedef struct T1_HintsRec_* T1_Hints; - - /************************************************************************ - * - * @type: T1_Hints_Funcs - * - * @description: - * a pointer to the @T1_Hints_FuncsRec structure that defines the - * API of a given @T1_Hints object - */ + + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PUBLIC TYPE 1 HINTS RECORDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /*************************************************************************/ + /* */ + /* @type: */ + /* T1_Hints */ + /* */ + /* @description: */ + /* This is a handle to an opaque structure used to record glyph hints */ + /* from a Type 1 character glyph character string. */ + /* */ + /* The methods used to operate on this object are defined by the */ + /* @T1_Hints_FuncsRec structure. Recording glyph hints is normally */ + /* achieved through the following scheme: */ + /* */ + /* - Open a new hint recording session by calling the "open" method. */ + /* This will rewind the recorder and prepare it for new input. */ + /* */ + /* - For each hint found in the glyph charstring, call the */ + /* corresponding method ("stem", "stem3", or "reset"). Note that */ + /* these functions do not return an error code. */ + /* */ + /* - Close the recording session by calling the "close" method. It */ + /* will return an error code if the hints were invalid or something */ + /* strange happened (e.g. memory shortage). */ + /* */ + /* The hints accumulated in the object can later be used by the */ + /* Postscript hinter. */ + /* */ + typedef struct T1_HintsRec_* T1_Hints; + + + /*************************************************************************/ + /* */ + /* @type: */ + /* T1_Hints_Funcs */ + /* */ + /* @description: */ + /* A pointer to the @T1_Hints_FuncsRec structure that defines the */ + /* API of a given @T1_Hints object. */ + /* */ typedef const struct T1_Hints_FuncsRec_* T1_Hints_Funcs; - - - /************************************************************************ - * - * @functype: T1_Hints_OpenFunc - * - * @description: - * a method of the @T1_Hints class used to prepare it for a new - * Type 1 hints recording session - * - * @input: - * hints :: handle to Type 1 hints recorder - * - * @note: - * You should always call the @T1_Hints_CloseFunc method in order - * to close an opened recording session - */ - typedef void (*T1_Hints_OpenFunc) ( T1_Hints hints ); - - /************************************************************************ - * - * @functype: T1_Hints_SetStemFunc - * - * @description: - * a method of the @T1_Hints class used to record a new horizontal or - * vertical stem. This corresponds to the Type 1 "hstem" and "vstem" - * operators - * - * @input: - * hints :: handle to Type 1 hints recorder - * dimension :: 0 for horizontal stems (hstem), 1 for vertical ones (vstem) - * coords :: array of 2 integers, used as (position,length) stem descriptor - * - * @note: - * use vertical coordinates (y) for horizontal stems (dim=0) - * use horizontal coordinates (x) for vertical stems (dim=1) - * - * "coords[0]" is the absolute stem position (lowest coordinate) - * "coords[1]" is the length. - * - * the length can be negative, in which case it must be either - * -20 or -21 in order and will be interpreted as a "ghost" stem, - * according to the Type 1 specification. - * - * if the length is -21 (corresponding to a bottom ghost stem), then - * the real stem position is "coords[0]+coords[1]" - */ - typedef void (*T1_Hints_SetStemFunc) ( T1_Hints hints, - FT_UInt dimension, - FT_Long* coords ); - - /************************************************************************ - * - * @functype: T1_Hints_SetStem3Func - * - * @description: - * a method of the @T1_Hints class used to record three counter-controlled - * horizontal or vertical stems at once - * - * @input: - * hints :: handle to Type 1 hints recorder - * dimension :: 0 for horizontal stems, 1 for vertical ones - * coords :: array of 6 integers, i.e. 3 (position,length) pairs - * for the counter-controlled stems - * - * @note: - * use vertical coordinates (y) for horizontal stems (dim=0) - * use horizontal coordinates (x) for vertical stems (dim=1) - * - * the lengths cannot be negative (ghost stems are never counter-controlled) - */ - typedef void (*T1_Hints_SetStem3Func) ( T1_Hints hints, - FT_UInt dimension, - FT_Long* coords ); - - /************************************************************************ - * - * @functype: T1_Hints_ResetFunc - * - * @description: - * a method of the @T1_Hints class used to reset the stems hints - * in a recording session. This is equivalent to the Type 1 ... - * - * @input: - * hints :: handle to Type 1 hints recorder - * end_point :: index of last point in the input glyph in which - * the previously defined hints apply - */ - typedef void (*T1_Hints_ResetFunc)( T1_Hints hints, - FT_UInt end_point ); - - /************************************************************************ - * - * @functype: T1_Hints_CloseFunc - * - * @description: - * a method of the @T1_Hints class used to close a hint recording - * session. - * - * @input: - * hints :: handle to Type 1 hints recorder - * end_point :: index of last point in the input glyph - * - * @return: - * error code. 0 means success - * - * @note: - * the error code will be set to indicate that an error occured - * during the recording session - */ - typedef FT_Error (*T1_Hints_CloseFunc)( T1_Hints hints, - FT_UInt end_point ); - - - /************************************************************************ - * - * @functype: T1_Hints_ApplyFunc - * - * @description: - * a method of the @T1_Hints class used to apply hints to the - * corresponding glyph outline. Must be called once all hints - * have been recorded. - * - * @input: - * hints :: handle to Type 1 hints recorder - * outline :: pointer to target outline descriptor - * globals :: the hinter globals for this font - * - * @return: - * error code. 0 means success - * - * @note: - * on input, all points within the outline are in font coordinates. - * on output, they're in 1/64th of pixels. - * - * the scaling transform is taken from the "globals" object, which - * must correspond to the same font than the glyph - */ - typedef FT_Error (*T1_Hints_ApplyFunc)( T1_Hints hints, - FT_Outline* outline, - PSH_Globals globals ); - - - /************************************************************************ - * - * @struct: T1_Hints_FuncsRec - * - * @description: - * the structure used to provide the API to @T1_Hints objects - * - * @fields: - * hints :: handle to T1 Hints recorder - * open :: open recording session - * close :: close recording session - * stem :: set simple stem - * stem3 :: set counter-controlled stems - * reset :: reset stem hints - * apply :: apply the hints to the corresponding glyph outline - */ - typedef struct T1_Hints_FuncsRec_ + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_OpenFunc */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to prepare it for a new */ + /* Type 1 hints recording session. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* */ + /* @note: */ + /* You should always call the @T1_Hints_CloseFunc method in order to */ + /* close an opened recording session. */ + /* */ + typedef void + (*T1_Hints_OpenFunc)( T1_Hints hints ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_SetStemFunc */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to record a new horizontal or */ + /* vertical stem. This corresponds to the Type 1 "hstem" and "vstem" */ + /* operators. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* */ + /* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */ + /* (vstem). */ + /* */ + /* coords :: Array of 2 integers, used as (position,length) stem */ + /* descriptor. */ + /* */ + /* @note: */ + /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ + /* horizontal coordinates (x) for vertical stems (dim=1). */ + /* */ + /* "coords[0]" is the absolute stem position (lowest coordinate); */ + /* "coords[1]" is the length. */ + /* */ + /* The length can be negative, in which case it must be either -20 or */ + /* -21. It will be interpreted as a "ghost" stem, according to */ + /* Type 1 specification. */ + /* */ + /* If the length is -21 (corresponding to a bottom ghost stem), then */ + /* the real stem position is "coords[0]+coords[1]". */ + /* */ + typedef void + (*T1_Hints_SetStemFunc)( T1_Hints hints, + FT_UInt dimension, + FT_Long* coords ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_SetStem3Func */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to record three */ + /* counter-controlled horizontal or vertical stems at once. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* */ + /* dimension :: 0 for horizontal stems, 1 for vertical ones. */ + /* */ + /* coords :: An array of 6 integers, holding 3 (position,length) */ + /* pairs for the counter-controlled stems. */ + /* */ + /* @note: */ + /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ + /* horizontal coordinates (x) for vertical stems (dim=1). */ + /* */ + /* The lengths cannot be negative (ghost stems are never */ + /* counter-controlled). */ + /* */ + typedef void + (*T1_Hints_SetStem3Func)( T1_Hints hints, + FT_UInt dimension, + FT_Long* coords ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_ResetFunc */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to reset the stems hints in a */ + /* recording session. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* end_point :: The index of the last point in the input glyph in */ + /* which the previously defined hints apply. */ + /* */ + typedef void + (*T1_Hints_ResetFunc)( T1_Hints hints, + FT_UInt end_point ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_CloseFunc */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to close a hint recording */ + /* session. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* */ + /* end_point :: The index of the last point in the input glyph. */ + /* */ + /* @return: */ + /* FreeType error code. 0 means success. */ + /* */ + /* @note: */ + /* The error code will be set to indicate that an error occured */ + /* during the recording session. */ + /* */ + typedef FT_Error + (*T1_Hints_CloseFunc)( T1_Hints hints, + FT_UInt end_point ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T1_Hints_ApplyFunc */ + /* */ + /* @description: */ + /* A method of the @T1_Hints class used to apply hints to the */ + /* corresponding glyph outline. Must be called once all hints have */ + /* been recorded. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 1 hints recorder. */ + /* */ + /* outline :: A pointer to the target outline descriptor. */ + /* */ + /* globals :: The hinter globals for this font. */ + /* */ + /* @return: */ + /* FreeType error code. 0 means success. */ + /* */ + /* @note: */ + /* On input, all points within the outline are in font coordinates. */ + /* On output, they are in 1/64th of pixels. */ + /* */ + /* The scaling transformation is taken from the "globals" object */ + /* which must correspond to the same font as the glyph. */ + /* */ + typedef FT_Error + (*T1_Hints_ApplyFunc)( T1_Hints hints, + FT_Outline* outline, + PSH_Globals globals ); + + + /*************************************************************************/ + /* */ + /* @struct: */ + /* T1_Hints_FuncsRec */ + /* */ + /* @description: */ + /* The structure used to provide the API to @T1_Hints objects. */ + /* */ + /* @fields: */ + /* hints :: A handle to the T1 Hints recorder. */ + /* */ + /* open :: The function to open a recording session. */ + /* */ + /* close :: The function to close a recording session. */ + /* */ + /* stem :: The function to set a simple stem. */ + /* */ + /* stem3 :: The function to set counter-controlled stems. */ + /* */ + /* reset :: The function to reset stem hints. */ + /* */ + /* apply :: The function to apply the hints to the corresponding */ + /* glyph outline. */ + /* */ + typedef struct T1_Hints_FuncsRec_ { - T1_Hints hints; - T1_Hints_OpenFunc open; - T1_Hints_CloseFunc close; - T1_Hints_SetStemFunc stem; - T1_Hints_SetStem3Func stem3; - T1_Hints_ResetFunc reset; - T1_Hints_ApplyFunc apply; - + T1_Hints hints; + T1_Hints_OpenFunc open; + T1_Hints_CloseFunc close; + T1_Hints_SetStemFunc stem; + T1_Hints_SetStem3Func stem3; + T1_Hints_ResetFunc reset; + T1_Hints_ApplyFunc apply; + } T1_Hints_FuncsRec; - /**********************************************************************/ - /**********************************************************************/ - /***** *****/ - /***** PUBLIC TYPE 2 HINTS RECORDER *****/ - /***** *****/ - /**********************************************************************/ - /**********************************************************************/ - - - /************************************************************************ - * - * @type: T2_Hints - * - * @description: - * this is a handle to an opaque structure used to record glyph - * hints from a Type 2 character glyph character string. - * - * the methods used to operate on this object are defined by the - * @T2_Hints_FuncsRec structure. Recording glyph hints is normally - * achieved through the following scheme: - * - * - open a new hint recording session by calling the "open" - * method. This will rewind the recorder and prepare it for - * new input - * - * - for each hint found in the glyph charstring, call the - * corresponding method ("stems", "hintmask", "counters"). - * note that these functions do not return an error code - * - * - close the recording session by calling the "close" method - * it will return an error code if the hints were invalid or - * something strange happened (e.g. memory shortage) - * - * the hints accumulated in the object can later be used by the - * Postscript hinter - */ - typedef struct T2_HintsRec_* T2_Hints; - - /************************************************************************ - * - * @type: T2_Hints_Funcs - * - * @description: - * a pointer to the @T1_Hints_FuncsRec structure that defines the - * API of a given @T2_Hints object - */ + /*************************************************************************/ + /*************************************************************************/ + /***** *****/ + /***** PUBLIC TYPE 2 HINTS RECORDER *****/ + /***** *****/ + /*************************************************************************/ + /*************************************************************************/ + + /*************************************************************************/ + /* */ + /* @type: */ + /* T2_Hints */ + /* */ + /* @description: */ + /* This is a handle to an opaque structure used to record glyph hints */ + /* from a Type 2 character glyph character string. */ + /* */ + /* The methods used to operate on this object are defined by the */ + /* @T2_Hints_FuncsRec structure. Recording glyph hints is normally */ + /* achieved through the following scheme: */ + /* */ + /* - Open a new hint recording session by calling the "open" method. */ + /* This will rewind the recorder and prepare it for new input. */ + /* */ + /* - For each hint found in the glyph charstring, call the */ + /* corresponding method ("stems", "hintmask", "counters"). Note */ + /* that these functions do not return an error code. */ + /* */ + /* - Close the recording session by calling the "close" method. It */ + /* will return an error code if the hints were invalid or something */ + /* strange happened (e.g. memory shortage). */ + /* */ + /* The hints accumulated in the object can later be used by the */ + /* Postscript hinter. */ + /* */ + typedef struct T2_HintsRec_* T2_Hints; + + + /*************************************************************************/ + /* */ + /* @type: */ + /* T2_Hints_Funcs */ + /* */ + /* @description: */ + /* A pointer to the @T2_Hints_FuncsRec structure that defines the API */ + /* of a given @T2_Hints object. */ + /* */ typedef const struct T2_Hints_FuncsRec_* T2_Hints_Funcs; - /************************************************************************ - * - * @functype: T2_Hints_OpenFunc - * - * @description: - * a method of the @T2_Hints class used to prepare it for a new - * Type 2 hints recording session - * - * @input: - * hints :: handle to Type 2 hints recorder - * - * @note: - * You should always call the @T2_Hints_CloseFunc method in order - * to close an opened recording session - */ - typedef void (*T2_Hints_OpenFunc) ( T2_Hints hints ); - - - /************************************************************************ - * - * @functype: T2_Hints_StemsFunc - * - * @description: - * a method of the @T2_Hints class used to set the table of stems - * in either the vertical or horizontal dimension. Equivalent to the - * "hstem", "vstem", "hstemhm" and "vstemhm" Type 2 operators - * - * @input: - * hints :: handle to Type 2 hints recorder - * dimension :: 0 for horizontal stems (hstem), 1 for vertical ones (vstem) - * count :: number of stems - * coordinates :: an array of "count" (position,length) pairs - * - * @note: - * use vertical coordinates (y) for horizontal stems (dim=0) - * use horizontal coordinates (x) for vertical stems (dim=1) - * - * there are "2*count" elements in the "coordinates" array. Each - * even element is an absolute position in font units, each odd - * element is a length in font units - * - * a length can be negative, in which case it must be either - * -20 or -21 in order and will be interpreted as a "ghost" stem, - * according to the Type 1 specification. - */ - typedef void (*T2_Hints_StemsFunc) ( T2_Hints hints, - FT_UInt dimension, - FT_UInt count, - FT_Fixed* coordinates ); - - /************************************************************************ - * - * @functype: T2_Hints_MaskFunc - * - * @description: - * a method of the @T2_Hints class used to set a given hintmask - * (correspond to the "hintmask" Type 2 operator) - * - * @input: - * hints :: handle to Type 2 hints recorder - * end_point :: glyph index of the last point to which the previously - * defined/active hints apply. - * bit_count :: number of bits in the hint mask. - * bytes :: an array of bytes modelling the hint mask - * - * @note: - * if the hintmask starts the charstring (before any glyph point - * definition), the value of "end_point" should be 0 - * - * "bit_count" is the number of meaningful bits in the "bytes" array, - * and must be equal to the total number of hints defined so far - * (i.e. horizontal+verticals) - * - * the "bytes" array can come directly from the Type 2 charstring - * and respect the same format. - */ - typedef void (*T2_Hints_MaskFunc) ( T2_Hints hints, - FT_UInt end_point, - FT_UInt bit_count, - const FT_Byte* bytes ); - - /************************************************************************ - * - * @functype: T2_Hints_CounterFunc - * - * @description: - * a method of the @T2_Hints class used to set a given counter - * mask (correspond to the "hintmask" Type 2 operator) - * - * @input: - * hints :: handle to Type 2 hints recorder - * end_point :: glyph index of the last point to which the previously - * defined/active hints apply. - * bit_count :: number of bits in the hint mask. - * bytes :: an array of bytes modelling the hint mask - * - * @note: - * if the hintmask starts the charstring (before any glyph point - * definition), the value of "end_point" should be 0 - * - * "bit_count" is the number of meaningful bits in the "bytes" array, - * and must be equal to the total number of hints defined so far - * (i.e. horizontal+verticals) - * - * the "bytes" array can come directly from the Type 2 charstring - * and respect the same format. - */ - typedef void (*T2_Hints_CounterFunc)( T2_Hints hints, - FT_UInt bit_count, - const FT_Byte* bytes ); - - /************************************************************************ - * - * @functype: T2_Hints_CloseFunc - * - * @description: - * a method of the @T2_Hints class used to close a hint recording - * session. - * - * @input: - * hints :: handle to Type 2 hints recorder - * end_point :: index of last point in the input glyph - * - * @return: - * error code. 0 means success - * - * @note: - * the error code will be set to indicate that an error occured - * during the recording session - */ - typedef FT_Error (*T2_Hints_CloseFunc) ( T2_Hints hints, - FT_UInt end_point ); - - - /************************************************************************ - * - * @functype: T2_Hints_ApplyFunc - * - * @description: - * a method of the @T2_Hints class used to apply hints to the - * corresponding glyph outline. Must be called after the "close" method - * - * @input: - * hints :: handle to Type 2 hints recorder - * outline :: pointer to target outline descriptor - * globals :: the hinter globals for this font - * - * @return: - * error code. 0 means success - * - * @note: - * on input, all points within the outline are in font coordinates. - * on output, they're in 1/64th of pixels. - * - * the scaling transform is taken from the "globals" object, which - * must correspond to the same font than the glyph - */ - typedef FT_Error (*T2_Hints_ApplyFunc)( T2_Hints hints, - FT_Outline* outline, - PSH_Globals globals ); - - - /************************************************************************ - * - * @struct: T2_Hints_FuncsRec - * - * @description: - * the structure used to provide the API to @T2_Hints objects - * - * @fields: - * hints :: handle to T2 hints recorder object - * open :: open recording session - * close :: close recording session - * stems :: set dimension's stems table - * hintmask :: set hint masks - * counter :: set counter masks - * apply :: apply the hints on the corresponding glyph outline - */ - typedef struct T2_Hints_FuncsRec_ + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_OpenFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to prepare it for a new */ + /* Type 2 hints recording session. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* @note: */ + /* You should always call the @T2_Hints_CloseFunc method in order to */ + /* close an opened recording session. */ + /* */ + typedef void + (*T2_Hints_OpenFunc)( T2_Hints hints ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_StemsFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to set the table of stems in */ + /* either the vertical or horizontal dimension. Equivalent to the */ + /* "hstem", "vstem", "hstemhm", and "vstemhm" Type 2 operators. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* dimension :: 0 for horizontal stems (hstem), 1 for vertical ones */ + /* (vstem). */ + /* */ + /* count :: The number of stems. */ + /* */ + /* coords :: An array of "count" (position,length) pairs. */ + /* */ + /* @note: */ + /* Use vertical coordinates (y) for horizontal stems (dim=0). Use */ + /* horizontal coordinates (x) for vertical stems (dim=1). */ + /* */ + /* There are "2*count" elements in the "coords" aray. Each even */ + /* element is an absolute position in font units, each odd element is */ + /* a length in font units. */ + /* */ + /* A length can be negative, in which case it must be either -20 or */ + /* -21. It will be interpreted as a "ghost" stem, according to the */ + /* Type 1 specification. */ + /* */ + typedef void + (*T2_Hints_StemsFunc)( T2_Hints hints, + FT_UInt dimension, + FT_UInt count, + FT_Fixed* coordinates ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_MaskFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to set a given hintmask */ + /* (this corresponds to the "hintmask" Type 2 operator). */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* end_point :: The glyph index of the last point to which the */ + /* previously defined/activated hints apply. */ + /* */ + /* bit_count :: The number of bits in the hint mask. */ + /* */ + /* bytes :: An array of bytes modelling the hint mask. */ + /* */ + /* @note: */ + /* If the hintmask starts the charstring (before any glyph point */ + /* definition), the value of "end_point" should be 0. */ + /* */ + /* "bit_count" is the number of meaningful bits in the "bytes" array; */ + /* it must be equal to the total number of hints defined so far */ + /* (i.e. horizontal+verticals). */ + /* */ + /* The "bytes" array can come directly from the Type 2 charstring and */ + /* respects the same format. */ + /* */ + typedef void + (*T2_Hints_MaskFunc)( T2_Hints hints, + FT_UInt end_point, + FT_UInt bit_count, + const FT_Byte* bytes ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_CounterFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to set a given counter mask */ + /* (this corresponds to the "hintmask" Type 2 operator). */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* end_point :: A glyph index of the last point to which the */ + /* previously defined/active hints apply. */ + /* */ + /* bit_count :: The number of bits in the hint mask. */ + /* */ + /* bytes :: An array of bytes modelling the hint mask. */ + /* */ + /* @note: */ + /* If the hintmask starts the charstring (before any glyph point */ + /* definition), the value of "end_point" should be 0. */ + /* */ + /* "bit_count" is the number of meaningful bits in the "bytes" array; */ + /* it must be equal to the total number of hints defined so far */ + /* (i.e. horizontal+verticals). */ + /* */ + /* The "bytes" array can come directly from the Type 2 charstring and */ + /* respects the same format. */ + /* */ + typedef void + (*T2_Hints_CounterFunc)( T2_Hints hints, + FT_UInt bit_count, + const FT_Byte* bytes ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_CloseFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to close a hint recording */ + /* session. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* end_point :: The index of the last point in the input glyph. */ + /* */ + /* @return: */ + /* FreeType error code. 0 means success. */ + /* */ + /* @note: */ + /* The error code will be set to indicate that an error occured */ + /* during the recording session. */ + /* */ + typedef FT_Error + (*T2_Hints_CloseFunc)( T2_Hints hints, + FT_UInt end_point ); + + + /*************************************************************************/ + /* */ + /* @functype: */ + /* T2_Hints_ApplyFunc */ + /* */ + /* @description: */ + /* A method of the @T2_Hints class used to apply hints to the */ + /* corresponding glyph outline. Must be called after the "close" */ + /* method. */ + /* */ + /* @input: */ + /* hints :: A handle to the Type 2 hints recorder. */ + /* */ + /* outline :: A pointer to the target outline descriptor. */ + /* */ + /* globals :: The hinter globals for this font. */ + /* */ + /* @return: */ + /* FreeType error code. 0 means success. */ + /* */ + /* @note: */ + /* On input, all points within the outline are in font coordinates. */ + /* On output, they are in 1/64th of pixels. */ + /* */ + /* The scaling transformation is taken from the "globals" object */ + /* which must correspond to the same font than the glyph. */ + /* */ + typedef FT_Error + (*T2_Hints_ApplyFunc)( T2_Hints hints, + FT_Outline* outline, + PSH_Globals globals ); + + + /*************************************************************************/ + /* */ + /* @struct: */ + /* T2_Hints_FuncsRec */ + /* */ + /* @description: */ + /* The structure used to provide the API to @T2_Hints objects. */ + /* */ + /* @fields: */ + /* hints :: A handle to the T2 hints recorder object. */ + /* */ + /* open :: The function to open a recording session. */ + /* */ + /* close :: The function to close a recording session. */ + /* */ + /* stems :: The function to set the dimension's stems table. */ + /* */ + /* hintmask :: The function to set hint masks. */ + /* */ + /* counter :: The function to set counter masks. */ + /* */ + /* apply :: The function to apply the hints on the corresponding */ + /* glyph outline. */ + /* */ + typedef struct T2_Hints_FuncsRec_ { T2_Hints hints; T2_Hints_OpenFunc open; @@ -510,20 +594,25 @@ FT_BEGIN_HEADER T2_Hints_MaskFunc hintmask; T2_Hints_CounterFunc counter; T2_Hints_ApplyFunc apply; - + } T2_Hints_FuncsRec; /* */ - - typedef struct PSHinter_Interface_ + + + typedef struct PSHinter_Interface_ { PSH_Globals_Funcs (*get_globals_funcs)( FT_Module module ); T1_Hints_Funcs (*get_t1_funcs) ( FT_Module module ); T2_Hints_Funcs (*get_t2_funcs) ( FT_Module module ); - + } PSHinter_Interface, *PSHinter_InterfacePtr; + FT_END_HEADER #endif /* __PSHINTS_H__ */ + + +/* END */ |