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