1 /***************************************************************************/ |
|
2 /* */ |
|
3 /* ftgloadr.h */ |
|
4 /* */ |
|
5 /* The FreeType glyph loader (specification). */ |
|
6 /* */ |
|
7 /* Copyright 2002, 2003, 2005, 2006 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 __FTGLOADR_H__ |
|
20 #define __FTGLOADR_H__ |
|
21 |
|
22 |
|
23 #include <ft2build.h> |
|
24 #include FT_FREETYPE_H |
|
25 |
|
26 |
|
27 FT_BEGIN_HEADER |
|
28 |
|
29 |
|
30 /*************************************************************************/ |
|
31 /* */ |
|
32 /* <Struct> */ |
|
33 /* FT_GlyphLoader */ |
|
34 /* */ |
|
35 /* <Description> */ |
|
36 /* The glyph loader is an internal object used to load several glyphs */ |
|
37 /* together (for example, in the case of composites). */ |
|
38 /* */ |
|
39 /* <Note> */ |
|
40 /* The glyph loader implementation is not part of the high-level API, */ |
|
41 /* hence the forward structure declaration. */ |
|
42 /* */ |
|
43 typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ; |
|
44 |
|
45 |
|
46 #if 0 /* moved to freetype.h in version 2.2 */ |
|
47 #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 |
|
48 #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 |
|
49 #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 |
|
50 #define FT_SUBGLYPH_FLAG_SCALE 8 |
|
51 #define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 |
|
52 #define FT_SUBGLYPH_FLAG_2X2 0x80 |
|
53 #define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 |
|
54 #endif |
|
55 |
|
56 |
|
57 typedef struct FT_SubGlyphRec_ |
|
58 { |
|
59 FT_Int index; |
|
60 FT_UShort flags; |
|
61 FT_Int arg1; |
|
62 FT_Int arg2; |
|
63 FT_Matrix transform; |
|
64 |
|
65 } FT_SubGlyphRec; |
|
66 |
|
67 |
|
68 typedef struct FT_GlyphLoadRec_ |
|
69 { |
|
70 FT_Outline outline; /* outline */ |
|
71 FT_Vector* extra_points; /* extra points table */ |
|
72 FT_Vector* extra_points2; /* second extra points table */ |
|
73 FT_UInt num_subglyphs; /* number of subglyphs */ |
|
74 FT_SubGlyph subglyphs; /* subglyphs */ |
|
75 |
|
76 } FT_GlyphLoadRec, *FT_GlyphLoad; |
|
77 |
|
78 |
|
79 typedef struct FT_GlyphLoaderRec_ |
|
80 { |
|
81 FT_Memory memory; |
|
82 FT_UInt max_points; |
|
83 FT_UInt max_contours; |
|
84 FT_UInt max_subglyphs; |
|
85 FT_Bool use_extra; |
|
86 |
|
87 FT_GlyphLoadRec base; |
|
88 FT_GlyphLoadRec current; |
|
89 |
|
90 void* other; /* for possible future extension? */ |
|
91 |
|
92 } FT_GlyphLoaderRec; |
|
93 |
|
94 |
|
95 /* create new empty glyph loader */ |
|
96 FT_BASE( FT_Error ) |
|
97 FT_GlyphLoader_New( FT_Memory memory, |
|
98 FT_GlyphLoader *aloader ); |
|
99 |
|
100 /* add an extra points table to a glyph loader */ |
|
101 FT_BASE( FT_Error ) |
|
102 FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader ); |
|
103 |
|
104 /* destroy a glyph loader */ |
|
105 FT_BASE( void ) |
|
106 FT_GlyphLoader_Done( FT_GlyphLoader loader ); |
|
107 |
|
108 /* reset a glyph loader (frees everything int it) */ |
|
109 FT_BASE( void ) |
|
110 FT_GlyphLoader_Reset( FT_GlyphLoader loader ); |
|
111 |
|
112 /* rewind a glyph loader */ |
|
113 FT_BASE( void ) |
|
114 FT_GlyphLoader_Rewind( FT_GlyphLoader loader ); |
|
115 |
|
116 /* check that there is enough space to add `n_points' and `n_contours' */ |
|
117 /* to the glyph loader */ |
|
118 FT_BASE( FT_Error ) |
|
119 FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, |
|
120 FT_UInt n_points, |
|
121 FT_UInt n_contours ); |
|
122 |
|
123 |
|
124 #define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \ |
|
125 ( (_count) == 0 || ((_loader)->base.outline.n_points + \ |
|
126 (_loader)->current.outline.n_points + \ |
|
127 (unsigned long)(_count)) <= (_loader)->max_points ) |
|
128 |
|
129 #define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \ |
|
130 ( (_count) == 0 || ((_loader)->base.outline.n_contours + \ |
|
131 (_loader)->current.outline.n_contours + \ |
|
132 (unsigned long)(_count)) <= (_loader)->max_contours ) |
|
133 |
|
134 #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours ) \ |
|
135 ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \ |
|
136 FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \ |
|
137 ? 0 \ |
|
138 : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) ) |
|
139 |
|
140 |
|
141 /* check that there is enough space to add `n_subs' sub-glyphs to */ |
|
142 /* a glyph loader */ |
|
143 FT_BASE( FT_Error ) |
|
144 FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader, |
|
145 FT_UInt n_subs ); |
|
146 |
|
147 /* prepare a glyph loader, i.e. empty the current glyph */ |
|
148 FT_BASE( void ) |
|
149 FT_GlyphLoader_Prepare( FT_GlyphLoader loader ); |
|
150 |
|
151 /* add the current glyph to the base glyph */ |
|
152 FT_BASE( void ) |
|
153 FT_GlyphLoader_Add( FT_GlyphLoader loader ); |
|
154 |
|
155 /* copy points from one glyph loader to another */ |
|
156 FT_BASE( FT_Error ) |
|
157 FT_GlyphLoader_CopyPoints( FT_GlyphLoader target, |
|
158 FT_GlyphLoader source ); |
|
159 |
|
160 /* */ |
|
161 |
|
162 |
|
163 FT_END_HEADER |
|
164 |
|
165 #endif /* __FTGLOADR_H__ */ |
|
166 |
|
167 |
|
168 /* END */ |
|