ce4dc6c9cc6f719d8d044c9c54a4fb1bc966eafb
[reactos.git] / reactos / lib / 3rdparty / freetype / include / internal / ftgloadr.h
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 */