Github User Fetcher
1.0.0
C Application with Server and GUI
Loading...
Searching...
No Matches
ftdriver.h
Go to the documentation of this file.
1
/****************************************************************************
2
*
3
* ftdriver.h
4
*
5
* FreeType API for controlling driver modules (specification only).
6
*
7
* Copyright (C) 2017-2024 by
8
* David Turner, Robert Wilhelm, and Werner Lemberg.
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 FTDRIVER_H_
20
#define FTDRIVER_H_
21
22
#include <freetype/freetype.h>
23
#include <freetype/ftparams.h>
24
25
#ifdef FREETYPE_H
26
#error "freetype.h of FreeType 1 has been loaded!"
27
#error "Please fix the directory search order for header files"
28
#error "so that freetype.h of FreeType 2 is found first."
29
#endif
30
31
32
FT_BEGIN_HEADER
33
34
35
/**************************************************************************
36
*
37
* @section:
38
* auto_hinter
39
*
40
* @title:
41
* The auto-hinter
42
*
43
* @abstract:
44
* Controlling the auto-hinting module.
45
*
46
* @description:
47
* While FreeType's auto-hinter doesn't expose API functions by itself,
48
* it is possible to control its behaviour with @FT_Property_Set and
49
* @FT_Property_Get. The following lists the available properties
50
* together with the necessary macros and structures.
51
*
52
* Note that the auto-hinter's module name is 'autofitter' for historical
53
* reasons.
54
*
55
* Available properties are @increase-x-height, @no-stem-darkening
56
* (experimental), @darkening-parameters (experimental),
57
* @glyph-to-script-map (experimental), @fallback-script (experimental),
58
* and @default-script (experimental), as documented in the @properties
59
* section.
60
*
61
*/
62
63
64
/**************************************************************************
65
*
66
* @section:
67
* cff_driver
68
*
69
* @title:
70
* The CFF driver
71
*
72
* @abstract:
73
* Controlling the CFF driver module.
74
*
75
* @description:
76
* While FreeType's CFF driver doesn't expose API functions by itself, it
77
* is possible to control its behaviour with @FT_Property_Set and
78
* @FT_Property_Get.
79
*
80
* The CFF driver's module name is 'cff'.
81
*
82
* Available properties are @hinting-engine, @no-stem-darkening,
83
* @darkening-parameters, and @random-seed, as documented in the
84
* @properties section.
85
*
86
*
87
* **Hinting and anti-aliasing principles of the new engine**
88
*
89
* The rasterizer is positioning horizontal features (e.g., ascender
90
* height & x-height, or crossbars) on the pixel grid and minimizing the
91
* amount of anti-aliasing applied to them, while placing vertical
92
* features (vertical stems) on the pixel grid without hinting, thus
93
* representing the stem position and weight accurately. Sometimes the
94
* vertical stems may be only partially black. In this context,
95
* 'anti-aliasing' means that stems are not positioned exactly on pixel
96
* borders, causing a fuzzy appearance.
97
*
98
* There are two principles behind this approach.
99
*
100
* 1) No hinting in the horizontal direction: Unlike 'superhinted'
101
* TrueType, which changes glyph widths to accommodate regular
102
* inter-glyph spacing, Adobe's approach is 'faithful to the design' in
103
* representing both the glyph width and the inter-glyph spacing designed
104
* for the font. This makes the screen display as close as it can be to
105
* the result one would get with infinite resolution, while preserving
106
* what is considered the key characteristics of each glyph. Note that
107
* the distances between unhinted and grid-fitted positions at small
108
* sizes are comparable to kerning values and thus would be noticeable
109
* (and distracting) while reading if hinting were applied.
110
*
111
* One of the reasons to not hint horizontally is anti-aliasing for LCD
112
* screens: The pixel geometry of modern displays supplies three vertical
113
* subpixels as the eye moves horizontally across each visible pixel. On
114
* devices where we can be certain this characteristic is present a
115
* rasterizer can take advantage of the subpixels to add increments of
116
* weight. In Western writing systems this turns out to be the more
117
* critical direction anyway; the weights and spacing of vertical stems
118
* (see above) are central to Armenian, Cyrillic, Greek, and Latin type
119
* designs. Even when the rasterizer uses greyscale anti-aliasing instead
120
* of color (a necessary compromise when one doesn't know the screen
121
* characteristics), the unhinted vertical features preserve the design's
122
* weight and spacing much better than aliased type would.
123
*
124
* 2) Alignment in the vertical direction: Weights and spacing along the
125
* y~axis are less critical; what is much more important is the visual
126
* alignment of related features (like cap-height and x-height). The
127
* sense of alignment for these is enhanced by the sharpness of grid-fit
128
* edges, while the cruder vertical resolution (full pixels instead of
129
* 1/3 pixels) is less of a problem.
130
*
131
* On the technical side, horizontal alignment zones for ascender,
132
* x-height, and other important height values (traditionally called
133
* 'blue zones') as defined in the font are positioned independently,
134
* each being rounded to the nearest pixel edge, taking care of overshoot
135
* suppression at small sizes, stem darkening, and scaling.
136
*
137
* Hstems (that is, hint values defined in the font to help align
138
* horizontal features) that fall within a blue zone are said to be
139
* 'captured' and are aligned to that zone. Uncaptured stems are moved
140
* in one of four ways, top edge up or down, bottom edge up or down.
141
* Unless there are conflicting hstems, the smallest movement is taken to
142
* minimize distortion.
143
*
144
*/
145
146
147
/**************************************************************************
148
*
149
* @section:
150
* pcf_driver
151
*
152
* @title:
153
* The PCF driver
154
*
155
* @abstract:
156
* Controlling the PCF driver module.
157
*
158
* @description:
159
* While FreeType's PCF driver doesn't expose API functions by itself, it
160
* is possible to control its behaviour with @FT_Property_Set and
161
* @FT_Property_Get. Right now, there is a single property
162
* @no-long-family-names available if FreeType is compiled with
163
* PCF_CONFIG_OPTION_LONG_FAMILY_NAMES.
164
*
165
* The PCF driver's module name is 'pcf'.
166
*
167
*/
168
169
170
/**************************************************************************
171
*
172
* @section:
173
* t1_cid_driver
174
*
175
* @title:
176
* The Type 1 and CID drivers
177
*
178
* @abstract:
179
* Controlling the Type~1 and CID driver modules.
180
*
181
* @description:
182
* It is possible to control the behaviour of FreeType's Type~1 and
183
* Type~1 CID drivers with @FT_Property_Set and @FT_Property_Get.
184
*
185
* Behind the scenes, both drivers use the Adobe CFF engine for hinting;
186
* however, the used properties must be specified separately.
187
*
188
* The Type~1 driver's module name is 'type1'; the CID driver's module
189
* name is 't1cid'.
190
*
191
* Available properties are @hinting-engine, @no-stem-darkening,
192
* @darkening-parameters, and @random-seed, as documented in the
193
* @properties section.
194
*
195
* Please see the @cff_driver section for more details on the new hinting
196
* engine.
197
*
198
*/
199
200
201
/**************************************************************************
202
*
203
* @section:
204
* tt_driver
205
*
206
* @title:
207
* The TrueType driver
208
*
209
* @abstract:
210
* Controlling the TrueType driver module.
211
*
212
* @description:
213
* While FreeType's TrueType driver doesn't expose API functions by
214
* itself, it is possible to control its behaviour with @FT_Property_Set
215
* and @FT_Property_Get.
216
*
217
* The TrueType driver's module name is 'truetype'; a single property
218
* @interpreter-version is available, as documented in the @properties
219
* section.
220
*
221
* To help understand the differences between interpreter versions, we
222
* introduce a list of definitions, kindly provided by Greg Hitchcock.
223
*
224
* _Bi-Level Rendering_
225
*
226
* Monochromatic rendering, exclusively used in the early days of
227
* TrueType by both Apple and Microsoft. Microsoft's GDI interface
228
* supported hinting of the right-side bearing point, such that the
229
* advance width could be non-linear. Most often this was done to
230
* achieve some level of glyph symmetry. To enable reasonable
231
* performance (e.g., not having to run hinting on all glyphs just to get
232
* the widths) there was a bit in the head table indicating if the side
233
* bearing was hinted, and additional tables, 'hdmx' and 'LTSH', to cache
234
* hinting widths across multiple sizes and device aspect ratios.
235
*
236
* _Font Smoothing_
237
*
238
* Microsoft's GDI implementation of anti-aliasing. Not traditional
239
* anti-aliasing as the outlines were hinted before the sampling. The
240
* widths matched the bi-level rendering.
241
*
242
* _ClearType Rendering_
243
*
244
* Technique that uses physical subpixels to improve rendering on LCD
245
* (and other) displays. Because of the higher resolution, many methods
246
* of improving symmetry in glyphs through hinting the right-side bearing
247
* were no longer necessary. This lead to what GDI calls 'natural
248
* widths' ClearType, see
249
* http://rastertragedy.com/RTRCh4.htm#Sec21. Since hinting
250
* has extra resolution, most non-linearity went away, but it is still
251
* possible for hints to change the advance widths in this mode.
252
*
253
* _ClearType Compatible Widths_
254
*
255
* One of the earliest challenges with ClearType was allowing the
256
* implementation in GDI to be selected without requiring all UI and
257
* documents to reflow. To address this, a compatible method of
258
* rendering ClearType was added where the font hints are executed once
259
* to determine the width in bi-level rendering, and then re-run in
260
* ClearType, with the difference in widths being absorbed in the font
261
* hints for ClearType (mostly in the white space of hints); see
262
* http://rastertragedy.com/RTRCh4.htm#Sec20. Somewhat by
263
* definition, compatible width ClearType allows for non-linear widths,
264
* but only when the bi-level version has non-linear widths.
265
*
266
* _ClearType Subpixel Positioning_
267
*
268
* One of the nice benefits of ClearType is the ability to more crisply
269
* display fractional widths; unfortunately, the GDI model of integer
270
* bitmaps did not support this. However, the WPF and Direct Write
271
* frameworks do support fractional widths. DWrite calls this 'natural
272
* mode', not to be confused with GDI's 'natural widths'. Subpixel
273
* positioning, in the current implementation of Direct Write,
274
* unfortunately does not support hinted advance widths, see
275
* http://rastertragedy.com/RTRCh4.htm#Sec22. Note that the
276
* TrueType interpreter fully allows the advance width to be adjusted in
277
* this mode, just the DWrite client will ignore those changes.
278
*
279
* _ClearType Backward Compatibility_
280
*
281
* This is a set of exceptions made in the TrueType interpreter to
282
* minimize hinting techniques that were problematic with the extra
283
* resolution of ClearType; see
284
* http://rastertragedy.com/RTRCh4.htm#Sec1 and
285
* https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx.
286
* This technique is not to be confused with ClearType compatible widths.
287
* ClearType backward compatibility has no direct impact on changing
288
* advance widths, but there might be an indirect impact on disabling
289
* some deltas. This could be worked around in backward compatibility
290
* mode.
291
*
292
* _Native ClearType Mode_
293
*
294
* (Not to be confused with 'natural widths'.) This mode removes all the
295
* exceptions in the TrueType interpreter when running with ClearType.
296
* Any issues on widths would still apply, though.
297
*
298
*/
299
300
301
/**************************************************************************
302
*
303
* @section:
304
* ot_svg_driver
305
*
306
* @title:
307
* The SVG driver
308
*
309
* @abstract:
310
* Controlling the external rendering of OT-SVG glyphs.
311
*
312
* @description:
313
* By default, FreeType can only load the 'SVG~' table of OpenType fonts
314
* if configuration macro `FT_CONFIG_OPTION_SVG` is defined. To make it
315
* render SVG glyphs, an external SVG rendering library is needed. All
316
* details on the interface between FreeType and the external library
317
* via function hooks can be found in section @svg_fonts.
318
*
319
* The OT-SVG driver's module name is 'ot-svg'; it supports a single
320
* property called @svg-hooks, documented below in the @properties
321
* section.
322
*
323
*/
324
325
326
/**************************************************************************
327
*
328
* @section:
329
* properties
330
*
331
* @title:
332
* Driver properties
333
*
334
* @abstract:
335
* Controlling driver modules.
336
*
337
* @description:
338
* Driver modules can be controlled by setting and unsetting properties,
339
* using the functions @FT_Property_Set and @FT_Property_Get. This
340
* section documents the available properties, together with auxiliary
341
* macros and structures.
342
*
343
*/
344
345
346
/**************************************************************************
347
*
348
* @enum:
349
* FT_HINTING_XXX
350
*
351
* @description:
352
* A list of constants used for the @hinting-engine property to select
353
* the hinting engine for CFF, Type~1, and CID fonts.
354
*
355
* @values:
356
* FT_HINTING_FREETYPE ::
357
* Use the old FreeType hinting engine.
358
*
359
* FT_HINTING_ADOBE ::
360
* Use the hinting engine contributed by Adobe.
361
*
362
* @since:
363
* 2.9
364
*
365
*/
366
#define FT_HINTING_FREETYPE 0
367
#define FT_HINTING_ADOBE 1
368
369
/* these constants (introduced in 2.4.12) are deprecated */
370
#define FT_CFF_HINTING_FREETYPE FT_HINTING_FREETYPE
371
#define FT_CFF_HINTING_ADOBE FT_HINTING_ADOBE
372
373
374
/**************************************************************************
375
*
376
* @property:
377
* hinting-engine
378
*
379
* @description:
380
* Thanks to Adobe, which contributed a new hinting (and parsing) engine,
381
* an application can select between 'freetype' and 'adobe' if compiled
382
* with `CFF_CONFIG_OPTION_OLD_ENGINE`. If this configuration macro
383
* isn't defined, 'hinting-engine' does nothing.
384
*
385
* The same holds for the Type~1 and CID modules if compiled with
386
* `T1_CONFIG_OPTION_OLD_ENGINE`.
387
*
388
* For the 'cff' module, the default engine is 'adobe'. For both the
389
* 'type1' and 't1cid' modules, the default engine is 'adobe', too.
390
*
391
* @note:
392
* This property can be used with @FT_Property_Get also.
393
*
394
* This property can be set via the `FREETYPE_PROPERTIES` environment
395
* variable (using values 'adobe' or 'freetype').
396
*
397
* @example:
398
* The following example code demonstrates how to select Adobe's hinting
399
* engine for the 'cff' module (omitting the error handling).
400
*
401
* ```
402
* FT_Library library;
403
* FT_UInt hinting_engine = FT_HINTING_ADOBE;
404
*
405
*
406
* FT_Init_FreeType( &library );
407
*
408
* FT_Property_Set( library, "cff",
409
* "hinting-engine", &hinting_engine );
410
* ```
411
*
412
* @since:
413
* 2.4.12 (for 'cff' module)
414
*
415
* 2.9 (for 'type1' and 't1cid' modules)
416
*
417
*/
418
419
420
/**************************************************************************
421
*
422
* @property:
423
* no-stem-darkening
424
*
425
* @description:
426
* All glyphs that pass through the auto-hinter will be emboldened unless
427
* this property is set to TRUE. The same is true for the CFF, Type~1,
428
* and CID font modules if the 'Adobe' engine is selected (which is the
429
* default).
430
*
431
* Stem darkening emboldens glyphs at smaller sizes to make them more
432
* readable on common low-DPI screens when using linear alpha blending
433
* and gamma correction, see @FT_Render_Glyph. When not using linear
434
* alpha blending and gamma correction, glyphs will appear heavy and
435
* fuzzy!
436
*
437
* Gamma correction essentially lightens fonts since shades of grey are
438
* shifted to higher pixel values (=~higher brightness) to match the
439
* original intention to the reality of our screens. The side-effect is
440
* that glyphs 'thin out'. Mac OS~X and Adobe's proprietary font
441
* rendering library implement a counter-measure: stem darkening at
442
* smaller sizes where shades of gray dominate. By emboldening a glyph
443
* slightly in relation to its pixel size, individual pixels get higher
444
* coverage of filled-in outlines and are therefore 'blacker'. This
445
* counteracts the 'thinning out' of glyphs, making text remain readable
446
* at smaller sizes.
447
*
448
* For the auto-hinter, stem-darkening is experimental currently and thus
449
* switched off by default (that is, `no-stem-darkening` is set to TRUE
450
* by default). Total consistency with the CFF driver is not achieved
451
* right now because the emboldening method differs and glyphs must be
452
* scaled down on the Y-axis to keep outline points inside their
453
* precomputed blue zones. The smaller the size (especially 9ppem and
454
* down), the higher the loss of emboldening versus the CFF driver.
455
*
456
* Note that stem darkening is never applied if @FT_LOAD_NO_SCALE is set.
457
*
458
* @note:
459
* This property can be used with @FT_Property_Get also.
460
*
461
* This property can be set via the `FREETYPE_PROPERTIES` environment
462
* variable (using values 1 and 0 for 'on' and 'off', respectively). It
463
* can also be set per face using @FT_Face_Properties with
464
* @FT_PARAM_TAG_STEM_DARKENING.
465
*
466
* @example:
467
* ```
468
* FT_Library library;
469
* FT_Bool no_stem_darkening = TRUE;
470
*
471
*
472
* FT_Init_FreeType( &library );
473
*
474
* FT_Property_Set( library, "cff",
475
* "no-stem-darkening", &no_stem_darkening );
476
* ```
477
*
478
* @since:
479
* 2.4.12 (for 'cff' module)
480
*
481
* 2.6.2 (for 'autofitter' module)
482
*
483
* 2.9 (for 'type1' and 't1cid' modules)
484
*
485
*/
486
487
488
/**************************************************************************
489
*
490
* @property:
491
* darkening-parameters
492
*
493
* @description:
494
* By default, the Adobe hinting engine, as used by the CFF, Type~1, and
495
* CID font drivers, darkens stems as follows (if the `no-stem-darkening`
496
* property isn't set):
497
*
498
* ```
499
* stem width <= 0.5px: darkening amount = 0.4px
500
* stem width = 1px: darkening amount = 0.275px
501
* stem width = 1.667px: darkening amount = 0.275px
502
* stem width >= 2.333px: darkening amount = 0px
503
* ```
504
*
505
* and piecewise linear in-between. At configuration time, these four
506
* control points can be set with the macro
507
* `CFF_CONFIG_OPTION_DARKENING_PARAMETERS`; the CFF, Type~1, and CID
508
* drivers share these values. At runtime, the control points can be
509
* changed using the `darkening-parameters` property (see the example
510
* below that demonstrates this for the Type~1 driver).
511
*
512
* The x~values give the stem width, and the y~values the darkening
513
* amount. The unit is 1000th of pixels. All coordinate values must be
514
* positive; the x~values must be monotonically increasing; the y~values
515
* must be monotonically decreasing and smaller than or equal to 500
516
* (corresponding to half a pixel); the slope of each linear piece must
517
* be shallower than -1 (e.g., -.4).
518
*
519
* The auto-hinter provides this property, too, as an experimental
520
* feature. See @no-stem-darkening for more.
521
*
522
* @note:
523
* This property can be used with @FT_Property_Get also.
524
*
525
* This property can be set via the `FREETYPE_PROPERTIES` environment
526
* variable, using eight comma-separated integers without spaces. Here
527
* the above example, using `\` to break the line for readability.
528
*
529
* ```
530
* FREETYPE_PROPERTIES=\
531
* type1:darkening-parameters=500,300,1000,200,1500,100,2000,0
532
* ```
533
*
534
* @example:
535
* ```
536
* FT_Library library;
537
* FT_Int darken_params[8] = { 500, 300, // x1, y1
538
* 1000, 200, // x2, y2
539
* 1500, 100, // x3, y3
540
* 2000, 0 }; // x4, y4
541
*
542
*
543
* FT_Init_FreeType( &library );
544
*
545
* FT_Property_Set( library, "type1",
546
* "darkening-parameters", darken_params );
547
* ```
548
*
549
* @since:
550
* 2.5.1 (for 'cff' module)
551
*
552
* 2.6.2 (for 'autofitter' module)
553
*
554
* 2.9 (for 'type1' and 't1cid' modules)
555
*
556
*/
557
558
559
/**************************************************************************
560
*
561
* @property:
562
* random-seed
563
*
564
* @description:
565
* By default, the seed value for the CFF 'random' operator and the
566
* similar '0 28 callothersubr pop' command for the Type~1 and CID
567
* drivers is set to a random value. However, mainly for debugging
568
* purposes, it is often necessary to use a known value as a seed so that
569
* the pseudo-random number sequences generated by 'random' are
570
* repeatable.
571
*
572
* The `random-seed` property does that. Its argument is a signed 32bit
573
* integer; if the value is zero or negative, the seed given by the
574
* `intitialRandomSeed` private DICT operator in a CFF file gets used (or
575
* a default value if there is no such operator). If the value is
576
* positive, use it instead of `initialRandomSeed`, which is consequently
577
* ignored.
578
*
579
* @note:
580
* This property can be set via the `FREETYPE_PROPERTIES` environment
581
* variable. It can also be set per face using @FT_Face_Properties with
582
* @FT_PARAM_TAG_RANDOM_SEED.
583
*
584
* @since:
585
* 2.8 (for 'cff' module)
586
*
587
* 2.9 (for 'type1' and 't1cid' modules)
588
*
589
*/
590
591
592
/**************************************************************************
593
*
594
* @property:
595
* no-long-family-names
596
*
597
* @description:
598
* If `PCF_CONFIG_OPTION_LONG_FAMILY_NAMES` is active while compiling
599
* FreeType, the PCF driver constructs long family names.
600
*
601
* There are many PCF fonts just called 'Fixed' which look completely
602
* different, and which have nothing to do with each other. When
603
* selecting 'Fixed' in KDE or Gnome one gets results that appear rather
604
* random, the style changes often if one changes the size and one cannot
605
* select some fonts at all. The improve this situation, the PCF module
606
* prepends the foundry name (plus a space) to the family name. It also
607
* checks whether there are 'wide' characters; all put together, family
608
* names like 'Sony Fixed' or 'Misc Fixed Wide' are constructed.
609
*
610
* If `no-long-family-names` is set, this feature gets switched off.
611
*
612
* @note:
613
* This property can be used with @FT_Property_Get also.
614
*
615
* This property can be set via the `FREETYPE_PROPERTIES` environment
616
* variable (using values 1 and 0 for 'on' and 'off', respectively).
617
*
618
* @example:
619
* ```
620
* FT_Library library;
621
* FT_Bool no_long_family_names = TRUE;
622
*
623
*
624
* FT_Init_FreeType( &library );
625
*
626
* FT_Property_Set( library, "pcf",
627
* "no-long-family-names",
628
* &no_long_family_names );
629
* ```
630
*
631
* @since:
632
* 2.8
633
*/
634
635
636
/**************************************************************************
637
*
638
* @enum:
639
* TT_INTERPRETER_VERSION_XXX
640
*
641
* @description:
642
* A list of constants used for the @interpreter-version property to
643
* select the hinting engine for Truetype fonts.
644
*
645
* The numeric value in the constant names represents the version number
646
* as returned by the 'GETINFO' bytecode instruction.
647
*
648
* @values:
649
* TT_INTERPRETER_VERSION_35 ::
650
* Version~35 corresponds to MS rasterizer v.1.7 as used e.g. in
651
* Windows~98; only grayscale and B/W rasterizing is supported.
652
*
653
* TT_INTERPRETER_VERSION_38 ::
654
* Version~38 is the same Version~40. The original 'Infinality' code is
655
* no longer available.
656
*
657
* TT_INTERPRETER_VERSION_40 ::
658
* Version~40 corresponds to MS rasterizer v.2.1; it is roughly
659
* equivalent to the hinting provided by DirectWrite ClearType (as can
660
* be found, for example, in Microsoft's Edge Browser on Windows~10).
661
* It is used in FreeType to select the 'minimal' subpixel hinting
662
* code, a stripped-down and higher performance version of the
663
* 'Infinality' code.
664
*
665
* @note:
666
* This property controls the behaviour of the bytecode interpreter and
667
* thus how outlines get hinted. It does **not** control how glyph get
668
* rasterized! In particular, it does not control subpixel color
669
* filtering.
670
*
671
* If FreeType has not been compiled with the configuration option
672
* `TT_CONFIG_OPTION_SUBPIXEL_HINTING`, selecting version~38 or~40 causes
673
* an `FT_Err_Unimplemented_Feature` error.
674
*
675
* Depending on the graphics framework, Microsoft uses different bytecode
676
* and rendering engines. As a consequence, the version numbers returned
677
* by a call to the 'GETINFO' bytecode instruction are more convoluted
678
* than desired.
679
*
680
* Here are two tables that try to shed some light on the possible values
681
* for the MS rasterizer engine, together with the additional features
682
* introduced by it.
683
*
684
* ```
685
* GETINFO framework version feature
686
* -------------------------------------------------------------------
687
* 3 GDI (Win 3.1), v1.0 16-bit, first version
688
* TrueImage
689
* 33 GDI (Win NT 3.1), v1.5 32-bit
690
* HP Laserjet
691
* 34 GDI (Win 95) v1.6 font smoothing,
692
* new SCANTYPE opcode
693
* 35 GDI (Win 98/2000) v1.7 (UN)SCALED_COMPONENT_OFFSET
694
* bits in composite glyphs
695
* 36 MGDI (Win CE 2) v1.6+ classic ClearType
696
* 37 GDI (XP and later), v1.8 ClearType
697
* GDI+ old (before Vista)
698
* 38 GDI+ old (Vista, Win 7), v1.9 subpixel ClearType,
699
* WPF Y-direction ClearType,
700
* additional error checking
701
* 39 DWrite (before Win 8) v2.0 subpixel ClearType flags
702
* in GETINFO opcode,
703
* bug fixes
704
* 40 GDI+ (after Win 7), v2.1 Y-direction ClearType flag
705
* DWrite (Win 8) in GETINFO opcode,
706
* Gray ClearType
707
* ```
708
*
709
* The 'version' field gives a rough orientation only, since some
710
* applications provided certain features much earlier (as an example,
711
* Microsoft Reader used subpixel and Y-direction ClearType already in
712
* Windows 2000). Similarly, updates to a given framework might include
713
* improved hinting support.
714
*
715
* ```
716
* version sampling rendering comment
717
* x y x y
718
* --------------------------------------------------------------
719
* v1.0 normal normal B/W B/W bi-level
720
* v1.6 high high gray gray grayscale
721
* v1.8 high normal color-filter B/W (GDI) ClearType
722
* v1.9 high high color-filter gray Color ClearType
723
* v2.1 high normal gray B/W Gray ClearType
724
* v2.1 high high gray gray Gray ClearType
725
* ```
726
*
727
* Color and Gray ClearType are the two available variants of
728
* 'Y-direction ClearType', meaning grayscale rasterization along the
729
* Y-direction; the name used in the TrueType specification for this
730
* feature is 'symmetric smoothing'. 'Classic ClearType' is the original
731
* algorithm used before introducing a modified version in Win~XP.
732
* Another name for v1.6's grayscale rendering is 'font smoothing', and
733
* 'Color ClearType' is sometimes also called 'DWrite ClearType'. To
734
* differentiate between today's Color ClearType and the earlier
735
* ClearType variant with B/W rendering along the vertical axis, the
736
* latter is sometimes called 'GDI ClearType'.
737
*
738
* 'Normal' and 'high' sampling describe the (virtual) resolution to
739
* access the rasterized outline after the hinting process. 'Normal'
740
* means 1 sample per grid line (i.e., B/W). In the current Microsoft
741
* implementation, 'high' means an extra virtual resolution of 16x16 (or
742
* 16x1) grid lines per pixel for bytecode instructions like 'MIRP'.
743
* After hinting, these 16 grid lines are mapped to 6x5 (or 6x1) grid
744
* lines for color filtering if Color ClearType is activated.
745
*
746
* Note that 'Gray ClearType' is essentially the same as v1.6's grayscale
747
* rendering. However, the GETINFO instruction handles it differently:
748
* v1.6 returns bit~12 (hinting for grayscale), while v2.1 returns
749
* bits~13 (hinting for ClearType), 18 (symmetrical smoothing), and~19
750
* (Gray ClearType). Also, this mode respects bits 2 and~3 for the
751
* version~1 gasp table exclusively (like Color ClearType), while v1.6
752
* only respects the values of version~0 (bits 0 and~1).
753
*
754
* Keep in mind that the features of the above interpreter versions might
755
* not map exactly to FreeType features or behavior because it is a
756
* fundamentally different library with different internals.
757
*
758
*/
759
#define TT_INTERPRETER_VERSION_35 35
760
#define TT_INTERPRETER_VERSION_38 38
761
#define TT_INTERPRETER_VERSION_40 40
762
763
764
/**************************************************************************
765
*
766
* @property:
767
* interpreter-version
768
*
769
* @description:
770
* Currently, three versions are available, two representing the bytecode
771
* interpreter with subpixel hinting support (old 'Infinality' code and
772
* new stripped-down and higher performance 'minimal' code) and one
773
* without, respectively. The default is subpixel support if
774
* `TT_CONFIG_OPTION_SUBPIXEL_HINTING` is defined, and no subpixel
775
* support otherwise (since it isn't available then).
776
*
777
* If subpixel hinting is on, many TrueType bytecode instructions behave
778
* differently compared to B/W or grayscale rendering (except if 'native
779
* ClearType' is selected by the font). Microsoft's main idea is to
780
* render at a much increased horizontal resolution, then sampling down
781
* the created output to subpixel precision. However, many older fonts
782
* are not suited to this and must be specially taken care of by applying
783
* (hardcoded) tweaks in Microsoft's interpreter.
784
*
785
* Details on subpixel hinting and some of the necessary tweaks can be
786
* found in Greg Hitchcock's whitepaper at
787
* 'https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx'.
788
* Note that FreeType currently doesn't really 'subpixel hint' (6x1, 6x2,
789
* or 6x5 supersampling) like discussed in the paper. Depending on the
790
* chosen interpreter, it simply ignores instructions on vertical stems
791
* to arrive at very similar results.
792
*
793
* @note:
794
* This property can be used with @FT_Property_Get also.
795
*
796
* This property can be set via the `FREETYPE_PROPERTIES` environment
797
* variable (using values '35', '38', or '40').
798
*
799
* @example:
800
* The following example code demonstrates how to deactivate subpixel
801
* hinting (omitting the error handling).
802
*
803
* ```
804
* FT_Library library;
805
* FT_Face face;
806
* FT_UInt interpreter_version = TT_INTERPRETER_VERSION_35;
807
*
808
*
809
* FT_Init_FreeType( &library );
810
*
811
* FT_Property_Set( library, "truetype",
812
* "interpreter-version",
813
* &interpreter_version );
814
* ```
815
*
816
* @since:
817
* 2.5
818
*/
819
820
821
/**************************************************************************
822
*
823
* @property:
824
* spread
825
*
826
* @description:
827
* This property of the 'sdf' and 'bsdf' renderers defines how the signed
828
* distance field (SDF) is represented in the output bitmap. The output
829
* values are calculated as follows, '128 * ( SDF / spread + 1 )', with
830
* the result clamped to the 8-bit range [0..255]. Therefore, 'spread'
831
* is also the maximum euclidean distance from the edge after which the
832
* values are clamped. The spread is specified in pixels with the
833
* default value of 8. For accurate SDF texture mapping (interpolation),
834
* the spread should be large enough to accommodate the target grid unit.
835
*
836
* @example:
837
* The following example code demonstrates how to set the SDF spread
838
* (omitting the error handling).
839
*
840
* ```
841
* FT_Library library;
842
* FT_Int spread = 2;
843
*
844
*
845
* FT_Init_FreeType( &library );
846
*
847
* FT_Property_Set( library, "sdf", "spread", &spread );
848
* ```
849
*
850
* @note:
851
* FreeType has two rasterizers for generating SDF, namely:
852
*
853
* 1. `sdf` for generating SDF directly from glyph's outline, and
854
*
855
* 2. `bsdf` for generating SDF from rasterized bitmaps.
856
*
857
* Depending on the glyph type (i.e., outline or bitmap), one of the two
858
* rasterizers is chosen at runtime and used for generating SDFs. To
859
* force the use of `bsdf` you should render the glyph with any of the
860
* FreeType's other rendering modes (e.g., `FT_RENDER_MODE_NORMAL`) and
861
* then re-render with `FT_RENDER_MODE_SDF`.
862
*
863
* There are some issues with stability and possible failures of the SDF
864
* renderers (specifically `sdf`).
865
*
866
* 1. The `sdf` rasterizer is sensitive to really small features (e.g.,
867
* sharp turns that are less than 1~pixel) and imperfections in the
868
* glyph's outline, causing artifacts in the final output.
869
*
870
* 2. The `sdf` rasterizer has limited support for handling intersecting
871
* contours and *cannot* handle self-intersecting contours whatsoever.
872
* Self-intersection happens when a single connected contour
873
* intersects itself at some point; having these in your font
874
* definitely poses a problem to the rasterizer and cause artifacts,
875
* too.
876
*
877
* 3. Generating SDF for really small glyphs may result in undesirable
878
* output; the pixel grid (which stores distance information) becomes
879
* too coarse.
880
*
881
* 4. Since the output buffer is normalized, precision at smaller spreads
882
* is greater than precision at larger spread values because the
883
* output range of [0..255] gets mapped to a smaller SDF range. A
884
* spread of~2 should be sufficient in most cases.
885
*
886
* Points (1) and (2) can be avoided by using the `bsdf` rasterizer,
887
* which is more stable than the `sdf` rasterizer in general.
888
*
889
* @since:
890
* 2.11
891
*/
892
893
894
/**************************************************************************
895
*
896
* @property:
897
* svg-hooks
898
*
899
* @description:
900
* Set up the interface between FreeType and an extern SVG rendering
901
* library like 'librsvg'. All details on the function hooks can be
902
* found in section @svg_fonts.
903
*
904
* @example:
905
* The following example code expects that the four hook functions
906
* `svg_*` are defined elsewhere. Error handling is omitted, too.
907
*
908
* ```
909
* FT_Library library;
910
* SVG_RendererHooks hooks = {
911
* (SVG_Lib_Init_Func)svg_init,
912
* (SVG_Lib_Free_Func)svg_free,
913
* (SVG_Lib_Render_Func)svg_render,
914
* (SVG_Lib_Preset_Slot_Func)svg_preset_slot };
915
*
916
*
917
* FT_Init_FreeType( &library );
918
*
919
* FT_Property_Set( library, "ot-svg",
920
* "svg-hooks", &hooks );
921
* ```
922
*
923
* @since:
924
* 2.12
925
*/
926
927
928
/**************************************************************************
929
*
930
* @property:
931
* glyph-to-script-map
932
*
933
* @description:
934
* **Experimental only**
935
*
936
* The auto-hinter provides various script modules to hint glyphs.
937
* Examples of supported scripts are Latin or CJK. Before a glyph is
938
* auto-hinted, the Unicode character map of the font gets examined, and
939
* the script is then determined based on Unicode character ranges, see
940
* below.
941
*
942
* OpenType fonts, however, often provide much more glyphs than character
943
* codes (small caps, superscripts, ligatures, swashes, etc.), to be
944
* controlled by so-called 'features'. Handling OpenType features can be
945
* quite complicated and thus needs a separate library on top of
946
* FreeType.
947
*
948
* The mapping between glyph indices and scripts (in the auto-hinter
949
* sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an array
950
* with `num_glyphs` elements, as found in the font's @FT_Face structure.
951
* The `glyph-to-script-map` property returns a pointer to this array,
952
* which can be modified as needed. Note that the modification should
953
* happen before the first glyph gets processed by the auto-hinter so
954
* that the global analysis of the font shapes actually uses the modified
955
* mapping.
956
*
957
* @example:
958
* The following example code demonstrates how to access it (omitting the
959
* error handling).
960
*
961
* ```
962
* FT_Library library;
963
* FT_Face face;
964
* FT_Prop_GlyphToScriptMap prop;
965
*
966
*
967
* FT_Init_FreeType( &library );
968
* FT_New_Face( library, "foo.ttf", 0, &face );
969
*
970
* prop.face = face;
971
*
972
* FT_Property_Get( library, "autofitter",
973
* "glyph-to-script-map", &prop );
974
*
975
* // adjust `prop.map' as needed right here
976
*
977
* FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
978
* ```
979
*
980
* @since:
981
* 2.4.11
982
*
983
*/
984
985
986
/**************************************************************************
987
*
988
* @enum:
989
* FT_AUTOHINTER_SCRIPT_XXX
990
*
991
* @description:
992
* **Experimental only**
993
*
994
* A list of constants used for the @glyph-to-script-map property to
995
* specify the script submodule the auto-hinter should use for hinting a
996
* particular glyph.
997
*
998
* @values:
999
* FT_AUTOHINTER_SCRIPT_NONE ::
1000
* Don't auto-hint this glyph.
1001
*
1002
* FT_AUTOHINTER_SCRIPT_LATIN ::
1003
* Apply the latin auto-hinter. For the auto-hinter, 'latin' is a very
1004
* broad term, including Cyrillic and Greek also since characters from
1005
* those scripts share the same design constraints.
1006
*
1007
* By default, characters from the following Unicode ranges are
1008
* assigned to this submodule.
1009
*
1010
* ```
1011
* U+0020 - U+007F // Basic Latin (no control characters)
1012
* U+00A0 - U+00FF // Latin-1 Supplement (no control characters)
1013
* U+0100 - U+017F // Latin Extended-A
1014
* U+0180 - U+024F // Latin Extended-B
1015
* U+0250 - U+02AF // IPA Extensions
1016
* U+02B0 - U+02FF // Spacing Modifier Letters
1017
* U+0300 - U+036F // Combining Diacritical Marks
1018
* U+0370 - U+03FF // Greek and Coptic
1019
* U+0400 - U+04FF // Cyrillic
1020
* U+0500 - U+052F // Cyrillic Supplement
1021
* U+1D00 - U+1D7F // Phonetic Extensions
1022
* U+1D80 - U+1DBF // Phonetic Extensions Supplement
1023
* U+1DC0 - U+1DFF // Combining Diacritical Marks Supplement
1024
* U+1E00 - U+1EFF // Latin Extended Additional
1025
* U+1F00 - U+1FFF // Greek Extended
1026
* U+2000 - U+206F // General Punctuation
1027
* U+2070 - U+209F // Superscripts and Subscripts
1028
* U+20A0 - U+20CF // Currency Symbols
1029
* U+2150 - U+218F // Number Forms
1030
* U+2460 - U+24FF // Enclosed Alphanumerics
1031
* U+2C60 - U+2C7F // Latin Extended-C
1032
* U+2DE0 - U+2DFF // Cyrillic Extended-A
1033
* U+2E00 - U+2E7F // Supplemental Punctuation
1034
* U+A640 - U+A69F // Cyrillic Extended-B
1035
* U+A720 - U+A7FF // Latin Extended-D
1036
* U+FB00 - U+FB06 // Alphab. Present. Forms (Latin Ligatures)
1037
* U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
1038
* U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
1039
* ```
1040
*
1041
* FT_AUTOHINTER_SCRIPT_CJK ::
1042
* Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
1043
* Vietnamese, and some other scripts.
1044
*
1045
* By default, characters from the following Unicode ranges are
1046
* assigned to this submodule.
1047
*
1048
* ```
1049
* U+1100 - U+11FF // Hangul Jamo
1050
* U+2E80 - U+2EFF // CJK Radicals Supplement
1051
* U+2F00 - U+2FDF // Kangxi Radicals
1052
* U+2FF0 - U+2FFF // Ideographic Description Characters
1053
* U+3000 - U+303F // CJK Symbols and Punctuation
1054
* U+3040 - U+309F // Hiragana
1055
* U+30A0 - U+30FF // Katakana
1056
* U+3100 - U+312F // Bopomofo
1057
* U+3130 - U+318F // Hangul Compatibility Jamo
1058
* U+3190 - U+319F // Kanbun
1059
* U+31A0 - U+31BF // Bopomofo Extended
1060
* U+31C0 - U+31EF // CJK Strokes
1061
* U+31F0 - U+31FF // Katakana Phonetic Extensions
1062
* U+3200 - U+32FF // Enclosed CJK Letters and Months
1063
* U+3300 - U+33FF // CJK Compatibility
1064
* U+3400 - U+4DBF // CJK Unified Ideographs Extension A
1065
* U+4DC0 - U+4DFF // Yijing Hexagram Symbols
1066
* U+4E00 - U+9FFF // CJK Unified Ideographs
1067
* U+A960 - U+A97F // Hangul Jamo Extended-A
1068
* U+AC00 - U+D7AF // Hangul Syllables
1069
* U+D7B0 - U+D7FF // Hangul Jamo Extended-B
1070
* U+F900 - U+FAFF // CJK Compatibility Ideographs
1071
* U+FE10 - U+FE1F // Vertical forms
1072
* U+FE30 - U+FE4F // CJK Compatibility Forms
1073
* U+FF00 - U+FFEF // Halfwidth and Fullwidth Forms
1074
* U+1B000 - U+1B0FF // Kana Supplement
1075
* U+1D300 - U+1D35F // Tai Xuan Hing Symbols
1076
* U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
1077
* U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
1078
* U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
1079
* U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
1080
* U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
1081
* ```
1082
*
1083
* FT_AUTOHINTER_SCRIPT_INDIC ::
1084
* Apply the indic auto-hinter, covering all major scripts from the
1085
* Indian sub-continent and some other related scripts like Thai, Lao,
1086
* or Tibetan.
1087
*
1088
* By default, characters from the following Unicode ranges are
1089
* assigned to this submodule.
1090
*
1091
* ```
1092
* U+0900 - U+0DFF // Indic Range
1093
* U+0F00 - U+0FFF // Tibetan
1094
* U+1900 - U+194F // Limbu
1095
* U+1B80 - U+1BBF // Sundanese
1096
* U+A800 - U+A82F // Syloti Nagri
1097
* U+ABC0 - U+ABFF // Meetei Mayek
1098
* U+11800 - U+118DF // Sharada
1099
* ```
1100
*
1101
* Note that currently Indic support is rudimentary only, missing blue
1102
* zone support.
1103
*
1104
* @since:
1105
* 2.4.11
1106
*
1107
*/
1108
#define FT_AUTOHINTER_SCRIPT_NONE 0
1109
#define FT_AUTOHINTER_SCRIPT_LATIN 1
1110
#define FT_AUTOHINTER_SCRIPT_CJK 2
1111
#define FT_AUTOHINTER_SCRIPT_INDIC 3
1112
1113
1114
/**************************************************************************
1115
*
1116
* @struct:
1117
* FT_Prop_GlyphToScriptMap
1118
*
1119
* @description:
1120
* **Experimental only**
1121
*
1122
* The data exchange structure for the @glyph-to-script-map property.
1123
*
1124
* @since:
1125
* 2.4.11
1126
*
1127
*/
1128
typedef
struct
FT_Prop_GlyphToScriptMap_
1129
{
1130
FT_Face
face
;
1131
FT_UShort
*
map
;
1132
1133
}
FT_Prop_GlyphToScriptMap
;
1134
1135
1136
/**************************************************************************
1137
*
1138
* @property:
1139
* fallback-script
1140
*
1141
* @description:
1142
* **Experimental only**
1143
*
1144
* If no auto-hinter script module can be assigned to a glyph, a fallback
1145
* script gets assigned to it (see also the @glyph-to-script-map
1146
* property). By default, this is @FT_AUTOHINTER_SCRIPT_CJK. Using the
1147
* `fallback-script` property, this fallback value can be changed.
1148
*
1149
* @note:
1150
* This property can be used with @FT_Property_Get also.
1151
*
1152
* It's important to use the right timing for changing this value: The
1153
* creation of the glyph-to-script map that eventually uses the fallback
1154
* script value gets triggered either by setting or reading a
1155
* face-specific property like @glyph-to-script-map, or by auto-hinting
1156
* any glyph from that face. In particular, if you have already created
1157
* an @FT_Face structure but not loaded any glyph (using the
1158
* auto-hinter), a change of the fallback script will affect this face.
1159
*
1160
* @example:
1161
* ```
1162
* FT_Library library;
1163
* FT_UInt fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
1164
*
1165
*
1166
* FT_Init_FreeType( &library );
1167
*
1168
* FT_Property_Set( library, "autofitter",
1169
* "fallback-script", &fallback_script );
1170
* ```
1171
*
1172
* @since:
1173
* 2.4.11
1174
*
1175
*/
1176
1177
1178
/**************************************************************************
1179
*
1180
* @property:
1181
* default-script
1182
*
1183
* @description:
1184
* **Experimental only**
1185
*
1186
* If FreeType gets compiled with `FT_CONFIG_OPTION_USE_HARFBUZZ` to make
1187
* the HarfBuzz library access OpenType features for getting better glyph
1188
* coverages, this property sets the (auto-fitter) script to be used for
1189
* the default (OpenType) script data of a font's GSUB table. Features
1190
* for the default script are intended for all scripts not explicitly
1191
* handled in GSUB; an example is a 'dlig' feature, containing the
1192
* combination of the characters 'T', 'E', and 'L' to form a 'TEL'
1193
* ligature.
1194
*
1195
* By default, this is @FT_AUTOHINTER_SCRIPT_LATIN. Using the
1196
* `default-script` property, this default value can be changed.
1197
*
1198
* @note:
1199
* This property can be used with @FT_Property_Get also.
1200
*
1201
* It's important to use the right timing for changing this value: The
1202
* creation of the glyph-to-script map that eventually uses the default
1203
* script value gets triggered either by setting or reading a
1204
* face-specific property like @glyph-to-script-map, or by auto-hinting
1205
* any glyph from that face. In particular, if you have already created
1206
* an @FT_Face structure but not loaded any glyph (using the
1207
* auto-hinter), a change of the default script will affect this face.
1208
*
1209
* @example:
1210
* ```
1211
* FT_Library library;
1212
* FT_UInt default_script = FT_AUTOHINTER_SCRIPT_NONE;
1213
*
1214
*
1215
* FT_Init_FreeType( &library );
1216
*
1217
* FT_Property_Set( library, "autofitter",
1218
* "default-script", &default_script );
1219
* ```
1220
*
1221
* @since:
1222
* 2.5.3
1223
*
1224
*/
1225
1226
1227
/**************************************************************************
1228
*
1229
* @property:
1230
* increase-x-height
1231
*
1232
* @description:
1233
* For ppem values in the range 6~<= ppem <= `increase-x-height`, round
1234
* up the font's x~height much more often than normally. If the value is
1235
* set to~0, which is the default, this feature is switched off. Use
1236
* this property to improve the legibility of small font sizes if
1237
* necessary.
1238
*
1239
* @note:
1240
* This property can be used with @FT_Property_Get also.
1241
*
1242
* Set this value right after calling @FT_Set_Char_Size, but before
1243
* loading any glyph (using the auto-hinter).
1244
*
1245
* @example:
1246
* ```
1247
* FT_Library library;
1248
* FT_Face face;
1249
* FT_Prop_IncreaseXHeight prop;
1250
*
1251
*
1252
* FT_Init_FreeType( &library );
1253
* FT_New_Face( library, "foo.ttf", 0, &face );
1254
* FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
1255
*
1256
* prop.face = face;
1257
* prop.limit = 14;
1258
*
1259
* FT_Property_Set( library, "autofitter",
1260
* "increase-x-height", &prop );
1261
* ```
1262
*
1263
* @since:
1264
* 2.4.11
1265
*
1266
*/
1267
1268
1269
/**************************************************************************
1270
*
1271
* @struct:
1272
* FT_Prop_IncreaseXHeight
1273
*
1274
* @description:
1275
* The data exchange structure for the @increase-x-height property.
1276
*
1277
*/
1278
typedef
struct
FT_Prop_IncreaseXHeight_
1279
{
1280
FT_Face
face
;
1281
FT_UInt
limit
;
1282
1283
}
FT_Prop_IncreaseXHeight
;
1284
1285
1286
/**************************************************************************
1287
*
1288
* @property:
1289
* warping
1290
*
1291
* @description:
1292
* **Obsolete**
1293
*
1294
* This property was always experimental and probably never worked
1295
* correctly. It was entirely removed from the FreeType~2 sources. This
1296
* entry is only here for historical reference.
1297
*
1298
* Warping only worked in 'normal' auto-hinting mode replacing it. The
1299
* idea of the code was to slightly scale and shift a glyph along the
1300
* non-hinted dimension (which is usually the horizontal axis) so that as
1301
* much of its segments were aligned (more or less) to the grid. To find
1302
* out a glyph's optimal scaling and shifting value, various parameter
1303
* combinations were tried and scored.
1304
*
1305
* @since:
1306
* 2.6
1307
*
1308
*/
1309
1310
1311
/* */
1312
1313
1314
FT_END_HEADER
1315
1316
1317
#endif
/* FTDRIVER_H_ */
1318
1319
1320
/* END */
FT_Prop_IncreaseXHeight
struct FT_Prop_IncreaseXHeight_ FT_Prop_IncreaseXHeight
FT_Prop_GlyphToScriptMap
struct FT_Prop_GlyphToScriptMap_ FT_Prop_GlyphToScriptMap
FT_END_HEADER
#define FT_END_HEADER
Definition
ftheader.h:57
FT_BEGIN_HEADER
#define FT_BEGIN_HEADER
Definition
ftheader.h:37
FT_UShort
unsigned short FT_UShort
Definition
fttypes.h:212
FT_UInt
unsigned int FT_UInt
Definition
fttypes.h:234
FT_FaceRec_
Definition
freetype.h:1230
FT_Prop_GlyphToScriptMap_
Definition
ftdriver.h:1129
FT_Prop_GlyphToScriptMap_::face
FT_Face face
Definition
ftdriver.h:1130
FT_Prop_GlyphToScriptMap_::map
FT_UShort * map
Definition
ftdriver.h:1131
FT_Prop_IncreaseXHeight_
Definition
ftdriver.h:1279
FT_Prop_IncreaseXHeight_::limit
FT_UInt limit
Definition
ftdriver.h:1281
FT_Prop_IncreaseXHeight_::face
FT_Face face
Definition
ftdriver.h:1280
nix
store
w4wi2ik0fkz57b7i8ds4fr1jnj0333j0-freetype-2.13.3-dev
include
freetype2
freetype
ftdriver.h
Generated by
1.10.0