1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* ftgloadr.h */ 4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* The FreeType glyph loader (specification). */ 6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 7ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki/* Copyright 2002-2015 by */ 8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* David Turner, Robert Wilhelm, and Werner Lemberg */ 9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* This file is part of the FreeType project, and may only be used, */ 11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* modified, and distributed under the terms of the FreeType project */ 12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* this file you indicate that you have read the license and */ 14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* understand and accept it fully. */ 15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* */ 16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/ 17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __FTGLOADR_H__ 20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __FTGLOADR_H__ 21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h> 24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include FT_FREETYPE_H 25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER 28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Struct> */ 33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FT_GlyphLoader */ 34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The glyph loader is an internal object used to load several glyphs */ 37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* together (for example, in the case of composites). */ 38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Note> */ 40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* The glyph loader implementation is not part of the high-level API, */ 41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* hence the forward structure declaration. */ 42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct FT_GlyphLoaderRec_* FT_GlyphLoader ; 44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0 /* moved to freetype.h in version 2.2 */ 47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_ARGS_ARE_WORDS 1 48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_ARGS_ARE_XY_VALUES 2 49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_ROUND_XY_TO_GRID 4 50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_SCALE 8 51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_XY_SCALE 0x40 52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_2X2 0x80 53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_SUBGLYPH_FLAG_USE_MY_METRICS 0x200 54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif 55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct FT_SubGlyphRec_ 58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int index; 60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UShort flags; 61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int arg1; 62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int arg2; 63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Matrix transform; 64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } FT_SubGlyphRec; 66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct FT_GlyphLoadRec_ 69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 700a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Outline outline; /* outline */ 710a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_Vector* extra_points; /* extra points table */ 72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Vector* extra_points2; /* second extra points table */ 730a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_UInt num_subglyphs; /* number of subglyphs */ 740a9d06e2b5cf75c3d6ba958026bfdf4745f576d6The Android Open Source Project FT_SubGlyph subglyphs; /* subglyphs */ 75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } FT_GlyphLoadRec, *FT_GlyphLoad; 77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project typedef struct FT_GlyphLoaderRec_ 80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project { 81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Memory memory; 82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_points; 83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_contours; 84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt max_subglyphs; 85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool use_extra; 86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoadRec base; 88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoadRec current; 89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* other; /* for possible future extension? */ 91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } FT_GlyphLoaderRec; 93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* create new empty glyph loader */ 96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( FT_Error ) 97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_New( FT_Memory memory, 98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader *aloader ); 99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* add an extra points table to a glyph loader */ 101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( FT_Error ) 102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_CreateExtra( FT_GlyphLoader loader ); 103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* destroy a glyph loader */ 105049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( void ) 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_Done( FT_GlyphLoader loader ); 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* reset a glyph loader (frees everything int it) */ 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( void ) 110049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_Reset( FT_GlyphLoader loader ); 111049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 112049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* rewind a glyph loader */ 113049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( void ) 114049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_Rewind( FT_GlyphLoader loader ); 115049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 116049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check that there is enough space to add `n_points' and `n_contours' */ 117049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* to the glyph loader */ 118049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( FT_Error ) 119049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_CheckPoints( FT_GlyphLoader loader, 120049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt n_points, 121049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt n_contours ); 122049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 123049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 124ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define FT_GLYPHLOADER_CHECK_P( _loader, _count ) \ 125ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ( (_count) == 0 || \ 126ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ( (FT_UInt)(_loader)->base.outline.n_points + \ 127ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_loader)->current.outline.n_points + \ 128ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_count) ) <= (_loader)->max_points ) 129ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki 130ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define FT_GLYPHLOADER_CHECK_C( _loader, _count ) \ 131ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ( (_count) == 0 || \ 132ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ( (FT_UInt)(_loader)->base.outline.n_contours + \ 133ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_loader)->current.outline.n_contours + \ 134ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_count) ) <= (_loader)->max_contours ) 135ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki 136ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points, _contours ) \ 137ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points ) && \ 138ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki FT_GLYPHLOADER_CHECK_C( _loader, _contours ) ) \ 139ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki ? 0 \ 140ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki : FT_GlyphLoader_CheckPoints( (_loader), \ 141ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_points), \ 142ec62c527eb34ee4481a0153ceb42dfd35d7e1d26Makoto Onuki (FT_UInt)(_contours) ) ) 143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* check that there is enough space to add `n_subs' sub-glyphs to */ 146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* a glyph loader */ 147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( FT_Error ) 148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader loader, 149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_UInt n_subs ); 150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* prepare a glyph loader, i.e. empty the current glyph */ 152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( void ) 153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_Prepare( FT_GlyphLoader loader ); 154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* add the current glyph to the base glyph */ 156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( void ) 157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_Add( FT_GlyphLoader loader ); 158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* copy points from one glyph loader to another */ 160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_BASE( FT_Error ) 161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader_CopyPoints( FT_GlyphLoader target, 162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_GlyphLoader source ); 163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __FTGLOADR_H__ */ 170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 173