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