nuclear@0: /***************************************************************************/ nuclear@0: /* */ nuclear@0: /* ftgloadr.h */ nuclear@0: /* */ nuclear@0: /* The FreeType glyph loader (specification). */ nuclear@0: /* */ nuclear@0: /* Copyright 2002, 2003, 2005, 2006 by */ nuclear@0: /* David Turner, Robert Wilhelm, and Werner Lemberg */ nuclear@0: /* */ nuclear@0: /* This file is part of the FreeType project, and may only be used, */ nuclear@0: /* modified, and distributed under the terms of the FreeType project */ nuclear@0: /* license, LICENSE.TXT. By continuing to use, modify, or distribute */ nuclear@0: /* this file you indicate that you have read the license and */ nuclear@0: /* understand and accept it fully. */ nuclear@0: /* */ nuclear@0: /***************************************************************************/ nuclear@0: nuclear@0: nuclear@0: #ifndef __FTGLOADR_H__ nuclear@0: #define __FTGLOADR_H__ nuclear@0: nuclear@0: nuclear@0: #include nuclear@0: #include FT_FREETYPE_H nuclear@0: nuclear@0: nuclear@0: FT_BEGIN_HEADER nuclear@0: nuclear@0: nuclear@0: /*************************************************************************/ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* FT_GlyphLoader */ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* The glyph loader is an internal object used to load several glyphs */ nuclear@0: /* together (for example, in the case of composites). */ nuclear@0: /* */ nuclear@0: /* */ nuclear@0: /* The glyph loader implementation is not part of the high-level API, */ nuclear@0: /* hence the forward structure declaration. */ nuclear@0: /* */ nuclear@0: typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ; nuclear@0: nuclear@0: nuclear@0: #if 0 /* moved to freetype.h in version 2.2 */ nuclear@0: #define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 nuclear@0: #define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 nuclear@0: #define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 nuclear@0: #define FT_SUBGLYPH_FLAG_SCALE 8 nuclear@0: #define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 nuclear@0: #define FT_SUBGLYPH_FLAG_2X2 0x80 nuclear@0: #define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 nuclear@0: #endif nuclear@0: nuclear@0: nuclear@0: typedef struct FT_SubGlyphRec_ nuclear@0: { nuclear@0: FT_Int index; nuclear@0: FT_UShort flags; nuclear@0: FT_Int arg1; nuclear@0: FT_Int arg2; nuclear@0: FT_Matrix transform; nuclear@0: nuclear@0: } FT_SubGlyphRec; nuclear@0: nuclear@0: nuclear@0: typedef struct FT_GlyphLoadRec_ nuclear@0: { nuclear@0: FT_Outline outline; /* outline */ nuclear@0: FT_Vector* extra_points; /* extra points table */ nuclear@0: FT_Vector* extra_points2; /* second extra points table */ nuclear@0: FT_UInt num_subglyphs; /* number of subglyphs */ nuclear@0: FT_SubGlyph subglyphs; /* subglyphs */ nuclear@0: nuclear@0: } FT_GlyphLoadRec, *FT_GlyphLoad; nuclear@0: nuclear@0: nuclear@0: typedef struct FT_GlyphLoaderRec_ nuclear@0: { nuclear@0: FT_Memory memory; nuclear@0: FT_UInt max_points; nuclear@0: FT_UInt max_contours; nuclear@0: FT_UInt max_subglyphs; nuclear@0: FT_Bool use_extra; nuclear@0: nuclear@0: FT_GlyphLoadRec base; nuclear@0: FT_GlyphLoadRec current; nuclear@0: nuclear@0: void* other; /* for possible future extension? */ nuclear@0: nuclear@0: } FT_GlyphLoaderRec; nuclear@0: nuclear@0: nuclear@0: /* create new empty glyph loader */ nuclear@0: FT_BASE( FT_Error ) nuclear@0: FT_GlyphLoader_New( FT_Memory memory, nuclear@0: FT_GlyphLoader *aloader ); nuclear@0: nuclear@0: /* add an extra points table to a glyph loader */ nuclear@0: FT_BASE( FT_Error ) nuclear@0: FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* destroy a glyph loader */ nuclear@0: FT_BASE( void ) nuclear@0: FT_GlyphLoader_Done( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* reset a glyph loader (frees everything int it) */ nuclear@0: FT_BASE( void ) nuclear@0: FT_GlyphLoader_Reset( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* rewind a glyph loader */ nuclear@0: FT_BASE( void ) nuclear@0: FT_GlyphLoader_Rewind( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* check that there is enough space to add `n_points' and `n_contours' */ nuclear@0: /* to the glyph loader */ nuclear@0: FT_BASE( FT_Error ) nuclear@0: FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, nuclear@0: FT_UInt n_points, nuclear@0: FT_UInt n_contours ); nuclear@0: nuclear@0: nuclear@0: #define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \ nuclear@0: ( (_count) == 0 || ((_loader)->base.outline.n_points + \ nuclear@0: (_loader)->current.outline.n_points + \ nuclear@0: (unsigned long)(_count)) <= (_loader)->max_points ) nuclear@0: nuclear@0: #define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \ nuclear@0: ( (_count) == 0 || ((_loader)->base.outline.n_contours + \ nuclear@0: (_loader)->current.outline.n_contours + \ nuclear@0: (unsigned long)(_count)) <= (_loader)->max_contours ) nuclear@0: nuclear@0: #define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours ) \ nuclear@0: ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \ nuclear@0: FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \ nuclear@0: ? 0 \ nuclear@0: : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) ) nuclear@0: nuclear@0: nuclear@0: /* check that there is enough space to add `n_subs' sub-glyphs to */ nuclear@0: /* a glyph loader */ nuclear@0: FT_BASE( FT_Error ) nuclear@0: FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader, nuclear@0: FT_UInt n_subs ); nuclear@0: nuclear@0: /* prepare a glyph loader, i.e. empty the current glyph */ nuclear@0: FT_BASE( void ) nuclear@0: FT_GlyphLoader_Prepare( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* add the current glyph to the base glyph */ nuclear@0: FT_BASE( void ) nuclear@0: FT_GlyphLoader_Add( FT_GlyphLoader loader ); nuclear@0: nuclear@0: /* copy points from one glyph loader to another */ nuclear@0: FT_BASE( FT_Error ) nuclear@0: FT_GlyphLoader_CopyPoints( FT_GlyphLoader target, nuclear@0: FT_GlyphLoader source ); nuclear@0: nuclear@0: /* */ nuclear@0: nuclear@0: nuclear@0: FT_END_HEADER nuclear@0: nuclear@0: #endif /* __FTGLOADR_H__ */ nuclear@0: nuclear@0: nuclear@0: /* END */