| /******************************************************************* |
| * |
| * t1hinter.h 1.2 |
| * |
| * Type1 hinter. |
| * |
| * Copyright 1996-1999 by |
| * David Turner, Robert Wilhelm, and Werner Lemberg. |
| * |
| * This file is part of the FreeType project, and may only be used |
| * modified and distributed under the terms of the FreeType project |
| * license, LICENSE.TXT. By continuing to use, modify, or distribute |
| * this file you indicate that you have read the license and |
| * understand and accept it fully. |
| * |
| * |
| * The Hinter is in charge of fitting th scaled outline to the |
| * pixel grid in order to considerably improve the quality of |
| * the Type 1 font driver's output.. |
| * |
| ******************************************************************/ |
| |
| #ifndef T1HINTER_H |
| #define T1HINTER_H |
| |
| #include <t1objs.h> |
| #include <t1gload.h> |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Snap_Zone |
| * |
| * <Description> |
| * A "snap zone" is used to model either a blue zone or a stem width |
| * at a given character size. It is made of a minimum and maximum |
| * edge, defined in 26.6 pixels, as well as one "original" and |
| * "scaled" position. |
| * |
| * the position corresponds to the stem width (for stem snap zones) |
| * or to the blue position (for blue zones) |
| * |
| * <Fields> |
| * orus :: original position in font units |
| * pix :: current position in sub-pixel units |
| * min :: minimum boundary in sub-pixel units |
| * max :: maximim boundary in sub-pixel units |
| * |
| ************************************************************************/ |
| |
| typedef struct T1_Snap_Zone_ |
| { |
| T1_Pos orus; |
| T1_Pos pix; |
| T1_Pos min; |
| T1_Pos max; |
| |
| } T1_Snap_Zone; |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Edge |
| * |
| * <Description> |
| * A very simply structure used to model an stem edge |
| * |
| * <Fields> |
| * orus :: original edge position in font units |
| * pix :: scaled edge position in sub-pixel units |
| * |
| ************************************************************************/ |
| |
| typedef struct T1_Edge_ |
| { |
| T1_Pos orus; |
| T1_Pos pix; |
| |
| } T1_Edge; |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Stem_Hint |
| * |
| * <Description> |
| * A simple structure used to model a stem hint |
| * |
| * <Fields> |
| * min_edge :: the hint's minimum edge |
| * max_edge :: the hint's maximum edge |
| * hint_flags :: some flags describing the stem properties |
| * |
| * <Note> |
| * the min and max edges of a ghost stem have the same position, |
| * even if they're coded in a weird way in the charstrings |
| * |
| ************************************************************************/ |
| |
| typedef struct T1_Stem_Hint_ |
| { |
| T1_Edge min_edge; |
| T1_Edge max_edge; |
| T1_Int hint_flags; |
| |
| } T1_Stem_Hint; |
| |
| |
| #define T1_HINT_FLAG_ACTIVE 1 /* indicates an active stem */ |
| #define T1_HINT_FLAG_MIN_BORDER 2 /* unused for now.. */ |
| #define T1_HINT_FLAG_MAX_BORDER 4 /* unused for now.. */ |
| |
| |
| /* hinter's configuration constants */ |
| #define T1_HINTER_MAX_BLUES 24 /* maximum number of blue zones */ |
| #define T1_HINTER_MAX_SNAPS 16 /* maximum number of stem snap zones */ |
| #define T1_HINTER_MAX_EDGES 64 /* maximum number of stem hints */ |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Size_Hints |
| * |
| * <Description> |
| * A structure used to model the hinting information related to |
| * a size object |
| * |
| * <Fields> |
| * supress_overshoots :: a boolean flag to tell when overshoot |
| * supression should occur. |
| * |
| * num_blue_zones :: the total number of blue zones (top+bottom) |
| * num_bottom_zones :: the number of bottom zones |
| * |
| * blue_zones :: the blue zones table. bottom zones are |
| * stored first in the table, followed by |
| * all top zones |
| * |
| * num_stem_snapH :: number of horizontal stem snap zones |
| * stem_snapH :: horizontal stem snap zones |
| * |
| * num_stem_snapV :: number of vertical stem snap zones |
| * stem_snapV :: vertical stem snap zones |
| * |
| ************************************************************************/ |
| |
| struct T1_Size_Hints_ |
| { |
| T1_Bool supress_overshoots; |
| |
| T1_Int num_blue_zones; |
| T1_Int num_bottom_zones; |
| T1_Snap_Zone blue_zones[ T1_HINTER_MAX_BLUES ]; |
| |
| T1_Int num_snap_widths; |
| T1_Snap_Zone snap_widths[ T1_HINTER_MAX_SNAPS ]; |
| |
| T1_Int num_snap_heights; |
| T1_Snap_Zone snap_heights[ T1_HINTER_MAX_SNAPS ]; |
| }; |
| |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Stem_Table |
| * |
| * <Description> |
| * A simple structure used to model a set of stem hints in a |
| * single direction during the loading of a given glyph outline. |
| * Not all stem hints are active at a time. Moreover, stems must |
| * be sorted regularly |
| * |
| * <Fields> |
| * num_stems :: total number of stems in table |
| * num_active :: number of active stems in table |
| * |
| * stems :: the table of all stems |
| * sort :: a table of indices into the stems table, used |
| * to keep a sorted list of the active stems |
| * |
| ************************************************************************/ |
| |
| typedef struct T1_Stem_Table_ |
| { |
| T1_Int num_stems; |
| T1_Int num_active; |
| |
| T1_Stem_Hint stems[ T1_HINTER_MAX_EDGES ]; |
| T1_Int sort [ T1_HINTER_MAX_EDGES ]; |
| |
| } T1_Stem_Table; |
| |
| |
| |
| /************************************************************************ |
| * |
| * <Struct> |
| * T1_Glyph_Hints |
| * |
| * <Description> |
| * A structure used to model the stem hints of a given glyph outline |
| * during glyph loading. |
| * |
| * <Fields> |
| * hori_stems :: horizontal stem hints table |
| * vert_stems :: vertical stem hints table |
| * |
| ************************************************************************/ |
| |
| struct T1_Glyph_Hints_ |
| { |
| T1_Stem_Table hori_stems; |
| T1_Stem_Table vert_stems; |
| }; |
| |
| |
| |
| /************************************************************************ |
| * |
| * <Data> |
| * t1_hinter_funcs |
| * |
| * <Description> |
| * A table containing the address of various functions used during |
| * the loading of an hinted scaled outline |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| const T1_Hinter_Funcs t1_hinter_funcs; |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_New_Size_Hinter |
| * |
| * <Description> |
| * Allocates a new hinter structure for a given size object |
| * |
| * <Input> |
| * size :: handle to target size object |
| * |
| * <Return> |
| * Error code. 0 means success |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| T1_Error T1_New_Size_Hinter( T1_Size size ); |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_Done_Size_Hinter |
| * |
| * <Description> |
| * Releases a given size object's hinter structure |
| * |
| * <Input> |
| * size :: handle to target size object |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| void T1_Done_Size_Hinter( T1_Size size ); |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_Reset_Size_Hinter |
| * |
| * <Description> |
| * Recomputes hinting information when a given size object has |
| * changed its resolutions/char sizes/pixel sizes |
| * |
| * <Input> |
| * size :: handle to size object |
| * |
| * <Return> |
| * Error code. 0 means success |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| T1_Error T1_Reset_Size_Hinter( T1_Size size ); |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_New_Glyph_Hinter |
| * |
| * <Description> |
| * Allocates a new hinter structure for a given glyph slot |
| * |
| * <Input> |
| * glyph :: handle to target glyph slot |
| * |
| * <Return> |
| * Error code. 0 means success |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| T1_Error T1_New_Glyph_Hinter( T1_GlyphSlot glyph ); |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_Done_Glyph_Hinter |
| * |
| * <Description> |
| * Releases a given glyph slot's hinter structure |
| * |
| * <Input> |
| * glyph :: handle to glyph slot |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| void T1_Done_Glyph_Hinter( T1_GlyphSlot glyph ); |
| |
| |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_Hint_Points |
| * |
| * <Description> |
| * this function grid-fits several points in a given Type 1 builder |
| * at once. |
| * |
| * <Input> |
| * builder :: handle to target Type 1 builder |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| void T1_Hint_Points( T1_Builder* builder ); |
| |
| |
| /************************************************************************ |
| * |
| * <Function> |
| * T1_Hint_Stems |
| * |
| * <Description> |
| * This function is used to compute the location of each stem hint |
| * between the first and second passes of the glyph loader on the |
| * charstring. |
| * |
| * <Input> |
| * builder :: handle to target builder |
| * |
| ************************************************************************/ |
| |
| LOCAL_DEF |
| void T1_Hint_Stems( T1_Builder* builder ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif /* T1HINTER_H */ |