ttgxvar.h revision ee451cb395940862dad63c85adfe8f2fd55e864c
1/***************************************************************************/
2/*                                                                         */
3/*  ttgxvar.h                                                              */
4/*                                                                         */
5/*    TrueType GX Font Variation loader (specification)                    */
6/*                                                                         */
7/*  Copyright 2004 by                                                      */
8/*  David Turner, Robert Wilhelm, Werner Lemberg and George Williams.      */
9/*                                                                         */
10/*  This file is part of the FreeType project, and may only be used,       */
11/*  modified, and distributed under the terms of the FreeType project      */
12/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13/*  this file you indicate that you have read the license and              */
14/*  understand and accept it fully.                                        */
15/*                                                                         */
16/***************************************************************************/
17
18
19#ifndef __TTGXVAR_H__
20#define __TTGXVAR_H__
21
22
23#include "../../include/ft2build.h"
24#include "ttobjs.h"
25
26
27FT_BEGIN_HEADER
28
29
30  /*************************************************************************/
31  /*                                                                       */
32  /* <Struct>                                                              */
33  /*    GX_AVarCorrespondenceRec                                           */
34  /*                                                                       */
35  /* <Description>                                                         */
36  /*    A data structure representing `shortFracCorrespondence' in `avar'  */
37  /*    table according to the specifications from Apple.                  */
38  /*                                                                       */
39  typedef struct  GX_AVarCorrespondenceRec_
40  {
41    FT_Fixed  fromCoord;
42    FT_Fixed  toCoord;
43
44  } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence;
45
46
47  /*************************************************************************/
48  /*                                                                       */
49  /* <Struct>                                                              */
50  /*    GX_AVarRec                                                         */
51  /*                                                                       */
52  /* <Description>                                                         */
53  /*    Data from the segment field of `avar' table.                       */
54  /*    There is one of these for each axis.                               */
55  /*                                                                       */
56  typedef struct  GX_AVarSegmentRec_
57  {
58    FT_UShort              pairCount;
59    GX_AVarCorrespondence  correspondence; /* array with pairCount entries */
60
61  } GX_AVarSegmentRec, *GX_AVarSegment;
62
63
64  /*************************************************************************/
65  /*                                                                       */
66  /* <Struct>                                                              */
67  /*    GX_BlendRec                                                        */
68  /*                                                                       */
69  /* <Description>                                                         */
70  /*    Data for interpolating a font from a distortable font specified    */
71  /*    by the GX *var tables ([fgca]var).                                 */
72  /*                                                                       */
73  /* <Fields>                                                              */
74  /*    num_axis         :: The number of axes along which interpolation   */
75  /*                         may happen                                    */
76  /*                                                                       */
77  /*    normalizedcoords :: A normalized value (between [-1,1]) indicating */
78  /*                        the contribution along each axis to the final  */
79  /*                        interpolated font.                             */
80  /*                                                                       */
81  typedef struct  GX_BlendRec_
82  {
83    FT_UInt         num_axis;
84    FT_Fixed*       normalizedcoords;
85
86    FT_MM_Var*      mmvar;
87    FT_Offset       mmvar_len;
88
89    FT_Bool         avar_checked;
90    GX_AVarSegment  avar_segment;
91
92    FT_UInt         tuplecount;      /* shared tuples in `gvar'           */
93    FT_Fixed*       tuplecoords;     /* tuplecoords[tuplecount][num_axis] */
94
95    FT_UInt         gv_glyphcnt;
96    FT_ULong*       glyphoffsets;
97
98  } GX_BlendRec;
99
100
101  /*************************************************************************/
102  /*                                                                       */
103  /* <enum>                                                                */
104  /*    GX_TupleCountFlags                                                 */
105  /*                                                                       */
106  /* <Description>                                                         */
107  /*    Flags used within the `TupleCount' field of the `gvar' table.      */
108  /*                                                                       */
109  typedef enum  GX_TupleCountFlags_
110  {
111    GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000,
112    GX_TC_RESERVED_TUPLE_FLAGS       = 0x7000,
113    GX_TC_TUPLE_COUNT_MASK           = 0x0FFF
114
115  } GX_TupleCountFlags;
116
117
118  /*************************************************************************/
119  /*                                                                       */
120  /* <enum>                                                                */
121  /*    GX_TupleIndexFlags                                                 */
122  /*                                                                       */
123  /* <Description>                                                         */
124  /*    Flags used within the `TupleIndex' field of the `gvar' and `cvar'  */
125  /*    tables.                                                            */
126  /*                                                                       */
127  typedef enum  GX_TupleIndexFlags_
128  {
129    GX_TI_EMBEDDED_TUPLE_COORD  = 0x8000,
130    GX_TI_INTERMEDIATE_TUPLE    = 0x4000,
131    GX_TI_PRIVATE_POINT_NUMBERS = 0x2000,
132    GX_TI_RESERVED_TUPLE_FLAG   = 0x1000,
133    GX_TI_TUPLE_INDEX_MASK      = 0x0FFF
134
135  } GX_TupleIndexFlags;
136
137
138#define TTAG_wght  FT_MAKE_TAG( 'w', 'g', 'h', 't' )
139#define TTAG_wdth  FT_MAKE_TAG( 'w', 'd', 't', 'h' )
140#define TTAG_opsz  FT_MAKE_TAG( 'o', 'p', 's', 'z' )
141#define TTAG_slnt  FT_MAKE_TAG( 's', 'l', 'n', 't' )
142
143
144  FT_LOCAL( FT_Error )
145  TT_Set_MM_Blend( TT_Face    face,
146                   FT_UInt    num_coords,
147                   FT_Fixed*  coords );
148
149  FT_LOCAL( FT_Error )
150  TT_Set_Var_Design( TT_Face    face,
151                     FT_UInt    num_coords,
152                     FT_Fixed*  coords );
153
154  FT_LOCAL( FT_Error )
155  TT_Get_MM_Var( TT_Face      face,
156                 FT_MM_Var*  *master );
157
158
159  FT_LOCAL( FT_Error )
160  tt_face_vary_cvt( TT_Face    face,
161                    FT_Stream  stream );
162
163
164  FT_LOCAL( FT_Error )
165  TT_Vary_Get_Glyph_Deltas( TT_Face      face,
166                            FT_UInt      glyph_index,
167                            FT_Vector*  *deltas,
168                            FT_UInt      n_points );
169
170
171  FT_LOCAL( void )
172  tt_done_blend( FT_Memory  memory,
173                 GX_Blend   blend );
174
175
176FT_END_HEADER
177
178
179#endif /* __TTGXVAR_H__ */
180
181
182/* END */
183