| /***************************************************************************/ |
| /* */ |
| /* t1hinter.h */ |
| /* */ |
| /* Type 1 hinter (body). */ |
| /* */ |
| /* Copyright 1996-2000 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. */ |
| /* */ |
| /***************************************************************************/ |
| |
| |
| #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 an `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 :: The original position in font units. */ |
| /* */ |
| /* pix :: The current position in sub-pixel units. */ |
| /* */ |
| /* min :: The minimum boundary in sub-pixel units. */ |
| /* */ |
| /* max :: The maximum boundary in sub-pixel units. */ |
| /* */ |
| typedef struct T1_Snap_Zone_ |
| { |
| FT_Pos orus; |
| FT_Pos pix; |
| FT_Pos min; |
| FT_Pos max; |
| |
| } T1_Snap_Zone; |
| |
| |
| /*************************************************************************/ |
| /* */ |
| /* <Struct> */ |
| /* T1_Edge */ |
| /* */ |
| /* <Description> */ |
| /* A very simple structure used to model a stem edge. */ |
| /* */ |
| /* <Fields> */ |
| /* orus :: The original edge position in font units. */ |
| /* */ |
| /* pix :: The scaled edge position in sub-pixel units. */ |
| /* */ |
| typedef struct T1_Edge_ |
| { |
| FT_Pos orus; |
| FT_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 are coded in a weird way in the charstrings. */ |
| /* */ |
| typedef struct T1_Stem_Hint_ |
| { |
| T1_Edge min_edge; |
| T1_Edge max_edge; |
| FT_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 whether 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_snap_widths :: The number of horizontal stem snap zones. */ |
| /* */ |
| /* snap_widths :: An array of horizontal stem snap zones. */ |
| /* */ |
| /* num_snap_heights :: The number of vertical stem snap zones. */ |
| /* */ |
| /* snap_heights :: An array of vertical stem snap zones. */ |
| /* */ |
| struct T1_Size_Hints_ |
| { |
| FT_Bool supress_overshoots; |
| |
| FT_Int num_blue_zones; |
| FT_Int num_bottom_zones; |
| T1_Snap_Zone blue_zones[T1_HINTER_MAX_BLUES]; |
| |
| FT_Int num_snap_widths; |
| T1_Snap_Zone snap_widths[T1_HINTER_MAX_SNAPS]; |
| |
| FT_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 :: The total number of stems in the table. */ |
| /* */ |
| /* num_active :: The number of active stems in the table. */ |
| /* */ |
| /* stems :: A 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_ |
| { |
| FT_Int num_stems; |
| FT_Int num_active; |
| |
| T1_Stem_Hint stems[T1_HINTER_MAX_EDGES]; |
| FT_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 :: The horizontal stem hints table. */ |
| /* vert_stems :: The 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; |
| |
| |
| LOCAL_DEF |
| FT_Error T1_New_Size_Hinter( T1_Size size ); |
| |
| LOCAL_DEF |
| void T1_Done_Size_Hinter( T1_Size size ); |
| |
| LOCAL_DEF |
| FT_Error T1_Reset_Size_Hinter( T1_Size size ); |
| |
| LOCAL_DEF |
| FT_Error T1_New_Glyph_Hinter( T1_GlyphSlot glyph ); |
| |
| LOCAL_DEF |
| void T1_Done_Glyph_Hinter( T1_GlyphSlot glyph ); |
| |
| |
| LOCAL_DEF |
| void T1_Hint_Points( T1_Builder* builder ); |
| |
| LOCAL_DEF |
| void T1_Hint_Stems( T1_Builder* builder ); |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* T1HINTER_H */ |
| |
| |
| /* END */ |