ReactOS  0.4.15-dev-499-g1f31905
ttgxvar.h
Go to the documentation of this file.
1 /***************************************************************************/
2 /* */
3 /* ttgxvar.h */
4 /* */
5 /* TrueType GX Font Variation loader (specification) */
6 /* */
7 /* Copyright 2004-2018 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 <ft2build.h>
24 #include "ttobjs.h"
25 
26 
28 
29 
30 #ifdef TT_CONFIG_OPTION_GX_VAR_SUPPORT
31 
32  /*************************************************************************/
33  /* */
34  /* <Struct> */
35  /* GX_AVarCorrespondenceRec */
36  /* */
37  /* <Description> */
38  /* A data structure representing `shortFracCorrespondence' in `avar' */
39  /* table according to the specifications from Apple. */
40  /* */
41  typedef struct GX_AVarCorrespondenceRec_
42  {
43  FT_Fixed fromCoord;
44  FT_Fixed toCoord;
45 
46  } GX_AVarCorrespondenceRec_, *GX_AVarCorrespondence;
47 
48 
49  /*************************************************************************/
50  /* */
51  /* <Struct> */
52  /* GX_AVarRec */
53  /* */
54  /* <Description> */
55  /* Data from the segment field of `avar' table. */
56  /* There is one of these for each axis. */
57  /* */
58  typedef struct GX_AVarSegmentRec_
59  {
60  FT_UShort pairCount;
61  GX_AVarCorrespondence correspondence; /* array with pairCount entries */
62 
63  } GX_AVarSegmentRec, *GX_AVarSegment;
64 
65 
66  typedef struct GX_ItemVarDataRec_
67  {
68  FT_UInt itemCount; /* number of delta sets per item */
69  FT_UInt regionIdxCount; /* number of region indices in this data */
70  FT_UInt* regionIndices; /* array of `regionCount' indices; */
71  /* these index `varRegionList' */
72  FT_Short* deltaSet; /* array of `itemCount' deltas */
73  /* use `innerIndex' for this array */
74 
75  } GX_ItemVarDataRec, *GX_ItemVarData;
76 
77 
78  /* contribution of one axis to a region */
79  typedef struct GX_AxisCoordsRec_
80  {
81  FT_Fixed startCoord;
82  FT_Fixed peakCoord; /* zero means no effect (factor = 1) */
83  FT_Fixed endCoord;
84 
85  } GX_AxisCoordsRec, *GX_AxisCoords;
86 
87 
88  typedef struct GX_VarRegionRec_
89  {
90  GX_AxisCoords axisList; /* array of axisCount records */
91 
92  } GX_VarRegionRec, *GX_VarRegion;
93 
94 
95  /* item variation store */
96  typedef struct GX_ItemVarStoreRec_
97  {
98  FT_UInt dataCount;
99  GX_ItemVarData varData; /* array of dataCount records; */
100  /* use `outerIndex' for this array */
101  FT_UShort axisCount;
102  FT_UInt regionCount; /* total number of regions defined */
103  GX_VarRegion varRegionList;
104 
105  } GX_ItemVarStoreRec, *GX_ItemVarStore;
106 
107 
108  typedef struct GX_DeltaSetIdxMapRec_
109  {
110  FT_UInt mapCount;
111  FT_UInt* outerIndex; /* indices to item var data */
112  FT_UInt* innerIndex; /* indices to delta set */
113 
114  } GX_DeltaSetIdxMapRec, *GX_DeltaSetIdxMap;
115 
116 
117  /*************************************************************************/
118  /* */
119  /* <Struct> */
120  /* GX_HVVarTableRec */
121  /* */
122  /* <Description> */
123  /* Data from either the `HVAR' or `VVAR' table. */
124  /* */
125  typedef struct GX_HVVarTableRec_
126  {
127  GX_ItemVarStoreRec itemStore; /* Item Variation Store */
128  GX_DeltaSetIdxMapRec widthMap; /* Advance Width Mapping */
129 
130 #if 0
131  GX_DeltaSetIdxMapRec lsbMap; /* not implemented */
132  GX_DeltaSetIdxMapRec rsbMap; /* not implemented */
133 
134  GX_DeltaSetIdxMapRec tsbMap; /* not implemented */
135  GX_DeltaSetIdxMapRec bsbMap; /* not implemented */
136  GX_DeltaSetIdxMapRec vorgMap; /* not implemented */
137 #endif
138 
139  } GX_HVVarTableRec, *GX_HVVarTable;
140 
141 
142 #define MVAR_TAG_GASP_0 FT_MAKE_TAG( 'g', 's', 'p', '0' )
143 #define MVAR_TAG_GASP_1 FT_MAKE_TAG( 'g', 's', 'p', '1' )
144 #define MVAR_TAG_GASP_2 FT_MAKE_TAG( 'g', 's', 'p', '2' )
145 #define MVAR_TAG_GASP_3 FT_MAKE_TAG( 'g', 's', 'p', '3' )
146 #define MVAR_TAG_GASP_4 FT_MAKE_TAG( 'g', 's', 'p', '4' )
147 #define MVAR_TAG_GASP_5 FT_MAKE_TAG( 'g', 's', 'p', '5' )
148 #define MVAR_TAG_GASP_6 FT_MAKE_TAG( 'g', 's', 'p', '6' )
149 #define MVAR_TAG_GASP_7 FT_MAKE_TAG( 'g', 's', 'p', '7' )
150 #define MVAR_TAG_GASP_8 FT_MAKE_TAG( 'g', 's', 'p', '8' )
151 #define MVAR_TAG_GASP_9 FT_MAKE_TAG( 'g', 's', 'p', '9' )
152 
153 #define MVAR_TAG_CPHT FT_MAKE_TAG( 'c', 'p', 'h', 't' )
154 #define MVAR_TAG_HASC FT_MAKE_TAG( 'h', 'a', 's', 'c' )
155 #define MVAR_TAG_HCLA FT_MAKE_TAG( 'h', 'c', 'l', 'a' )
156 #define MVAR_TAG_HCLD FT_MAKE_TAG( 'h', 'c', 'l', 'd' )
157 #define MVAR_TAG_HCOF FT_MAKE_TAG( 'h', 'c', 'o', 'f' )
158 #define MVAR_TAG_HCRN FT_MAKE_TAG( 'h', 'c', 'r', 'n' )
159 #define MVAR_TAG_HCRS FT_MAKE_TAG( 'h', 'c', 'r', 's' )
160 #define MVAR_TAG_HDSC FT_MAKE_TAG( 'h', 'd', 's', 'c' )
161 #define MVAR_TAG_HLGP FT_MAKE_TAG( 'h', 'l', 'g', 'p' )
162 #define MVAR_TAG_SBXO FT_MAKE_TAG( 's', 'b', 'x', 'o' )
163 #define MVAR_TAG_SBXS FT_MAKE_TAG( 's', 'b', 'x', 's' )
164 #define MVAR_TAG_SBYO FT_MAKE_TAG( 's', 'b', 'y', 'o' )
165 #define MVAR_TAG_SBYS FT_MAKE_TAG( 's', 'b', 'y', 's' )
166 #define MVAR_TAG_SPXO FT_MAKE_TAG( 's', 'p', 'x', 'o' )
167 #define MVAR_TAG_SPXS FT_MAKE_TAG( 's', 'p', 'x', 's' )
168 #define MVAR_TAG_SPYO FT_MAKE_TAG( 's', 'p', 'y', 'o' )
169 #define MVAR_TAG_SPYS FT_MAKE_TAG( 's', 'p', 'y', 's' )
170 #define MVAR_TAG_STRO FT_MAKE_TAG( 's', 't', 'r', 'o' )
171 #define MVAR_TAG_STRS FT_MAKE_TAG( 's', 't', 'r', 's' )
172 #define MVAR_TAG_UNDO FT_MAKE_TAG( 'u', 'n', 'd', 'o' )
173 #define MVAR_TAG_UNDS FT_MAKE_TAG( 'u', 'n', 'd', 's' )
174 #define MVAR_TAG_VASC FT_MAKE_TAG( 'v', 'a', 's', 'c' )
175 #define MVAR_TAG_VCOF FT_MAKE_TAG( 'v', 'c', 'o', 'f' )
176 #define MVAR_TAG_VCRN FT_MAKE_TAG( 'v', 'c', 'r', 'n' )
177 #define MVAR_TAG_VCRS FT_MAKE_TAG( 'v', 'c', 'r', 's' )
178 #define MVAR_TAG_VDSC FT_MAKE_TAG( 'v', 'd', 's', 'c' )
179 #define MVAR_TAG_VLGP FT_MAKE_TAG( 'v', 'l', 'g', 'p' )
180 #define MVAR_TAG_XHGT FT_MAKE_TAG( 'x', 'h', 'g', 't' )
181 
182 
183  typedef struct GX_ValueRec_
184  {
185  FT_ULong tag;
186  FT_UShort outerIndex;
187  FT_UShort innerIndex;
188 
189  FT_Short unmodified; /* values are either FT_Short or FT_UShort */
190 
191  } GX_ValueRec, *GX_Value;
192 
193 
194  /*************************************************************************/
195  /* */
196  /* <Struct> */
197  /* GX_MVarTableRec */
198  /* */
199  /* <Description> */
200  /* Data from the `MVAR' table. */
201  /* */
202  typedef struct GX_MVarTableRec_
203  {
204  FT_UShort valueCount;
205 
206  GX_ItemVarStoreRec itemStore; /* Item Variation Store */
207  GX_Value values; /* Value Records */
208 
209  } GX_MVarTableRec, *GX_MVarTable;
210 
211 
212  /*************************************************************************/
213  /* */
214  /* <Struct> */
215  /* GX_BlendRec */
216  /* */
217  /* <Description> */
218  /* Data for interpolating a font from a distortable font specified */
219  /* by the GX *var tables ([fgcahvm]var). */
220  /* */
221  /* <Fields> */
222  /* num_axis :: */
223  /* The number of axes along which interpolation may happen. */
224  /* */
225  /* coords :: */
226  /* An array of design coordinates (in user space) indicating the */
227  /* contribution along each axis to the final interpolated font. */
228  /* `normalizedcoords' holds the same values. */
229  /* */
230  /* normalizedcoords :: */
231  /* An array of normalized values (between [-1,1]) indicating the */
232  /* contribution along each axis to the final interpolated font. */
233  /* `coords' holds the same values. */
234  /* */
235  /* mmvar :: */
236  /* Data from the `fvar' table. */
237  /* */
238  /* mmvar_len :: */
239  /* The length of the `mmvar' structure. */
240  /* */
241  /* normalized_stylecoords :: */
242  /* A two-dimensional array that holds the named instance data from */
243  /* `mmvar' as normalized values. */
244  /* */
245  /* avar_loaded :: */
246  /* A Boolean; if set, FreeType tried to load (and parse) the `avar' */
247  /* table. */
248  /* */
249  /* avar_segment :: */
250  /* Data from the `avar' table. */
251  /* */
252  /* hvar_loaded :: */
253  /* A Boolean; if set, FreeType tried to load (and parse) the `hvar' */
254  /* table. */
255  /* */
256  /* hvar_checked :: */
257  /* A Boolean; if set, FreeType successfully loaded and parsed the */
258  /* `hvar' table. */
259  /* */
260  /* hvar_error :: */
261  /* If loading and parsing of the `hvar' table failed, this field */
262  /* holds the corresponding error code. */
263  /* */
264  /* hvar_table :: */
265  /* Data from the `hvar' table. */
266  /* */
267  /* vvar_loaded :: */
268  /* A Boolean; if set, FreeType tried to load (and parse) the `vvar' */
269  /* table. */
270  /* */
271  /* vvar_checked :: */
272  /* A Boolean; if set, FreeType successfully loaded and parsed the */
273  /* `vvar' table. */
274  /* */
275  /* vvar_error :: */
276  /* If loading and parsing of the `vvar' table failed, this field */
277  /* holds the corresponding error code. */
278  /* */
279  /* vvar_table :: */
280  /* Data from the `vvar' table. */
281  /* */
282  /* mvar_table :: */
283  /* Data from the `mvar' table. */
284  /* */
285  /* tuplecount :: */
286  /* The number of shared tuples in the `gvar' table. */
287  /* */
288  /* tuplecoords :: */
289  /* A two-dimensional array that holds the shared tuple coordinates */
290  /* in the `gvar' table. */
291  /* */
292  /* gv_glyphcnt :: */
293  /* The number of glyphs handled in the `gvar' table. */
294  /* */
295  /* glyphoffsets :: */
296  /* Offsets into the glyph variation data array. */
297  /* */
298  /* gvar_size :: */
299  /* The size of the `gvar' table. */
300  /* */
301  typedef struct GX_BlendRec_
302  {
303  FT_UInt num_axis;
304  FT_Fixed* coords;
305  FT_Fixed* normalizedcoords;
306 
307  FT_MM_Var* mmvar;
308  FT_Offset mmvar_len;
309 
310  FT_Fixed* normalized_stylecoords;
311  /* normalized_stylecoords[num_namedstyles][num_axis] */
312 
313  FT_Bool avar_loaded;
314  GX_AVarSegment avar_segment; /* avar_segment[num_axis] */
315 
316  FT_Bool hvar_loaded;
317  FT_Bool hvar_checked;
318  FT_Error hvar_error;
319  GX_HVVarTable hvar_table;
320 
321  FT_Bool vvar_loaded;
322  FT_Bool vvar_checked;
323  FT_Error vvar_error;
324  GX_HVVarTable vvar_table;
325 
326  GX_MVarTable mvar_table;
327 
328  FT_UInt tuplecount;
329  FT_Fixed* tuplecoords; /* tuplecoords[tuplecount][num_axis] */
330 
331  FT_UInt gv_glyphcnt;
332  FT_ULong* glyphoffsets; /* glyphoffsets[gv_glyphcnt + 1] */
333 
334  FT_ULong gvar_size;
335 
336  } GX_BlendRec;
337 
338 
339  /*************************************************************************/
340  /* */
341  /* <enum> */
342  /* GX_TupleCountFlags */
343  /* */
344  /* <Description> */
345  /* Flags used within the `TupleCount' field of the `gvar' table. */
346  /* */
347  typedef enum GX_TupleCountFlags_
348  {
349  GX_TC_TUPLES_SHARE_POINT_NUMBERS = 0x8000,
350  GX_TC_RESERVED_TUPLE_FLAGS = 0x7000,
351  GX_TC_TUPLE_COUNT_MASK = 0x0FFF
352 
353  } GX_TupleCountFlags;
354 
355 
356  /*************************************************************************/
357  /* */
358  /* <enum> */
359  /* GX_TupleIndexFlags */
360  /* */
361  /* <Description> */
362  /* Flags used within the `TupleIndex' field of the `gvar' and `cvar' */
363  /* tables. */
364  /* */
365  typedef enum GX_TupleIndexFlags_
366  {
367  GX_TI_EMBEDDED_TUPLE_COORD = 0x8000,
368  GX_TI_INTERMEDIATE_TUPLE = 0x4000,
369  GX_TI_PRIVATE_POINT_NUMBERS = 0x2000,
370  GX_TI_RESERVED_TUPLE_FLAG = 0x1000,
371  GX_TI_TUPLE_INDEX_MASK = 0x0FFF
372 
373  } GX_TupleIndexFlags;
374 
375 
376 #define TTAG_wght FT_MAKE_TAG( 'w', 'g', 'h', 't' )
377 #define TTAG_wdth FT_MAKE_TAG( 'w', 'd', 't', 'h' )
378 #define TTAG_opsz FT_MAKE_TAG( 'o', 'p', 's', 'z' )
379 #define TTAG_slnt FT_MAKE_TAG( 's', 'l', 'n', 't' )
380 
381 
382  FT_LOCAL( FT_Error )
383  TT_Set_MM_Blend( TT_Face face,
384  FT_UInt num_coords,
385  FT_Fixed* coords );
386 
387  FT_LOCAL( FT_Error )
388  TT_Get_MM_Blend( TT_Face face,
389  FT_UInt num_coords,
390  FT_Fixed* coords );
391 
392  FT_LOCAL( FT_Error )
393  TT_Set_Var_Design( TT_Face face,
394  FT_UInt num_coords,
395  FT_Fixed* coords );
396 
397  FT_LOCAL( FT_Error )
398  TT_Get_MM_Var( TT_Face face,
399  FT_MM_Var* *master );
400 
401  FT_LOCAL( FT_Error )
402  TT_Get_Var_Design( TT_Face face,
403  FT_UInt num_coords,
404  FT_Fixed* coords );
405 
406  FT_LOCAL( FT_Error )
407  TT_Set_Named_Instance( TT_Face face,
408  FT_UInt instance_index );
409 
410  FT_LOCAL( FT_Error )
411  tt_face_vary_cvt( TT_Face face,
412  FT_Stream stream );
413 
414 
415  FT_LOCAL( FT_Error )
416  TT_Vary_Apply_Glyph_Deltas( TT_Face face,
417  FT_UInt glyph_index,
419  FT_UInt n_points );
420 
421  FT_LOCAL( FT_Error )
422  tt_hadvance_adjust( TT_Face face,
423  FT_UInt gindex,
424  FT_Int *adelta );
425 
426  FT_LOCAL( FT_Error )
427  tt_vadvance_adjust( TT_Face face,
428  FT_UInt gindex,
429  FT_Int *adelta );
430 
431  FT_LOCAL( void )
432  tt_apply_mvar( TT_Face face );
433 
434  FT_LOCAL( FT_Error )
435  tt_get_var_blend( TT_Face face,
436  FT_UInt *num_coords,
437  FT_Fixed* *coords,
438  FT_Fixed* *normalizedcoords,
439  FT_MM_Var* *mm_var );
440 
441  FT_LOCAL( void )
442  tt_done_blend( TT_Face face );
443 
444 #endif /* TT_CONFIG_OPTION_GX_VAR_SUPPORT */
445 
446 
448 
449 
450 #endif /* TTGXVAR_H_ */
451 
452 
453 /* END */
int FT_Error
Definition: fttypes.h:300
unsigned long FT_ULong
Definition: fttypes.h:253
#define FT_END_HEADER
Definition: ftheader.h:54
signed int FT_Int
Definition: fttypes.h:220
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
GLuint coords
Definition: glext.h:7368
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
#define FT_BEGIN_HEADER
Definition: ftheader.h:36
#define FT_LOCAL(x)
Definition: ftconfig.h:387
Definition: parse.h:22
signed short FT_Short
Definition: fttypes.h:198
Definition: mesh.c:5329
signed long FT_Fixed
Definition: fttypes.h:288
unsigned int FT_UInt
Definition: fttypes.h:231
unsigned short FT_UShort
Definition: fttypes.h:209
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
size_t FT_Offset
Definition: fttypes.h:324
char * tag
Definition: main.c:59