:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / subsys / win32k / freetype / src / type1 / t1hinter.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  t1hinter.h                                                             */
4 /*                                                                         */
5 /*    Type 1 hinter (body).                                                */
6 /*                                                                         */
7 /*  Copyright 1996-2000 by                                                 */
8 /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9 /*                                                                         */
10 /*  This file is part of the FreeType project, and may only be used,       */
11 /*  modified, and distributed under the terms of the FreeType project      */
12 /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13 /*  this file you indicate that you have read the license and              */
14 /*  understand and accept it fully.                                        */
15 /*                                                                         */
16 /***************************************************************************/
17
18
19 #ifndef T1HINTER_H
20 #define T1HINTER_H
21
22
23 #ifdef FT_FLAT_COMPILE
24
25 #include "t1objs.h"
26 #include "t1gload.h"
27
28 #else
29
30 #include <freetype/src/type1/t1objs.h>
31 #include <freetype/src/type1/t1gload.h>
32
33 #endif
34
35
36 #ifdef __cplusplus
37   extern "C" {
38 #endif
39
40
41   /*************************************************************************/
42   /*                                                                       */
43   /* <Struct>                                                              */
44   /*   T1_Snap_Zone                                                        */
45   /*                                                                       */
46   /* <Description>                                                         */
47   /*   A `snap zone' is used to model either a blue zone or a stem width   */
48   /*   at a given character size.  It is made of a minimum and maximum     */
49   /*   edge, defined in 26.6 pixels, as well as an `original' and          */
50   /*   `scaled' position.                                                  */
51   /*                                                                       */
52   /*   The position corresponds to the stem width (for stem snap zones)    */
53   /*   or to the blue position (for blue zones).                           */
54   /*                                                                       */
55   /* <Fields>                                                              */
56   /*   orus  :: The original position in font units.                       */
57   /*                                                                       */
58   /*   pix   :: The current position in sub-pixel units.                   */
59   /*                                                                       */
60   /*   min   :: The minimum boundary in sub-pixel units.                   */
61   /*                                                                       */
62   /*   max   :: The maximum boundary in sub-pixel units.                   */
63   /*                                                                       */
64   typedef struct  T1_Snap_Zone_
65   {
66     FT_Pos  orus;
67     FT_Pos  pix;
68     FT_Pos  min;
69     FT_Pos  max;
70
71   } T1_Snap_Zone;
72
73
74   /*************************************************************************/
75   /*                                                                       */
76   /* <Struct>                                                              */
77   /*   T1_Edge                                                             */
78   /*                                                                       */
79   /* <Description>                                                         */
80   /*   A very simple structure used to model a stem edge.                  */
81   /*                                                                       */
82   /* <Fields>                                                              */
83   /*   orus  :: The original edge position in font units.                  */
84   /*                                                                       */
85   /*   pix   :: The scaled edge position in sub-pixel units.               */
86   /*                                                                       */
87   typedef struct  T1_Edge_
88   {
89     FT_Pos  orus;
90     FT_Pos  pix;
91
92   } T1_Edge;
93
94
95   /*************************************************************************/
96   /*                                                                       */
97   /* <Struct>                                                              */
98   /*    T1_Stem_Hint                                                       */
99   /*                                                                       */
100   /* <Description>                                                         */
101   /*    A simple structure used to model a stem hint.                      */
102   /*                                                                       */
103   /* <Fields>                                                              */
104   /*    min_edge   :: The hint's minimum edge.                             */
105   /*                                                                       */
106   /*    max_edge   :: The hint's maximum edge.                             */
107   /*                                                                       */
108   /*    hint_flags :: Some flags describing the stem properties.           */
109   /*                                                                       */
110   /* <Note>                                                                */
111   /*    The min and max edges of a ghost stem have the same position, even */
112   /*    if they are coded in a weird way in the charstrings.               */
113   /*                                                                       */
114   typedef struct  T1_Stem_Hint_
115   {
116     T1_Edge  min_edge;
117     T1_Edge  max_edge;
118     FT_Int   hint_flags;
119
120   } T1_Stem_Hint;
121
122
123 #define T1_HINT_FLAG_ACTIVE      1    /* indicates an active stem */
124 #define T1_HINT_FLAG_MIN_BORDER  2    /* unused for now           */
125 #define T1_HINT_FLAG_MAX_BORDER  4    /* unused for now           */
126
127   /* hinter's configuration constants */
128 #define T1_HINTER_MAX_BLUES  24    /* maximum number of blue zones      */
129 #define T1_HINTER_MAX_SNAPS  16    /* maximum number of stem snap zones */
130 #define T1_HINTER_MAX_EDGES  64    /* maximum number of stem hints      */
131
132
133   /*************************************************************************/
134   /*                                                                       */
135   /* <Struct>                                                              */
136   /*   T1_Size_Hints                                                       */
137   /*                                                                       */
138   /* <Description>                                                         */
139   /*   A structure used to model the hinting information related to a size */
140   /*   object.                                                             */
141   /*                                                                       */
142   /* <Fields>                                                              */
143   /*   supress_overshoots :: A boolean flag to tell whether overshoot      */
144   /*                         supression should occur.                      */
145   /*                                                                       */
146   /*   num_blue_zones     :: The total number of blue zones (top+bottom).  */
147   /*                                                                       */
148   /*   num_bottom_zones   :: The number of bottom zones.                   */
149   /*                                                                       */
150   /*   blue_zones         :: The blue zones table.  Bottom zones are       */
151   /*                         stored first in the table, followed by all    */
152   /*                         top zones.                                    */
153   /*                                                                       */
154   /*   num_snap_widths    :: The number of horizontal stem snap zones.     */
155   /*                                                                       */
156   /*   snap_widths        :: An array of horizontal stem snap zones.       */
157   /*                                                                       */
158   /*   num_snap_heights   :: The number of vertical stem snap zones.       */
159   /*                                                                       */
160   /*   snap_heights       :: An array of vertical stem snap zones.         */
161   /*                                                                       */
162   struct  T1_Size_Hints_
163   {
164     FT_Bool       supress_overshoots;
165
166     FT_Int        num_blue_zones;
167     FT_Int        num_bottom_zones;
168     T1_Snap_Zone  blue_zones[T1_HINTER_MAX_BLUES];
169
170     FT_Int        num_snap_widths;
171     T1_Snap_Zone  snap_widths[T1_HINTER_MAX_SNAPS];
172
173     FT_Int        num_snap_heights;
174     T1_Snap_Zone  snap_heights[T1_HINTER_MAX_SNAPS];
175   };
176
177
178   /*************************************************************************/
179   /*                                                                       */
180   /* <Struct>                                                              */
181   /*    T1_Stem_Table                                                      */
182   /*                                                                       */
183   /* <Description>                                                         */
184   /*    A simple structure used to model a set of stem hints in a single   */
185   /*    direction during the loading of a given glyph outline.  Not all    */
186   /*    stem hints are active at a time.  Moreover, stems must be sorted   */
187   /*    regularly.                                                         */
188   /*                                                                       */
189   /* <Fields>                                                              */
190   /*    num_stems  :: The total number of stems in the table.              */
191   /*                                                                       */
192   /*    num_active :: The number of active stems in the table.             */
193   /*                                                                       */
194   /*    stems      :: A table of all stems.                                */
195   /*                                                                       */
196   /*    sort       :: A table of indices into the stems table, used to     */
197   /*                  keep a sorted list of the active stems.              */
198   /*                                                                       */
199   typedef struct  T1_Stem_Table_
200   {
201     FT_Int        num_stems;
202     FT_Int        num_active;
203
204     T1_Stem_Hint  stems[T1_HINTER_MAX_EDGES];
205     FT_Int        sort [T1_HINTER_MAX_EDGES];
206
207   } T1_Stem_Table;
208
209
210   /*************************************************************************/
211   /*                                                                       */
212   /* <Struct>                                                              */
213   /*   T1_Glyph_Hints                                                      */
214   /*                                                                       */
215   /* <Description>                                                         */
216   /*   A structure used to model the stem hints of a given glyph outline   */
217   /*   during glyph loading.                                               */
218   /*                                                                       */
219   /* <Fields>                                                              */
220   /*   hori_stems :: The horizontal stem hints table.                      */
221   /*   vert_stems :: The vertical stem hints table.                        */
222   /*                                                                       */
223   struct T1_Glyph_Hints_
224   {
225     T1_Stem_Table  hori_stems;
226     T1_Stem_Table  vert_stems;
227   };
228
229
230   /*************************************************************************/
231   /*                                                                       */
232   /* <Data>                                                                */
233   /*    t1_hinter_funcs                                                    */
234   /*                                                                       */
235   /* <Description>                                                         */
236   /*    A table containing the address of various functions used during    */
237   /*    the loading of an hinted scaled outline.                           */
238   /*                                                                       */
239   extern const T1_Hinter_Funcs  t1_hinter_funcs;
240
241
242   LOCAL_DEF
243   FT_Error  T1_New_Size_Hinter( T1_Size  size );
244
245   LOCAL_DEF
246   void  T1_Done_Size_Hinter( T1_Size  size );
247
248   LOCAL_DEF
249   FT_Error  T1_Reset_Size_Hinter( T1_Size  size );
250
251   LOCAL_DEF
252   FT_Error  T1_New_Glyph_Hinter( T1_GlyphSlot  glyph );
253
254   LOCAL_DEF
255   void T1_Done_Glyph_Hinter( T1_GlyphSlot  glyph );
256
257
258   LOCAL_DEF
259   void  T1_Hint_Points( T1_Builder*  builder );
260
261   LOCAL_DEF
262   void  T1_Hint_Stems( T1_Builder*  builder );
263
264
265 #ifdef __cplusplus
266   }
267 #endif
268
269
270 #endif /* T1HINTER_H */
271
272
273 /* END */