Use `Control_Type' to handle different segment directions.
[ttfautohint.git] / lib / tagloadr.h
blobbdcf1b201fbfa56bddbe367665bb84f8058c2008
1 /* tagloadr.h */
3 /*
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__
23 #include <ft2build.h>
24 #include FT_FREETYPE_H
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
31 typedef struct TA_SubGlyphRec_
33 FT_Int index;
34 FT_UShort flags;
36 FT_Int arg1;
37 FT_Int arg2;
39 FT_Matrix transform;
40 } TA_SubGlyphRec, *TA_SubGlyph;
43 typedef struct TA_GlyphLoadRec_
45 FT_Outline outline; /* outline */
47 FT_Vector* extra_points; /* extra points table */
48 FT_Vector* extra_points2; /* second extra points table */
50 FT_UInt num_subglyphs; /* number of subglyphs */
51 TA_SubGlyph subglyphs; /* subglyphs */
52 } TA_GlyphLoadRec, *TA_GlyphLoad;
55 typedef struct TA_GlyphLoaderRec_
57 FT_UInt max_points;
58 FT_UInt max_contours;
59 FT_UInt max_subglyphs;
60 FT_Bool use_extra;
62 TA_GlyphLoadRec base;
63 TA_GlyphLoadRec current;
64 } TA_GlyphLoaderRec, *TA_GlyphLoader;
67 /* create new empty glyph loader */
68 FT_Error
69 TA_GlyphLoader_New(TA_GlyphLoader *aloader);
71 /* add an extra points table to a glyph loader */
72 FT_Error
73 TA_GlyphLoader_CreateExtra(TA_GlyphLoader loader);
75 /* destroy a glyph loader */
76 void
77 TA_GlyphLoader_Done(TA_GlyphLoader loader);
79 /* reset a glyph loader (frees everything int it) */
80 void
81 TA_GlyphLoader_Reset(TA_GlyphLoader loader);
83 /* rewind a glyph loader */
84 void
85 TA_GlyphLoader_Rewind(TA_GlyphLoader loader);
87 /* check that there is enough space to add */
88 /* `n_points' and `n_contours' to the glyph loader */
89 FT_Error
90 TA_GlyphLoader_CheckPoints(TA_GlyphLoader loader,
91 FT_UInt n_points,
92 FT_UInt n_contours);
95 #define TA_GLYPHLOADER_CHECK_P(_loader, _count) \
96 ((_count) == 0 || ((_loader)->base.outline.n_points \
97 + (_loader)->current.outline.n_points \
98 + (unsigned long)(_count)) <= (_loader)->max_points)
100 #define TA_GLYPHLOADER_CHECK_C(_loader, _count) \
101 ((_count) == 0 || ((_loader)->base.outline.n_contours \
102 + (_loader)->current.outline.n_contours \
103 + (unsigned long)(_count)) <= (_loader)->max_contours)
105 #define TA_GLYPHLOADER_CHECK_POINTS(_loader, _points, _contours) \
106 ((TA_GLYPHLOADER_CHECK_P(_loader, _points) \
107 && TA_GLYPHLOADER_CHECK_C(_loader, _contours)) \
108 ? 0 \
109 : TA_GlyphLoader_CheckPoints((_loader), (_points), (_contours)))
112 /* check that there is enough space to add */
113 /* `n_subs' sub-glyphs to a glyph loader */
114 FT_Error
115 TA_GlyphLoader_CheckSubGlyphs(TA_GlyphLoader loader,
116 FT_UInt n_subs);
118 /* prepare a glyph loader, i.e. empty the current glyph */
119 void
120 TA_GlyphLoader_Prepare(TA_GlyphLoader loader);
122 /* add the current glyph to the base glyph */
123 void
124 TA_GlyphLoader_Add(TA_GlyphLoader loader);
126 /* copy points from one glyph loader to another */
127 FT_Error
128 TA_GlyphLoader_CopyPoints(TA_GlyphLoader target,
129 TA_GlyphLoader source);
131 #ifdef __cplusplus
133 #endif
135 #endif /* __TAGLOADR_H__ */
137 /* end of tagloadr.h */