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/*                                                                         */
7049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  Copyright 2002, 2003, 2005, 2006 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
124295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_GLYPHLOADER_CHECK_P( _loader, _count )                         \
125295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner   ( (_count) == 0 || ((_loader)->base.outline.n_points    +              \
126295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner                       (_loader)->current.outline.n_points +              \
127295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner                       (unsigned long)(_count)) <= (_loader)->max_points )
128295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner
129295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner#define FT_GLYPHLOADER_CHECK_C( _loader, _count )                          \
130295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner  ( (_count) == 0 || ((_loader)->base.outline.n_contours    +              \
131295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner                      (_loader)->current.outline.n_contours +              \
132295ffce55e0198e7a9f7d46b33f5c2b4147bf821David 'Digit' Turner                      (unsigned long)(_count)) <= (_loader)->max_contours )
133049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
134049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define FT_GLYPHLOADER_CHECK_POINTS( _loader, _points,_contours )      \
135049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  ( ( FT_GLYPHLOADER_CHECK_P( _loader, _points )   &&                  \
136049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project      FT_GLYPHLOADER_CHECK_C( _loader, _contours ) )                   \
137049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    ? 0                                                                \
138049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    : FT_GlyphLoader_CheckPoints( (_loader), (_points), (_contours) ) )
139049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
140049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
141049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* check that there is enough space to add `n_subs' sub-glyphs to */
142049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* a glyph loader                                                 */
143049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_BASE( FT_Error )
144049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_GlyphLoader_CheckSubGlyphs( FT_GlyphLoader  loader,
145049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                 FT_UInt         n_subs );
146049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
147049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* prepare a glyph loader, i.e. empty the current glyph */
148049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_BASE( void )
149049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_GlyphLoader_Prepare( FT_GlyphLoader  loader );
150049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
151049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* add the current glyph to the base glyph */
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_BASE( void )
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_GlyphLoader_Add( FT_GlyphLoader  loader );
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* copy points from one glyph loader to another */
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_BASE( FT_Error )
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_GlyphLoader_CopyPoints( FT_GlyphLoader  target,
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                             FT_GlyphLoader  source );
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __FTGLOADR_H__ */
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
169