]>
Commit | Line | Data |
---|---|---|
cabec872 RR |
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 <type1/t1objs.h> | |
31 | #include <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 */ |