ReactOS 0.4.15-dev-7924-g5949c20
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 {
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;
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
383 TT_Set_MM_Blend( TT_Face face,
384 FT_UInt num_coords,
385 FT_Fixed* coords );
386
388 TT_Get_MM_Blend( TT_Face face,
389 FT_UInt num_coords,
390 FT_Fixed* coords );
391
393 TT_Set_Var_Design( TT_Face face,
394 FT_UInt num_coords,
395 FT_Fixed* coords );
396
398 TT_Get_MM_Var( TT_Face face,
399 FT_MM_Var* *master );
400
402 TT_Get_Var_Design( TT_Face face,
403 FT_UInt num_coords,
404 FT_Fixed* coords );
405
407 TT_Set_Named_Instance( TT_Face face,
408 FT_UInt instance_index );
409
411 tt_face_vary_cvt( TT_Face face,
413
414
416 TT_Vary_Apply_Glyph_Deltas( TT_Face face,
417 FT_UInt glyph_index,
419 FT_UInt n_points );
420
422 tt_hadvance_adjust( TT_Face face,
423 FT_UInt gindex,
424 FT_Int *adelta );
425
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
435 tt_get_var_blend( TT_Face face,
436 FT_UInt *num_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 */
#define FT_LOCAL(x)
Definition: ftconfig.h:387
#define FT_END_HEADER
Definition: ftheader.h:54
#define FT_BEGIN_HEADER
Definition: ftheader.h:36
FT_BEGIN_HEADER typedef unsigned char FT_Bool
Definition: fttypes.h:108
unsigned long FT_ULong
Definition: fttypes.h:253
signed long FT_Fixed
Definition: fttypes.h:288
int FT_Error
Definition: fttypes.h:300
unsigned short FT_UShort
Definition: fttypes.h:209
signed short FT_Short
Definition: fttypes.h:198
unsigned int FT_UInt
Definition: fttypes.h:231
size_t FT_Offset
Definition: fttypes.h:324
signed int FT_Int
Definition: fttypes.h:220
GLuint coords
Definition: glext.h:7368
GLenum GLuint GLint GLenum face
Definition: glext.h:7025
GLboolean GLenum GLenum GLvoid * values
Definition: glext.h:5666
Definition: mesh.c:5330
Definition: parse.h:23
Definition: ecma_167.h:138