xref: /inferno-os/include/freetype/internal/ftgloadr.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /***************************************************************************/
2*37da2899SCharles.Forsyth /*                                                                         */
3*37da2899SCharles.Forsyth /*  ftgloadr.h                                                             */
4*37da2899SCharles.Forsyth /*                                                                         */
5*37da2899SCharles.Forsyth /*    The FreeType glyph loader (specification).                           */
6*37da2899SCharles.Forsyth /*                                                                         */
7*37da2899SCharles.Forsyth /*  Copyright 2002 by                                                      */
8*37da2899SCharles.Forsyth /*  David Turner, Robert Wilhelm, and Werner Lemberg                       */
9*37da2899SCharles.Forsyth /*                                                                         */
10*37da2899SCharles.Forsyth /*  This file is part of the FreeType project, and may only be used,       */
11*37da2899SCharles.Forsyth /*  modified, and distributed under the terms of the FreeType project      */
12*37da2899SCharles.Forsyth /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13*37da2899SCharles.Forsyth /*  this file you indicate that you have read the license and              */
14*37da2899SCharles.Forsyth /*  understand and accept it fully.                                        */
15*37da2899SCharles.Forsyth /*                                                                         */
16*37da2899SCharles.Forsyth /***************************************************************************/
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth 
19*37da2899SCharles.Forsyth #ifndef __FTGLOADR_H__
20*37da2899SCharles.Forsyth #define __FTGLOADR_H__
21*37da2899SCharles.Forsyth 
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth #include <ft2build.h>
24*37da2899SCharles.Forsyth #include FT_FREETYPE_H
25*37da2899SCharles.Forsyth 
26*37da2899SCharles.Forsyth 
27*37da2899SCharles.Forsyth FT_BEGIN_HEADER
28*37da2899SCharles.Forsyth 
29*37da2899SCharles.Forsyth 
30*37da2899SCharles.Forsyth   /*************************************************************************/
31*37da2899SCharles.Forsyth   /*                                                                       */
32*37da2899SCharles.Forsyth   /* <Struct>                                                              */
33*37da2899SCharles.Forsyth   /*    FT_GlyphLoader                                                     */
34*37da2899SCharles.Forsyth   /*                                                                       */
35*37da2899SCharles.Forsyth   /* <Description>                                                         */
36*37da2899SCharles.Forsyth   /*    The glyph loader is an internal object used to load several glyphs */
37*37da2899SCharles.Forsyth   /*    together (for example, in the case of composites).                 */
38*37da2899SCharles.Forsyth   /*                                                                       */
39*37da2899SCharles.Forsyth   /* <Note>                                                                */
40*37da2899SCharles.Forsyth   /*    The glyph loader implementation is not part of the high-level API, */
41*37da2899SCharles.Forsyth   /*    hence the forward structure declaration.                           */
42*37da2899SCharles.Forsyth   /*                                                                       */
43*37da2899SCharles.Forsyth   typedef struct FT_GlyphLoaderRec_*  FT_GlyphLoader ;
44*37da2899SCharles.Forsyth 
45*37da2899SCharles.Forsyth 
46*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS          1
47*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES      2
48*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID        4
49*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_SCALE                   8
50*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_XY_SCALE             0x40
51*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_2X2                  0x80
52*37da2899SCharles.Forsyth #define FT_SUBGLYPH_FLAG_USE_MY_METRICS      0x200
53*37da2899SCharles.Forsyth 
54*37da2899SCharles.Forsyth 
55*37da2899SCharles.Forsyth   enum
56*37da2899SCharles.Forsyth   {
57*37da2899SCharles.Forsyth     FT_GLYPH_OWN_BITMAP = 1
58*37da2899SCharles.Forsyth   };
59*37da2899SCharles.Forsyth 
60*37da2899SCharles.Forsyth 
61*37da2899SCharles.Forsyth   typedef struct  FT_SubGlyphRec_
62*37da2899SCharles.Forsyth   {
63*37da2899SCharles.Forsyth     FT_Int     index;
64*37da2899SCharles.Forsyth     FT_UShort  flags;
65*37da2899SCharles.Forsyth     FT_Int     arg1;
66*37da2899SCharles.Forsyth     FT_Int     arg2;
67*37da2899SCharles.Forsyth     FT_Matrix  transform;
68*37da2899SCharles.Forsyth 
69*37da2899SCharles.Forsyth   } FT_SubGlyphRec;
70*37da2899SCharles.Forsyth 
71*37da2899SCharles.Forsyth 
72*37da2899SCharles.Forsyth   typedef struct  FT_GlyphLoadRec_
73*37da2899SCharles.Forsyth   {
74*37da2899SCharles.Forsyth     FT_Outline   outline;       /* outline             */
75*37da2899SCharles.Forsyth     FT_Vector*   extra_points;  /* extra points table  */
76*37da2899SCharles.Forsyth     FT_UInt      num_subglyphs; /* number of subglyphs */
77*37da2899SCharles.Forsyth     FT_SubGlyph  subglyphs;     /* subglyphs           */
78*37da2899SCharles.Forsyth 
79*37da2899SCharles.Forsyth   } FT_GlyphLoadRec, *FT_GlyphLoad;
80*37da2899SCharles.Forsyth 
81*37da2899SCharles.Forsyth 
82*37da2899SCharles.Forsyth   typedef struct  FT_GlyphLoaderRec_
83*37da2899SCharles.Forsyth   {
84*37da2899SCharles.Forsyth     FT_Memory        memory;
85*37da2899SCharles.Forsyth     FT_UInt          max_points;
86*37da2899SCharles.Forsyth     FT_UInt          max_contours;
87*37da2899SCharles.Forsyth     FT_UInt          max_subglyphs;
88*37da2899SCharles.Forsyth     FT_Bool          use_extra;
89*37da2899SCharles.Forsyth 
90*37da2899SCharles.Forsyth     FT_GlyphLoadRec  base;
91*37da2899SCharles.Forsyth     FT_GlyphLoadRec  current;
92*37da2899SCharles.Forsyth 
93*37da2899SCharles.Forsyth     void*            other;            /* for possible future extension? */
94*37da2899SCharles.Forsyth 
95*37da2899SCharles.Forsyth   } FT_GlyphLoaderRec;
96*37da2899SCharles.Forsyth 
97*37da2899SCharles.Forsyth 
98*37da2899SCharles.Forsyth   /* create new empty glyph loader */
99*37da2899SCharles.Forsyth   FT_BASE( FT_Error )
100*37da2899SCharles.Forsyth   FT_GlyphLoader_New( FT_Memory        memory,
101*37da2899SCharles.Forsyth                       FT_GlyphLoader  *aloader );
102*37da2899SCharles.Forsyth 
103*37da2899SCharles.Forsyth   /* add an extra points table to a glyph loader */
104*37da2899SCharles.Forsyth   FT_BASE( FT_Error )
105*37da2899SCharles.Forsyth   FT_GlyphLoader_CreateExtra( FT_GlyphLoader  loader );
106*37da2899SCharles.Forsyth 
107*37da2899SCharles.Forsyth   /* destroy a glyph loader */
108*37da2899SCharles.Forsyth   FT_BASE( void )
109*37da2899SCharles.Forsyth   FT_GlyphLoader_Done( FT_GlyphLoader  loader );
110*37da2899SCharles.Forsyth 
111*37da2899SCharles.Forsyth   /* reset a glyph loader (frees everything int it) */
112*37da2899SCharles.Forsyth   FT_BASE( void )
113*37da2899SCharles.Forsyth   FT_GlyphLoader_Reset( FT_GlyphLoader  loader );
114*37da2899SCharles.Forsyth 
115*37da2899SCharles.Forsyth   /* rewind a glyph loader */
116*37da2899SCharles.Forsyth   FT_BASE( void )
117*37da2899SCharles.Forsyth   FT_GlyphLoader_Rewind( FT_GlyphLoader  loader );
118*37da2899SCharles.Forsyth 
119*37da2899SCharles.Forsyth   /* check that there is enough room to add 'n_points' and 'n_contours' */
120*37da2899SCharles.Forsyth   /* to the glyph loader                                                */
121*37da2899SCharles.Forsyth   FT_BASE( FT_Error )
122*37da2899SCharles.Forsyth   FT_GlyphLoader_CheckPoints( FT_GlyphLoader  loader,
123*37da2899SCharles.Forsyth                               FT_UInt         n_points,
124*37da2899SCharles.Forsyth                               FT_UInt         n_contours );
125*37da2899SCharles.Forsyth 
126*37da2899SCharles.Forsyth   /* check that there is enough room to add 'n_subs' sub-glyphs to */
127*37da2899SCharles.Forsyth   /* a glyph loader                                                */
128*37da2899SCharles.Forsyth   FT_BASE( FT_Error )
129*37da2899SCharles.Forsyth   FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader  loader,
130*37da2899SCharles.Forsyth                                  FT_UInt         n_subs );
131*37da2899SCharles.Forsyth 
132*37da2899SCharles.Forsyth   /* prepare a glyph loader, i.e. empty the current glyph */
133*37da2899SCharles.Forsyth   FT_BASE( void )
134*37da2899SCharles.Forsyth   FT_GlyphLoader_Prepare( FT_GlyphLoader  loader );
135*37da2899SCharles.Forsyth 
136*37da2899SCharles.Forsyth   /* add the current glyph to the base glyph */
137*37da2899SCharles.Forsyth   FT_BASE( void )
138*37da2899SCharles.Forsyth   FT_GlyphLoader_Add( FT_GlyphLoader  loader );
139*37da2899SCharles.Forsyth 
140*37da2899SCharles.Forsyth   /* copy points from one glyph loader to another */
141*37da2899SCharles.Forsyth   FT_BASE( FT_Error )
142*37da2899SCharles.Forsyth   FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
143*37da2899SCharles.Forsyth                              FT_GlyphLoader  source );
144*37da2899SCharles.Forsyth 
145*37da2899SCharles.Forsyth  /* */
146*37da2899SCharles.Forsyth 
147*37da2899SCharles.Forsyth 
148*37da2899SCharles.Forsyth FT_END_HEADER
149*37da2899SCharles.Forsyth 
150*37da2899SCharles.Forsyth #endif /* __FTGLOADR_H__ */
151*37da2899SCharles.Forsyth 
152*37da2899SCharles.Forsyth 
153*37da2899SCharles.Forsyth /* END */
154