[FREETYPE] Update to v2.6.3. CORE-10964
[reactos.git] / reactos / lib / 3rdparty / freetype / include / freetype / internal / ftgloadr.h
1 /***************************************************************************/
2 /* */
3 /* ftgloadr.h */
4 /* */
5 /* The FreeType glyph loader (specification). */
6 /* */
7 /* Copyright 2002-2016 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 typedef struct FT_SubGlyphRec_
40 {
41 FT_Int index;
42 FT_UShort flags;
43 FT_Int arg1;
44 FT_Int arg2;
45 FT_Matrix transform;
46
47 } FT_SubGlyphRec;
48
49
50 typedef struct FT_GlyphLoadRec_
51 {
52 FT_Outline outline; /* outline */
53 FT_Vector* extra_points; /* extra points table */
54 FT_Vector* extra_points2; /* second extra points table */
55 FT_UInt num_subglyphs; /* number of subglyphs */
56 FT_SubGlyph subglyphs; /* subglyphs */
57
58 } FT_GlyphLoadRec, *FT_GlyphLoad;
59
60
61 typedef struct FT_GlyphLoaderRec_
62 {
63 FT_Memory memory;
64 FT_UInt max_points;
65 FT_UInt max_contours;
66 FT_UInt max_subglyphs;
67 FT_Bool use_extra;
68
69 FT_GlyphLoadRec base;
70 FT_GlyphLoadRec current;
71
72 void* other; /* for possible future extension? */
73
74 } FT_GlyphLoaderRec, *FT_GlyphLoader;
75
76
77 /* create new empty glyph loader */
78 FT_BASE( FT_Error )
79 FT_GlyphLoader_New( FT_Memory memory,
80 FT_GlyphLoader *aloader );
81
82 /* add an extra points table to a glyph loader */
83 FT_BASE( FT_Error )
84 FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader );
85
86 /* destroy a glyph loader */
87 FT_BASE( void )
88 FT_GlyphLoader_Done( FT_GlyphLoader loader );
89
90 /* reset a glyph loader (frees everything int it) */
91 FT_BASE( void )
92 FT_GlyphLoader_Reset( FT_GlyphLoader loader );
93
94 /* rewind a glyph loader */
95 FT_BASE( void )
96 FT_GlyphLoader_Rewind( FT_GlyphLoader loader );
97
98 /* check that there is enough space to add `n_points' and `n_contours' */
99 /* to the glyph loader */
100 FT_BASE( FT_Error )
101 FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
102 FT_UInt n_points,
103 FT_UInt n_contours );
104
105
106 #define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \
107 ( (_count) == 0 || \
108 ( (FT_UInt)(_loader)->base.outline.n_points + \
109 (FT_UInt)(_loader)->current.outline.n_points + \
110 (FT_UInt)(_count) ) <= (_loader)->max_points )
111
112 #define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \
113 ( (_count) == 0 || \
114 ( (FT_UInt)(_loader)->base.outline.n_contours + \
115 (FT_UInt)(_loader)->current.outline.n_contours + \
116 (FT_UInt)(_count) ) <= (_loader)->max_contours )
117
118 #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \
119 ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
120 FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
121 ? 0 \
122 : FT_GlyphLoader_CheckPoints( (_loader), \
123 (FT_UInt)(_points), \
124 (FT_UInt)(_contours) ) )
125
126
127 /* check that there is enough space to add `n_subs' sub-glyphs to */
128 /* a glyph loader */
129 FT_BASE( FT_Error )
130 FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
131 FT_UInt n_subs );
132
133 /* prepare a glyph loader, i.e. empty the current glyph */
134 FT_BASE( void )
135 FT_GlyphLoader_Prepare( FT_GlyphLoader loader );
136
137 /* add the current glyph to the base glyph */
138 FT_BASE( void )
139 FT_GlyphLoader_Add( FT_GlyphLoader loader );
140
141 /* copy points from one glyph loader to another */
142 FT_BASE( FT_Error )
143 FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
144 FT_GlyphLoader source );
145
146 /* */
147
148
149 FT_END_HEADER
150
151 #endif /* FTGLOADR_H_ */
152
153
154 /* END */