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