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