4 * Copyright (C) 2011-2014 by Werner Lemberg.
6 * This file is part of the ttfautohint library, and may only be used,
7 * modified, and distributed under the terms given in `COPYING'. By
8 * continuing to use, modify, or distribute this file you indicate that you
9 * have read `COPYING' and understand and accept it fully.
11 * The file `COPYING' mentioned in the previous paragraph is distributed
12 * with the ttfautohint library.
16 /* originally file `ftgloadr.h' (2011-Mar-28) from FreeType */
18 /* heavily modified 2011 by Werner Lemberg <wl@gnu.org> */
20 #ifndef __TAGLOADR_H__
21 #define __TAGLOADR_H__
24 #include FT_FREETYPE_H
27 typedef struct TA_SubGlyphRec_
36 } TA_SubGlyphRec
, *TA_SubGlyph
;
39 typedef struct TA_GlyphLoadRec_
41 FT_Outline outline
; /* outline */
43 FT_Vector
* extra_points
; /* extra points table */
44 FT_Vector
* extra_points2
; /* second extra points table */
46 FT_UInt num_subglyphs
; /* number of subglyphs */
47 TA_SubGlyph subglyphs
; /* subglyphs */
48 } TA_GlyphLoadRec
, *TA_GlyphLoad
;
51 typedef struct TA_GlyphLoaderRec_
55 FT_UInt max_subglyphs
;
59 TA_GlyphLoadRec current
;
60 } TA_GlyphLoaderRec
, *TA_GlyphLoader
;
63 /* create new empty glyph loader */
65 TA_GlyphLoader_New(TA_GlyphLoader
*aloader
);
67 /* add an extra points table to a glyph loader */
69 TA_GlyphLoader_CreateExtra(TA_GlyphLoader loader
);
71 /* destroy a glyph loader */
73 TA_GlyphLoader_Done(TA_GlyphLoader loader
);
75 /* reset a glyph loader (frees everything int it) */
77 TA_GlyphLoader_Reset(TA_GlyphLoader loader
);
79 /* rewind a glyph loader */
81 TA_GlyphLoader_Rewind(TA_GlyphLoader loader
);
83 /* check that there is enough space to add */
84 /* `n_points' and `n_contours' to the glyph loader */
86 TA_GlyphLoader_CheckPoints(TA_GlyphLoader loader
,
91 #define TA_GLYPHLOADER_CHECK_P(_loader, _count) \
92 ((_count) == 0 || ((_loader)->base.outline.n_points \
93 + (_loader)->current.outline.n_points \
94 + (unsigned long)(_count)) <= (_loader)->max_points)
96 #define TA_GLYPHLOADER_CHECK_C(_loader, _count) \
97 ((_count) == 0 || ((_loader)->base.outline.n_contours \
98 + (_loader)->current.outline.n_contours \
99 + (unsigned long)(_count)) <= (_loader)->max_contours)
101 #define TA_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours) \
102 ((TA_GLYPHLOADER_CHECK_P(_loader, _points) \
103 && TA_GLYPHLOADER_CHECK_C(_loader, _contours)) \
105 : TA_GlyphLoader_CheckPoints((_loader), (_points), (_contours)))
108 /* check that there is enough space to add */
109 /* `n_subs' sub-glyphs to a glyph loader */
111 TA_GlyphLoader_CheckSubGlyphs(TA_GlyphLoader loader
,
114 /* prepare a glyph loader, i.e. empty the current glyph */
116 TA_GlyphLoader_Prepare(TA_GlyphLoader loader
);
118 /* add the current glyph to the base glyph */
120 TA_GlyphLoader_Add(TA_GlyphLoader loader
);
122 /* copy points from one glyph loader to another */
124 TA_GlyphLoader_CopyPoints(TA_GlyphLoader target
,
125 TA_GlyphLoader source
);
127 #endif /* __TAGLOADR_H__ */
129 /* end of tagloadr.h */