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