/***************************************************************************/ /* */ /* 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 #ifdef FT_FLAT_COMPILE #include "t1objs.h" #include "t1gload.h" #else #include #include #endif #ifdef __cplusplus extern "C" { #endif /*************************************************************************/ /* */ /* */ /* T1_Snap_Zone */ /* */ /* */ /* 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). */ /* */ /* */ /* 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; /*************************************************************************/ /* */ /* */ /* T1_Edge */ /* */ /* */ /* A very simple structure used to model a stem edge. */ /* */ /* */ /* 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; /*************************************************************************/ /* */ /* */ /* T1_Stem_Hint */ /* */ /* */ /* A simple structure used to model a stem hint. */ /* */ /* */ /* min_edge :: The hint's minimum edge. */ /* */ /* max_edge :: The hint's maximum edge. */ /* */ /* hint_flags :: Some flags describing the stem properties. */ /* */ /* */ /* 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 */ /*************************************************************************/ /* */ /* */ /* T1_Size_Hints */ /* */ /* */ /* A structure used to model the hinting information related to a size */ /* object. */ /* */ /* */ /* 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]; }; /*************************************************************************/ /* */ /* */ /* T1_Stem_Table */ /* */ /* */ /* 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. */ /* */ /* */ /* 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; /*************************************************************************/ /* */ /* */ /* T1_Glyph_Hints */ /* */ /* */ /* A structure used to model the stem hints of a given glyph outline */ /* during glyph loading. */ /* */ /* */ /* 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; }; /*************************************************************************/ /* */ /* */ /* t1_hinter_funcs */ /* */ /* */ /* A table containing the address of various functions used during */ /* the loading of an hinted scaled outline. */ /* */ extern 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 */