1 /***************************************************************************/
5 /* The FreeType glyph loader (specification). */
7 /* Copyright 2002, 2003, 2005, 2006 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg */
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. */
16 /***************************************************************************/
19 #ifndef __FTGLOADR_H__
20 #define __FTGLOADR_H__
24 #include FT_FREETYPE_H
30 /*************************************************************************/
36 /* The glyph loader is an internal object used to load several glyphs */
37 /* together (for example, in the case of composites). */
40 /* The glyph loader implementation is not part of the high-level API, */
41 /* hence the forward structure declaration. */
43 typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ;
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
57 typedef struct FT_SubGlyphRec_
68 typedef struct FT_GlyphLoadRec_
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 */
76 } FT_GlyphLoadRec, *FT_GlyphLoad;
79 typedef struct FT_GlyphLoaderRec_
84 FT_UInt max_subglyphs;
88 FT_GlyphLoadRec current;
90 void* other; /* for possible future extension? */
95 /* create new empty glyph loader */
97 FT_GlyphLoader_New( FT_Memory memory,
98 FT_GlyphLoader *aloader );
100 /* add an extra points table to a glyph loader */
102 FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader );
104 /* destroy a glyph loader */
106 FT_GlyphLoader_Done( FT_GlyphLoader loader );
108 /* reset a glyph loader (frees everything int it) */
110 FT_GlyphLoader_Reset( FT_GlyphLoader loader );
112 /* rewind a glyph loader */
114 FT_GlyphLoader_Rewind( FT_GlyphLoader loader );
116 /* check that there is enough space to add `n_points' and `n_contours' */
117 /* to the glyph loader */
119 FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader,
121 FT_UInt n_contours );
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 )
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 )
134 #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours ) \
135 ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \
136 FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \
138 : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
141 /* check that there is enough space to add `n_subs' sub-glyphs to */
144 FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader,
147 /* prepare a glyph loader, i.e. empty the current glyph */
149 FT_GlyphLoader_Prepare( FT_GlyphLoader loader );
151 /* add the current glyph to the base glyph */
153 FT_GlyphLoader_Add( FT_GlyphLoader loader );
155 /* copy points from one glyph loader to another */
157 FT_GlyphLoader_CopyPoints( FT_GlyphLoader target,
158 FT_GlyphLoader source );
165 #endif /* __FTGLOADR_H__ */