/***************************************************************************/ | |
/* */ | |
/* 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 */ |