zenilib: zenilib/jni/external/freetype2/src/autofit/aftypes.h Source File

zenilib 0.5.3.0

- Main Page
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
aftypes.h
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* aftypes.h */
4 /* */
5 /* Auto-fitter types (specification only). */
6 /* */
7 /* Copyright 2003-2009, 2011 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 /*************************************************************************
20 *
21 * The auto-fitter is a complete rewrite of the old auto-hinter.
22 * Its main feature is the ability to differentiate between different
23 * scripts in order to apply language-specific rules.
24 *
25 * The code has also been compartmentized into several entities that
26 * should make algorithmic experimentation easier than with the old
27 * code.
28 *
29 * Finally, we get rid of the Catharon license, since this code is
30 * released under the FreeType one.
31 *
32 *************************************************************************/
33
34
35 #ifndef __AFTYPES_H__
36 #define __AFTYPES_H__
37
38 #include <ft2build.h>
39
40 #include FT_FREETYPE_H
41 #include FT_OUTLINE_H
42 #include FT_INTERNAL_OBJECTS_H
43 #include FT_INTERNAL_DEBUG_H
44
45
46 FT_BEGIN_HEADER
47
48 /*************************************************************************/
49 /*************************************************************************/
50 /***** *****/
51 /***** D E B U G G I N G *****/
52 /***** *****/
53 /*************************************************************************/
54 /*************************************************************************/
55
56 #ifdef FT_DEBUG_AUTOFIT
57
58 #include FT_CONFIG_STANDARD_LIBRARY_H
59
60 extern int _af_debug_disable_horz_hints;
61 extern int _af_debug_disable_vert_hints;
62 extern int _af_debug_disable_blue_hints;
63 extern void* _af_debug_hints;
64
65 #endif /* FT_DEBUG_AUTOFIT */
66
67
68 /*************************************************************************/
69 /*************************************************************************/
70 /***** *****/
71 /***** U T I L I T Y S T U F F *****/
72 /***** *****/
73 /*************************************************************************/
74 /*************************************************************************/
75
76 typedef struct AF_WidthRec_
77 {
78 FT_Pos org; /* original position/width in font units */
79 FT_Pos cur; /* current/scaled position/width in device sub-pixels */
80 FT_Pos fit; /* current/fitted position/width in device sub-pixels */
81
82 } AF_WidthRec, *AF_Width;
83
84
85 FT_LOCAL( void )
86 af_sort_pos( FT_UInt count,
87 FT_Pos* table );
88
89 FT_LOCAL( void )
90 af_sort_widths( FT_UInt count,
91 AF_Width widths );
92
93
94 /*************************************************************************/
95 /*************************************************************************/
96 /***** *****/
97 /***** A N G L E T Y P E S *****/
98 /***** *****/
99 /*************************************************************************/
100 /*************************************************************************/
101
102 /*
103 * The auto-fitter doesn't need a very high angular accuracy;
104 * this allows us to speed up some computations considerably with a
105 * light Cordic algorithm (see afangles.c).
106 */
107
108 typedef FT_Int AF_Angle;
109
110
111 #define AF_ANGLE_PI 256
112 #define AF_ANGLE_2PI ( AF_ANGLE_PI * 2 )
113 #define AF_ANGLE_PI2 ( AF_ANGLE_PI / 2 )
114 #define AF_ANGLE_PI4 ( AF_ANGLE_PI / 4 )
115
116
117 #if 0
118 /*
119 * compute the angle of a given 2-D vector
120 */
121 FT_LOCAL( AF_Angle )
122 af_angle_atan( FT_Pos dx,
123 FT_Pos dy );
124
125
126 /*
127 * compute `angle2 - angle1'; the result is always within
128 * the range [-AF_ANGLE_PI .. AF_ANGLE_PI - 1]
129 */
130 FT_LOCAL( AF_Angle )
131 af_angle_diff( AF_Angle angle1,
132 AF_Angle angle2 );
133 #endif /* 0 */
134
135
136 #define AF_ANGLE_DIFF( result, angle1, angle2 ) \
137 FT_BEGIN_STMNT \
138 AF_Angle _delta = (angle2) - (angle1); \
139 \
140 \
141 _delta %= AF_ANGLE_2PI; \
142 if ( _delta < 0 ) \
143 _delta += AF_ANGLE_2PI; \
144 \
145 if ( _delta > AF_ANGLE_PI ) \
146 _delta -= AF_ANGLE_2PI; \
147 \
148 result = _delta; \
149 FT_END_STMNT
150
151
152 /* opaque handle to glyph-specific hints -- see `afhints.h' for more
153 * details
154 */
155 typedef struct AF_GlyphHintsRec_* AF_GlyphHints;
156
157
158 /*************************************************************************/
159 /*************************************************************************/
160 /***** *****/
161 /***** S C A L E R S *****/
162 /***** *****/
163 /*************************************************************************/
164 /*************************************************************************/
165
166 /*
167 * A scaler models the target pixel device that will receive the
168 * auto-hinted glyph image.
169 */
170
171 typedef enum AF_ScalerFlags_
172 {
173 AF_SCALER_FLAG_NO_HORIZONTAL = 1, /* disable horizontal hinting */
174 AF_SCALER_FLAG_NO_VERTICAL = 2, /* disable vertical hinting */
175 AF_SCALER_FLAG_NO_ADVANCE = 4 /* disable advance hinting */
176
177 } AF_ScalerFlags;
178
179
180 typedef struct AF_ScalerRec_
181 {
182 FT_Face face; /* source font face */
183 FT_Fixed x_scale; /* from font units to 1/64th device pixels */
184 FT_Fixed y_scale; /* from font units to 1/64th device pixels */
185 FT_Pos x_delta; /* in 1/64th device pixels */
186 FT_Pos y_delta; /* in 1/64th device pixels */
187 FT_Render_Mode render_mode; /* monochrome, anti-aliased, LCD, etc. */
188 FT_UInt32 flags; /* additional control flags, see above */
189
190 } AF_ScalerRec, *AF_Scaler;
191
192
193 #define AF_SCALER_EQUAL_SCALES( a, b ) \
194 ( (a)->x_scale == (b)->x_scale && \
195 (a)->y_scale == (b)->y_scale && \
196 (a)->x_delta == (b)->x_delta && \
197 (a)->y_delta == (b)->y_delta )
198
199
200 /*************************************************************************/
201 /*************************************************************************/
202 /***** *****/
203 /***** S C R I P T S *****/
204 /***** *****/
205 /*************************************************************************/
206 /*************************************************************************/
207
208 /*
209 * The list of known scripts. Each different script corresponds to the
210 * following information:
211 *
212 * - A set of Unicode ranges to test whether the face supports the
213 * script.
214 *
215 * - A specific global analyzer that will compute global metrics
216 * specific to the script.
217 *
218 * - A specific glyph analyzer that will compute segments and
219 * edges for each glyph covered by the script.
220 *
221 * - A specific grid-fitting algorithm that will distort the
222 * scaled glyph outline according to the results of the glyph
223 * analyzer.
224 *
225 * Note that a given analyzer and/or grid-fitting algorithm can be
226 * used by more than one script.
227 */
228
229 typedef enum AF_Script_
230 {
231 AF_SCRIPT_NONE = 0,
232 AF_SCRIPT_LATIN = 1,
233 AF_SCRIPT_CJK = 2,
234 AF_SCRIPT_INDIC = 3,
235 #ifdef FT_OPTION_AUTOFIT2
236 AF_SCRIPT_LATIN2,
237 #endif
238
239 /* add new scripts here. Don't forget to update the list in */
240 /* `afglobal.c'. */
241
242 AF_SCRIPT_MAX /* do not remove */
243
244 } AF_Script;
245
246
247 typedef struct AF_ScriptClassRec_ const* AF_ScriptClass;
248
249 typedef struct AF_ScriptMetricsRec_
250 {
251 AF_ScriptClass clazz;
252 AF_ScalerRec scaler;
253 FT_Bool digits_have_same_width;
254
255 } AF_ScriptMetricsRec, *AF_ScriptMetrics;
256
257
258 /* This function parses an FT_Face to compute global metrics for
259 * a specific script.
260 */
261 typedef FT_Error
262 (*AF_Script_InitMetricsFunc)( AF_ScriptMetrics metrics,
263 FT_Face face );
264
265 typedef void
266 (*AF_Script_ScaleMetricsFunc)( AF_ScriptMetrics metrics,
267 AF_Scaler scaler );
268
269 typedef void
270 (*AF_Script_DoneMetricsFunc)( AF_ScriptMetrics metrics );
271
272
273 typedef FT_Error
274 (*AF_Script_InitHintsFunc)( AF_GlyphHints hints,
275 AF_ScriptMetrics metrics );
276
277 typedef void
278 (*AF_Script_ApplyHintsFunc)( AF_GlyphHints hints,
279 FT_Outline* outline,
280 AF_ScriptMetrics metrics );
281
282
283 typedef struct AF_Script_UniRangeRec_
284 {
285 FT_UInt32 first;
286 FT_UInt32 last;
287
288 } AF_Script_UniRangeRec;
289
290 #define AF_UNIRANGE_REC( a, b ) { (FT_UInt32)(a), (FT_UInt32)(b) }
291
292 typedef const AF_Script_UniRangeRec *AF_Script_UniRange;
293
294
295 typedef struct AF_ScriptClassRec_
296 {
297 AF_Script script;
298 AF_Script_UniRange script_uni_ranges; /* last must be { 0, 0 } */
299
300 FT_Offset script_metrics_size;
301 AF_Script_InitMetricsFunc script_metrics_init;
302 AF_Script_ScaleMetricsFunc script_metrics_scale;
303 AF_Script_DoneMetricsFunc script_metrics_done;
304
305 AF_Script_InitHintsFunc script_hints_init;
306 AF_Script_ApplyHintsFunc script_hints_apply;
307
308 } AF_ScriptClassRec;
309
310
311 /* Declare and define vtables for classes */
312 #ifndef FT_CONFIG_OPTION_PIC
313
314 #define AF_DECLARE_SCRIPT_CLASS( script_class ) \
315 FT_CALLBACK_TABLE const AF_ScriptClassRec \
316 script_class;
317
318 #define AF_DEFINE_SCRIPT_CLASS( script_class, script_, ranges, m_size, \
319 m_init, m_scale, m_done, h_init, h_apply ) \
320 FT_CALLBACK_TABLE_DEF const AF_ScriptClassRec \
321 script_class = \
322 { \
323 script_, \
324 ranges, \
325 \
326 m_size, \
327 \
328 m_init, \
329 m_scale, \
330 m_done, \
331 \
332 h_init, \
333 h_apply \
334 };
335
336 #else /* FT_CONFIG_OPTION_PIC */
337
338 #define AF_DECLARE_SCRIPT_CLASS( script_class ) \
339 FT_LOCAL( void ) \
340 FT_Init_Class_##script_class( AF_ScriptClassRec* ac );
341
342 #define AF_DEFINE_SCRIPT_CLASS( script_class, script_, ranges, m_size, \
343 m_init, m_scale, m_done, h_init, h_apply ) \
344 FT_LOCAL_DEF( void ) \
345 FT_Init_Class_##script_class( AF_ScriptClassRec* ac ) \
346 { \
347 ac->script = script_; \
348 ac->script_uni_ranges = ranges; \
349 \
350 ac->script_metrics_size = m_size; \
351 \
352 ac->script_metrics_init = m_init; \
353 ac->script_metrics_scale = m_scale; \
354 ac->script_metrics_done = m_done; \
355 \
356 ac->script_hints_init = h_init; \
357 ac->script_hints_apply = h_apply; \
358 }
359
360 #endif /* FT_CONFIG_OPTION_PIC */
361
362
363 /* */
364
365 FT_END_HEADER
366
367 #endif /* __AFTYPES_H__ */
368
369
370 /* END */
AF_Script
enum AF_Script_ AF_Script
table
GLenum GLsizei GLenum GLenum const GLvoid * table
Definition: glew.h:4422
FT_Error
int FT_Error
Definition: fttypes.h:296
cordic.angle2
angle2
Definition: cordic.py:50
AF_ScriptMetricsRec
struct AF_ScriptMetricsRec_ AF_ScriptMetricsRec
FT_Pos
FT_BEGIN_HEADER typedef signed long FT_Pos
Definition: ftimage.h:59
AF_Script_ApplyHintsFunc
void(* AF_Script_ApplyHintsFunc)(AF_GlyphHints hints, FT_Outline *outline, AF_ScriptMetrics metrics)
Definition: aftypes.h:278
AF_ScriptMetricsRec_::digits_have_same_width
FT_Bool digits_have_same_width
Definition: aftypes.h:253
AF_ScriptClassRec_::script_metrics_scale
AF_Script_ScaleMetricsFunc script_metrics_scale
Definition: aftypes.h:302
void
GLvoid **typedef void(GLAPIENTRY *PFNGLGETVERTEXATTRIBDVPROC)(GLuint
Definition: glew.h:1824
AF_Script_UniRangeRec_::first
FT_UInt32 first
Definition: aftypes.h:285
FT_END_HEADER
#define FT_END_HEADER
Definition: ftheader.h:54
AF_GlyphHints
struct AF_GlyphHintsRec_ * AF_GlyphHints
Definition: aftypes.h:155
AF_ScriptClassRec_::script_metrics_init
AF_Script_InitMetricsFunc script_metrics_init
Definition: aftypes.h:301
FT_Int
signed int FT_Int
Definition: fttypes.h:216
AF_SCALER_FLAG_NO_HORIZONTAL
Definition: aftypes.h:173
AF_ScalerRec_::y_delta
FT_Pos y_delta
Definition: aftypes.h:186
FT_Render_Mode
enum FT_Render_Mode_ FT_Render_Mode
AF_ScalerRec_::x_delta
FT_Pos x_delta
Definition: aftypes.h:185
AF_Script_InitHintsFunc
FT_Error(* AF_Script_InitHintsFunc)(AF_GlyphHints hints, AF_ScriptMetrics metrics)
Definition: aftypes.h:274
metrics
GLuint GLsizei GLsizei GLfloat * metrics
Definition: glew.h:12394
AF_SCRIPT_LATIN
Definition: aftypes.h:232
FT_Outline_
Definition: ftimage.h:383
AF_SCRIPT_CJK
Definition: aftypes.h:233
af_sort_widths
af_sort_widths(FT_UInt count, AF_Width table)
Definition: afangles.c:270
AF_ScalerRec_::flags
FT_UInt32 flags
Definition: aftypes.h:188
AF_WidthRec_::cur
FT_Pos cur
Definition: aftypes.h:79
AF_ScriptClassRec_
Definition: aftypes.h:295
FT_Bool
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:104
AF_WidthRec_::org
FT_Pos org
Definition: aftypes.h:78
AF_ScriptClassRec_::script_metrics_size
FT_Offset script_metrics_size
Definition: aftypes.h:300
AF_ScriptClassRec_::script
AF_Script script
Definition: aftypes.h:297
AF_ScalerRec_
Definition: aftypes.h:180
FT_BEGIN_HEADER
#define FT_BEGIN_HEADER
Definition: ftheader.h:36
AF_ScriptMetricsRec_
Definition: aftypes.h:249
AF_ScriptMetrics
struct AF_ScriptMetricsRec_ * AF_ScriptMetrics
AF_Script_UniRange
const AF_Script_UniRangeRec * AF_Script_UniRange
Definition: aftypes.h:292
AF_Script_InitMetricsFunc
FT_Error(* AF_Script_InitMetricsFunc)(AF_ScriptMetrics metrics, FT_Face face)
Definition: aftypes.h:262
FT_LOCAL
#define FT_LOCAL(x)
Definition: ftconfig.h:466
AF_Script_UniRangeRec
struct AF_Script_UniRangeRec_ AF_Script_UniRangeRec
AF_ScriptClass
struct AF_ScriptClassRec_ const * AF_ScriptClass
Definition: aftypes.h:247
AF_ScriptMetricsRec_::scaler
AF_ScalerRec scaler
Definition: aftypes.h:252
AF_ScalerRec_::face
FT_Face face
Definition: aftypes.h:182
AF_ScalerRec_::x_scale
FT_Fixed x_scale
Definition: aftypes.h:183
AF_SCALER_FLAG_NO_VERTICAL
Definition: aftypes.h:174
AF_Script_UniRangeRec_::last
FT_UInt32 last
Definition: aftypes.h:286
FT_FaceRec_
Definition: freetype.h:912
AF_ScriptClassRec_::script_hints_init
AF_Script_InitHintsFunc script_hints_init
Definition: aftypes.h:305
AF_ScriptClassRec_::script_uni_ranges
AF_Script_UniRange script_uni_ranges
Definition: aftypes.h:298
count
GLint GLsizei count
Definition: gl2ext.h:1011
face
GLenum face
Definition: gl2ext.h:1490
AF_GlyphHintsRec_
Definition: afhints.h:331
AF_SCRIPT_NONE
Definition: aftypes.h:231
AF_ScriptClassRec_::script_metrics_done
AF_Script_DoneMetricsFunc script_metrics_done
Definition: aftypes.h:303
AF_ScalerRec_::y_scale
FT_Fixed y_scale
Definition: aftypes.h:184
AF_Angle
FT_Int AF_Angle
Definition: aftypes.h:108
AF_Script_ScaleMetricsFunc
void(* AF_Script_ScaleMetricsFunc)(AF_ScriptMetrics metrics, AF_Scaler scaler)
Definition: aftypes.h:266
AF_SCRIPT_MAX
Definition: aftypes.h:242
AF_SCALER_FLAG_NO_ADVANCE
Definition: aftypes.h:175
AF_ScalerFlags
enum AF_ScalerFlags_ AF_ScalerFlags
AF_WidthRec_::fit
FT_Pos fit
Definition: aftypes.h:80
AF_Scaler
struct AF_ScalerRec_ * AF_Scaler
const
#define const
Definition: zconf.h:91
ft2build.h
AF_Script_
AF_Script_
Definition: aftypes.h:229
FT_Fixed
signed long FT_Fixed
Definition: fttypes.h:284
AF_ScalerRec
struct AF_ScalerRec_ AF_ScalerRec
AF_Width
FT_BEGIN_HEADER struct AF_WidthRec_ * AF_Width
FT_UInt
unsigned int FT_UInt
Definition: fttypes.h:227
AF_ScriptClassRec_::script_hints_apply
AF_Script_ApplyHintsFunc script_hints_apply
Definition: aftypes.h:306
AF_ScriptClassRec
struct AF_ScriptClassRec_ AF_ScriptClassRec
AF_WidthRec_
Definition: aftypes.h:76
AF_WidthRec
FT_BEGIN_HEADER struct AF_WidthRec_ AF_WidthRec
AF_ScriptMetricsRec_::clazz
AF_ScriptClass clazz
Definition: aftypes.h:251
AF_Script_UniRangeRec_
Definition: aftypes.h:283
AF_ScalerRec_::render_mode
FT_Render_Mode render_mode
Definition: aftypes.h:187
AF_ScalerFlags_
AF_ScalerFlags_
Definition: aftypes.h:171
af_sort_pos
af_sort_pos(FT_UInt count, FT_Pos *table)
Definition: afangles.c:247
FT_Offset
size_t FT_Offset
Definition: fttypes.h:320
AF_SCRIPT_INDIC
Definition: aftypes.h:234
AF_Script_DoneMetricsFunc
void(* AF_Script_DoneMetricsFunc)(AF_ScriptMetrics metrics)
Definition: aftypes.h:270