1 CHANGES BETWEEN 2.10.3 and 2.10.4
5 - A heap buffer overflow has been found in the handling of embedded
6 PNG bitmaps, introduced in FreeType version 2.6.
8 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-15999
10 If you use option FT_CONFIG_OPTION_USE_PNG you should upgrade
14 ======================================================================
16 CHANGES BETWEEN 2.10.2 and 2.10.3
20 - New flag `FT_OUTLINE_OVERLAP'. If set, make the smooth rasterizer
21 do 4x4 oversampling to mitigate artifacts in pixels partially
22 covered by overlapping contours. Note that this at least
23 quadruples the rendering time.
25 If a glyph in a TrueType font has the `OVERLAP_SIMPLE' or
26 `OVERLAP_COMPOUND' bit set, FreeType automatically selects this
32 - Using the arcane method of including FreeType header files with
33 macros like `FT_FREETYPE_H' is no longer mandatory (but retained
34 as an optional feature for backward compatibility).
36 - Support for building the library with Meson. Building the demo
37 programs with Meson will follow in a forthcoming release.
39 - Minor improvements to the B/W rasterizer.
41 - Auto-hinter support for Medefaidrin script.
43 - Fix various memory leaks (mainly for CFF) and other issues that
44 might cause crashes in rare circumstances.
46 - Jam support has been removed.
48 - In `ftview', custom LCD filter values are now normalized and
49 balanced. Unorthodox filters are still available through the `-L'
52 - The GUI demo programs can now be resized.
54 - Demo programs that accept command line option `-k' can now handle
55 function keys, too. The corresponding character codes start with
56 0xF1. As an example, the POSIX shell syntax (accepted by bash,
61 emulates the pressing of function key `F3' followed by key `q'.
64 ======================================================================
66 CHANGES BETWEEN 2.10.1 and 2.10.2
70 - Support of WOFF2 fonts. This code contribution was Nikhil
71 Ramakrishnan's GSoC 2019 project.
76 - Function `FT_Get_Var_Axis_Flags' returned random data for Type 1
79 - Type 1 fonts with non-integer metrics are now supported by the new
80 (CFF) engine introduced in FreeType 2.9.
82 - Drop support for Python 2 in Freetype's API reference generator
83 `docwriter' (Python >= 3.5 is required for targets `make refdoc'
84 and `make refdoc-venv').
86 - Auto-hinter support for Hanifi Rohingya.
88 - Document the `FT2_KEEP_ALIVE' debugging environment variable.
90 - The Visual C++ (and Visual C) project files for Windows builds no
91 longer generate libraries that contain the FreeType version in its
92 filenames. Instead, a resource file gets used to make the
93 libraries contain the corresponding information.
95 - The next release will remove Jam build support.
97 - The `ftbench' demo program has a new test for testing the
98 `FT_Glyph_Stroke' functionality.
101 ======================================================================
103 CHANGES BETWEEN 2.10.0 and 2.10.1
105 I. IMPORTANT BUG FIXES
107 - The bytecode hinting of OpenType variation fonts was flawed, since
108 the data in the `CVAR' table wasn't correctly applied.
113 - Auto-hinter support for Mongolian.
115 - For distribution, `.tar.bz2' packages are replaced with `.tar.xz'
118 - The handling of the default character in PCF fonts as introduced
119 in version 2.10.0 was partially broken, causing premature abortion
120 of charmap iteration for many fonts.
122 - If `FT_Set_Named_Instance' was called with the same arguments
123 twice in a row, the function returned an incorrect error code the
126 - Direct rendering using FT_RASTER_FLAG_DIRECT crashed (bug
127 introduced in version 2.10.0).
129 - Increased precision while computing OpenType font variation
132 - The flattening algorithm of cubic Bezier curves was slightly
133 changed to make it faster. This can cause very subtle rendering
134 changes, which aren't noticeable by the eye, however.
136 - The auto-hinter now disables hinting if there are blue zones
137 defined for a `style' (i.e., a certain combination of a script and
138 its related typographic features) but the font doesn't contain any
139 characters needed to set up at least one blue zone.
141 - The `ftmulti' demo program now supports multiple hidden axes with
144 - `ftview', `ftstring', and `ftgrid' got a `-k' command line option
145 to emulate a sequence of keystrokes at start-up.
147 - `ftview', `ftstring', and `ftgrid' now support screen dumping to a
150 - The bytecode debugger, `ttdebug', now supports variation TrueType
151 fonts; a variation font instance can be selected with the new `-d'
155 ======================================================================
157 CHANGES BETWEEN 2.9.1 and 2.10.0
161 - A bunch of new functions has been added to access and process
162 COLR/CPAL data of OpenType fonts with color-layered glyphs.
165 Retrieve color palette data.
167 Select and activate a color palette for color-layered
169 FT_Palette_Set_Foreground_Color
170 Set text foreground color for palette index 0xFFFF.
172 FT_Get_Color_Glyph_Layer
173 Get color layers for a given glyph (using an interator
177 Blend one bitmap onto another with a given color.
179 - An experimental feature is the new behaviour of the
180 `FT_LOAD_COLOR' load flag for color-layered glyphs: Internally
181 it sets a flag so that if `FT_Render_Glyph' is called with
182 `FT_RENDER_MODE_NORMAL' (or `FT_Load_Glyph' with
183 `FT_LOAD_RENDER'), a default blending of the color glyph layers
184 will happen automatically for convenience.
186 - As a GSoC 2018 project, Nikhil Ramakrishnan completely
187 overhauled and modernized the API reference.
192 - The logic for computing the global ascender, descender, and
193 height of OpenType fonts has been slightly adjusted for
196 . If the `useTypoMetrics' flag (i.e., bit 7 in the `fsSelection'
197 field) in the `OS/2' table is set, use the `sTypo' fields in
198 `OS/2' unconditionally.
199 . Otherwise use the metrics data from the `hhea' table (if not
201 . Otherwise use the `sTypo' fields from the `OS/2' table (if not
203 . Otherwise use the `usWin' data from the `OS/2' table as a last
206 Variable fonts will apply the `MVAR' deltas to whichever metrics
209 - `TT_Set_MM_Blend' could fail if call repeatedly with the same
212 - The precision of handling deltas in Variation Fonts has been
213 increased. The problem did only show up with multidimensional
216 - New function `FT_Library_SetLcdGeometry' to set up the geometry
219 - FreeType now uses the `defaultChar' property of PCF fonts to set
220 the glyph for the undefined character at glyph index 0 (as
221 FreeType already does for all other supported font formats). As
222 a consequence, the order of glyphs of a PCF font if accessed
223 with FreeType can be different now compared to previous
226 This change doesn't affect PCF font access with cmaps.
228 - `FT_Select_Charmap' has been changed to allow parameter value
229 `FT_ENCODING_NONE', which is valid for BDF, PCF, and Windows FNT
230 formats to access built-in cmaps that don't have a predefined
233 - A previously reserved field in the `FT_GlyphSlotRec' structure
234 now holds the glyph index.
236 - On Win32 platforms, the use of `_DLL' to build the library has
237 been replaced with `DLL_EXPORT' and `DLL_IMPORT'.
239 - The usual round of fuzzer bug fixes to better reject malformed
242 - `FT_Outline_New_Internal' and `FT_Outline_Done_Internal' have
243 been removed. These two functions were public by oversight only
244 and were never documented.
246 - A new function `FT_Error_String' returns descriptions of error
247 codes if configuration macro FT_CONFIG_OPTION_ERROR_STRINGS is
250 - `FT_Set_MM_WeightVector' and `FT_Get_MM_WeightVector' are new
251 functions limited to Adobe MultiMaster fonts to directly set and
252 get the weight vector.
254 - Support for Position Independent Code as needed by systems that
255 prohibit automatic address fixups, such as BREW, has been
256 removed. [Compilation with modern compilers that use flags like
257 `-fPIC' or `-fPIE' is not affected.]
259 - The `ftdump' demo program has new options `-c' and `-C' to
260 display charmaps in compact and detailed format, respectively.
261 Option `-V' has been removed.
263 - The `ftview', `ftstring', and `ftgrid' demo programs use a new
264 command line option `-d' to specify the program window's width,
265 height, and color depth.
267 - The `ftview' demo program now displays red boxes for zero-width
270 - `ftglyph' has limited support to display fonts with
271 color-layered glyphs. This will be improved later on.
273 - `ftgrid' can now display bitmap fonts also.
275 - The `ttdebug' demo program has a new option `-f' to select a
276 member of a TrueType collection (TTC).
278 - Other various improvements to the demo programs.
281 ======================================================================
283 CHANGES BETWEEN 2.9 and 2.9.1
285 I. IMPORTANT BUG FIXES
287 - Type 1 fonts containing flex features were not rendered
288 correctly (bug introduced in version 2.9).
290 - CVE-2018-6942: Older FreeType versions can crash with certain
291 malformed variation fonts.
293 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6942
298 - Bug fix: Multiple calls to `FT_Get_MM_Var' returned garbage.
300 - The base extensions `ftlcdfil' and `ftfntfmt' are now part of
301 the base module (and thus no longer configurable in file
304 - Emboldening of bitmaps didn't work correctly sometimes, showing
305 various artifacts (bug introduced in version 2.8.1).
307 - Use of the `freetype-config' script to get compilation and
308 linking options is deprecated since it doesn't support
309 cross-compiling, among other deficiencies. Instead, you should
310 use the `pkg-config' interface.
312 The `configure' script no longer installs `freetype-config' by
313 default. For backward compatibility, a new configure option
314 `--enable-freetype-config' is provided that reverts this
317 - The auto-hinter script ranges have been updated for Unicode 11.
318 No support for new scripts have been added, however, with the
319 exception of Georgian Mtavruli.
321 - Support for cmake has been improved.
323 - The next release will remove support for Position Independent
324 Code as needed by systems that prohibit automatic address
325 fixups, such as BREW. [Compilation with modern compilers that
326 use flags like `-fPIC' or `-fPIE' is not affected.]
329 ======================================================================
331 CHANGES BETWEEN 2.8.1 and 2.9
333 I. IMPORTANT BUG FIXES
335 - Advance width values of variation fonts were often wrong.
337 - More fixes for variation font support; you should update to this
338 version if you want to support them.
341 II. IMPORTANT CHANGES
343 - As a GSoC project, Ewald Hew extended the new (Adobe) CFF engine
344 to handle Type 1 fonts also, thus greatly improving the
345 rendering of this format. This is the new default. The old
346 engine is still available if the configuration macro
347 `T1_CONFIG_OPTION_OLD_ENGINE' gets defined; using the
348 `hinting-engine' property of the `type1' driver module you can
349 then switch between the two engines.
351 - A new function, `FT_Set_Named_Instance', can be used to set or
352 change the current named instance.
354 - Starting with this FreeType version, resetting variation
355 coordinates will return to the currently selected named
356 instance. Previously, FreeType returned to the base font (i.e.,
362 - The `face_flags' field of the `FT_Face' structure has a new bit,
363 `FT_FACE_FLAG_VARIATION', which is set if a variation font has
364 been altered with `FT_Set_MM_Design_Coordinates',
365 `FT_Set_Var_Design_Coordinates', or
366 `FT_Set_Var_Blend_Coordinates'.
368 - If the current face is a named instance, the new macro
369 `FT_IS_NAMED_INSTANCE' returns true.
371 - `FT_IS_VARIATION' is a new macro that returns true whenever a
372 face object has been altered by `FT_Set_MM_Design_Coordinates',
373 `FT_Set_Var_Design_Coordinates', or
374 `FT_Set_Var_Blend_Coordinates'.
376 - Changing the design coordinates of a variation font with
377 `FT_Set_Var_Design_Coordinates' or
378 `FT_Set_Var_Blend_Coordinates' does not influence the named
379 instance index value (only `FT_Set_Named_Instance' does that).
381 - Special PostScript names for named instances are only returned
382 if the named instance is set with `FT_Set_Named_Instance' (and
383 the font has corresponding entries in its `fvar' table). If
384 `FT_IS_VARIATION' returns true, the algorithmically derived
385 PostScript name is provided, not looking up special entries for
388 - A new function `FT_Done_MM_Var' is provided to free the memory
389 returned in a call to `FT_Get_MM_Var'.
391 - On platforms using the `configure' script, the installed
392 `ftoption.h' file now correctly reflects configuration options
393 like `--with-harfbuzz'.
395 - Better support to build FreeType as a DLL on Windows using
398 - All data specific to driver modules is now collected in a single
399 file, `FT_DRIVER_H'. Consequently, the macros
400 `FT_AUTOHINTER_H', `FT_CFF_DRIVER_H', `FT_TRUETYPE_DRIVER_H',
401 and `FT_PCF_DRIVER_H' still work but are deprecated.
403 - Some fuzzer fixes to better reject malformed fonts.
405 - The `ftbench' demo program has a new test for opening a new face
406 and loading some glyphs.
408 - The `ftbench' demo program has a new option `-j' to specify the
409 last glyph index to be used in the tests.
411 - The `ftgrid' demo program has a new option `-n' to suppress
412 display of named instances of variation fonts.
414 - The `ttdebug' demo program can now show a stack trace (key `K')
415 and switch between hexadecimal and decimal display of integers
419 ======================================================================
421 CHANGES BETWEEN 2.8 and 2.8.1
423 I. IMPORTANT BUG FIXES
425 - B/W hinting of TrueType fonts didn't work properly if
426 interpreter version 38 or 40 was selected.
428 - Some severe problems within the handling of TrueType Variation
429 Fonts were found and fixed.
431 - Function `FT_Set_Var_Design_Coordinates' didn't correctly handle
432 the case with less input coordinates than axes.
435 II. IMPORTANT CHANGES
437 - By default, FreeType now offers high quality LCD-optimized
438 output without resorting to ClearType techniques of resolution
439 tripling and filtering. In this method, called Harmony, each
440 color channel is generated separately after shifting the glyph
441 outline, capitalizing on the fact that the color grids on LCD
442 panels are shifted by a third of a pixel. This output is
443 indistinguishable from ClearType with a light 3-tap filter.
448 - Using the new function `FT_Get_Var_Axis_Flags', an application
449 can access the `flags' field of a variation axis (introduced in
450 OpenType version 1.8.2)
452 - More sanity checks.
454 - The internal representation of buffers for LCD rendering has
455 changed (to be more precise, the amount of padding gets computed
456 differently). Applications that use the FreeType API are not
459 - To reset all design axis values of a variation font to its
460 default values you can now say
462 error = FT_Set_Var_Design_Coordinates( face, 0, NULL );
464 This also works with functions `FT_Set_MM_Design_Coordinates'
465 and `FT_Set_MM_Blend_Coordinates'.
467 - FreeType now synthesizes a missing Unicode cmap for (older)
468 TrueType fonts also if glyph names are available.
470 - FreeType has improved handling of BDF fonts without the
471 `POINT_SIZE', `RESOLUTION_X', or `RESOLUTION_Y' properties; the
472 library now uses the values of the `SIZE' keyword if they are
473 missing. Previously, `SIZE' was completely ignored, and
474 FreeType used heuristic values instead.
476 - Multiple calls to `FT_Bitmap_Convert' do work now as advertised.
477 Previously, they failed with an assertion error if there was an
478 empty bitmap between non-empty ones.
480 - The warping option has moved from `light' to `normal' hinting
481 where it replaces the original hinting algorithm. The `light'
482 mode is now always void of any hinting in x-direction.
484 - 16bit compiler support is now officially ended. We didn't
485 provide any maintenance since many years, and given that there
486 were no error or problem reports either it seems that it is no
489 - The `ftgrid' demo program can now toggle the display of grid
490 lines with the `G' key.
492 - The `ftgrid' demo program can toggle a different set of colors
493 (suitable to color-blind people) with the `C' key.
495 - The `ftgrid' demo program now supports the `-e' command line
496 option to select a cmap.
498 - The `ftdump' demo program has a new command line option `-t' to
499 output the SFNT table list.
502 ======================================================================
504 CHANGES BETWEEN 2.7.1 and 2.8
508 - Support for OpenType Variation Fonts is now complete. The last
509 missing part was handling the `VVAR' and `MVAR' tables, which is
510 available with this release.
512 - A new function `FT_Face_Properties' allows the control of some
513 module and library properties per font. Currently, the
514 following properties can be handled: stem darkening, LCD filter
515 weights, and the random seed for the `random' CFF operator.
517 - The PCF change to show more `colorful' family names (introduced
518 in version 2.7.1) was too radical; it can now be configured with
519 PCF_CONFIG_OPTION_LONG_FAMILY_NAMES at compile time. If
520 activated, it can be switched off at run time with the new pcf
521 property `no-long-family-names'. If the `FREETYPE_PROPERTIES'
522 environment variable is available, you can say
524 FREETYPE_PROPERTIES=pcf:no-long-family-names=1
526 - Support for the following scripts has been added to the
529 Adlam, Avestan, Bamum, Buhid, Carian, Chakma, Coptic, Cypriot,
530 Deseret, Glagolitic, Gothic, Kayah, Lisu, N'Ko, Ol Chiki, Old
531 Turkic, Osage, Osmanya, Saurashtra, Shavian, Sundanese, Tai
532 Viet, Tifinagh, Unified Canadian Syllabics, Vai
535 II. IMPORTANT BUG FIXES
537 - `Light' auto-hinting mode no longer uses TrueType metrics for
538 TrueType fonts. This bug was introduced in version 2.4.6,
539 causing horizontal scaling also. Almost all GNU/Linux
540 distributions (with Fedora as a notable exception) disabled the
541 corresponding patch for good reasons; chances are thus high that
542 you won't notice a difference.
544 If optical backward compatibility for legacy applications is
545 necessary, you might enable the AF_CONFIG_OPTION_TT_SIZE_METRICS
546 configuration option. However, it is strongly recommended to
547 avoid that, adjusting font sizes instead.
549 - Global size metrics values in the `FT_Size_Metrics' structure
550 can be different for TrueType fonts. Reason is that in older
551 FreeType versions the metrics were rounded differently to
552 integer pixels compared to all other font formats, yielding an
553 inconsistent behaviour if you used non-native hinting. Starting
554 with this version, global size metrics for TrueType fonts are
555 handled the same as other font formats: `ascender' gets rounded
556 up, `descender' gets rounded down, `height' gets normally
557 rounded, and `max_advance' gets normally rounded, too.
559 If you need more precise values of (global) ascender, descender,
560 height, or `max_advance', please take the corresponding values
561 from the `FT_Face' structure and scale them manually.
563 - If a TrueType font gets loaded with FT_LOAD_NO_HINTING, FreeType
564 now scales the font linearly again (bug introduced in version
567 - CVE-2017-8105, CVE-2017-8287: Older FreeType versions have
568 out-of-bounds writes caused by heap-based buffer overflows
569 related to Type 1 fonts.
571 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8105
572 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-8287
577 - A new function `FT_Set_Default_Properties' has been added to
578 parse the `FREETYPE_PROPERTIES' environment variable
579 (previously, it was internal only). `FT_Init_FreeType' always
580 call this function, but `FT_New_Library' does not (similar to
581 `FT_Add_Default_Modules').
583 - To be in sync with OpenType version 1.7 and newer, macros
585 FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY,
586 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY,
587 TT_NAME_ID_PREFERRED_FAMILY
588 TT_NAME_ID_PREFERRED_SUBFAMILY
592 FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_FAMILY,
593 FT_PARAM_TAG_IGNORE_TYPOGRAPHIC_SUBFAMILY,
594 TT_NAME_ID_TYPOGRAPHIC_FAMILY
595 TT_NAME_ID_TYPOGRAPHIC_SUBFAMILY
597 The old macro names are deprecated (but still available).
599 - Support for SFNT `name' tables has been improved.
601 . Format 1 `name' tables are now supported. Use new function
602 `FT_Get_Sfnt_LangTag' to access associated language tags.
604 . Language, encoding, and name IDs have been updated to OpenType
607 - The new CFF engine now handles the `random' operator. All CFF
608 opcodes are now supported.
610 - The CFF module has a new property `random-seed' to control the
611 pseudo-random number generation for the `random' operator.
613 - The `freetype-config' script is now a wrapper of `pkg-config' if
614 this program is available in the path.
616 - FT_LOAD_TARGET_LCD is now a variant of FT_LOAD_TARGET_LIGHT;
617 this should provide better rendering results.
619 - A mode to display light auto-hinting with subpixel positioning
620 has been added to `ftdiff'.
623 ======================================================================
625 CHANGES BETWEEN 2.7 and 2.7.1
629 - Support for the new CFF2 font format as introduced with OpenType
630 1.8 has been contributed by Dave Arnolds from Adobe.
632 - Preliminary support for variation fonts as specified in OpenType
633 1.8 (in addition to the already existing support for Adobe's MM
634 and Apple's GX formats). Dave Arnolds contributed handling of
635 advance width change variation; more will come in the next
639 II. IMPORTANT BUG FIXES
641 - Handling of raw CID fonts was partially broken (bug introduced
644 - CVE-2016-10328: Older FreeType versions had an out-of-bounds
645 write caused by a heap-based buffer overflow related to the CFF
648 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-10328
653 - Some limits for TrueType bytecode execution have been tightened
654 to speed up FreeType's handling of malformed fonts, in
655 particular to quickly abort endless loops.
657 - The number of twilight points can no longer be set to an
658 arbitrarily large value.
660 - The total number of jump opcode instructions (like JMPR) with
661 negative arguments is dynamically restricted; the same holds
662 for the total number of iterations in LOOPCALL opcodes.
664 The dynamic limits are based on the number of points in a glyph
665 and the number of CVT entries. Please report if you encounter a
666 font where the selected values are not adequate.
668 - PCF family names are made more `colorful'; they now include the
669 foundry and information whether they contain wide characters.
670 For example, you no longer get `Fixed' but rather `Sony Fixed'
671 or `Misc Fixed Wide'.
673 - A new function `FT_Get_Var_Blend_Coordinates' (with its alias
674 name `FT_Get_MM_Blend_Coordinates') to retrieve the normalized
675 blend coordinates of the currently selected variation instance
676 has been added to the Multiple Masters interface.
678 - A new function `FT_Get_Var_Design_Coordinates' to retrieve the
679 design coordinates of the currently selected variation instance
680 has been added to the Multiple Masters interface.
682 - A new load flag `FT_LOAD_BITMAP_METRICS_ONLY' to retrieve bitmap
683 information without loading the (embedded) bitmap itself.
685 - Retrieving advance widths from bitmap strikes (using
686 `FT_Get_Advance' and `FT_Get_Advances') have been sped up.
688 - The usual round of fuzzer fixes to better reject malformed
691 - The `ftmulti' demo program can now switch engines with key `H'.
693 - The `ftstring' demo program can now show some built-in,
694 non-latin sample strings (to be selected with the TAB key).
696 - The `ftview' demo program can now switch between a font's
697 charmaps using the TAB key.
700 ======================================================================
702 CHANGES BETWEEN 2.6.5 and 2.7
706 - As announced earlier, the 2.7.x series now uses the new subpixel
707 hinting mode as the default, emulating a modern version of
710 This change inevitably leads to different rendering results, and
711 you might change the `TT_CONFIG_OPTION_SUBPIXEL_HINTING'
712 configuration option to adapt it to your taste (or use the new
713 `FREETYPE_PROPERTIES' environment variable). See the
714 corresponding entry below for version 2.6.4, which gives more
717 - A new option `FT_CONFIG_OPTION_ENVIRONMENT_PROPERTIES' has been
718 introduced. If set (which is the default), an environment
719 variable `FREETYPE_PROPERTIES' can be used to control driver
722 FREETYPE_PROPERTIES=truetype:interpreter-version=35 \
723 cff:no-stem-darkening=1 \
726 This allows to select, say, the subpixel hinting mode at runtime
727 for a given application. See file `ftoption.h' for more.
730 II. IMPORTANT BUG FIXES
732 - After loading a named instance of a GX variation font, the
733 `face_index' value in the returned `FT_Face' structure now
734 correctly holds the named instance index in the upper 16bits as
740 - A new macro `FT_IS_NAMED_INSTANCE' to test whether a given face
743 - More fixes to GX font handling.
745 - Apple's `GETVARIATION' bytecode operator (needed for GX
746 variation font support) has been implemented.
748 - Another round of fuzzer fixes, mainly to reject invalid fonts
751 - Handling of raw CID fonts was broken (bug introduced in version
754 - The smooth rasterizer has been streamlined to make it faster by
757 - The `ftgrid' demo program now understands command line option
758 `-d' to give start-up design coordinates.
760 - The `ftdump' demo program has a new command line option `-p' to
761 dump TrueType bytecode instructions.
764 ======================================================================
766 CHANGES BETWEEN 2.6.4 and 2.6.5
768 I. IMPORTANT BUG FIXES
770 - Compilation works again on Mac OS X (bug introduced in version
774 II. IMPORTANT CHANGES
776 - The new subpixel hinting mode is now disabled by default; it
777 will be enabled by default in the forthcoming 2.7.x series.
778 Main reason for reverting this feature is the principle of least
779 surprise: a sudden change in appearance of all fonts (even if
780 the rendering improves for almost all recent fonts) should not
781 be expected in a new micro version of a series.
784 ======================================================================
786 CHANGES BETWEEN 2.6.3 and 2.6.4
790 - A new subpixel hinting mode has been contributed by Nikolaus
791 Waxweiler, which is now the default rendering mode for TrueType
792 fonts. It implements (almost everything of) version 40 of the
795 The existing code base in FreeType (the `Infinality code') was
796 stripped to the bare minimum and all configurability removed in
797 the name of speed and simplicity. The configurability was
798 mainly aimed at legacy fonts like Arial, Times New Roman, or
799 Courier. [Legacy fonts are fonts that modify vertical stems to
800 achieve clean black-and-white bitmaps.] The new mode focuses on
801 applying a minimal set of rules to all fonts indiscriminately so
802 that modern and web fonts render well while legacy fonts render
805 Activation of the subpixel hinting support can be controlled
806 with the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration
807 option at compile time: If set to value 1, you get the old
808 Infinality mode (which was never the default due to its
809 slowness). Value 2 activates the new subpixel hinting mode, and
810 value 3 activates both. The default is value 2.
812 At run time, you can select the subpixel hinting mode with the
813 `interpreter-version' property (provided you have compiled in
814 the corresponding hinting mode); see `ftttdrv.h' for more.
816 - Support for the following scripts has been added to the
819 Armenian, Cherokee, Ethiopic, Georgian, Gujarati, Gurmukhi,
820 Malayalam, Sinhala, Tamil
825 - Type 42 fonts as created by LilyPond are now supported.
827 - Minor rendering improvements in the auto-hinter.
829 - For experimental reasons, the old CFF engine now supports all
830 CFF operators except `random', including the deprecated Multiple
831 Masters instructions. This allows the display of fonts like
832 `ITCGaramondMM-It.otf' (without font variations, though).
834 - Another round of fixes to improve handling of invalid fonts.
836 - The `ftgrid' demo program now displays the rendered pixels also;
837 this can be switched off with the `b' key. Selection of various
838 LCD filtering modes can be done with the `L' key.
840 - The demo programs have been extended to allow selection of all
841 available TrueType bytecode engines.
843 - A very early beta version of a new, Qt based demo program called
844 `ftinspect' is part of the source code bundle; it will
845 eventually supersede the other demo programs. Currently, you
846 have to compile it manually with `qmake; make'; note that many
847 features are still missing.
850 ======================================================================
852 CHANGES BETWEEN 2.6.2 and 2.6.3
856 - Khmer, Myanmar, Bengali, and Kannada script support has been
857 added to the auto-hinter.
862 - Better support of Indic scripts like Devanagari by using a
863 top-to-bottom hinting flow.
865 - All FreeType macros starting with two underscores have been
866 renamed to avoid a violation of both the C and C++ standards.
867 Example: Header macros of the form `__FOO_H__' are now called
868 `FOO_H_'. In most cases, this should be completely transparent
869 to the user. The exception to this is `__FTERRORS_H__', which
870 must be sometimes undefined by the user to get FreeType error
871 strings: Both this form and the new `FTERRORS_H_' macro are
872 accepted for backward compatibility.
874 - Minor improvements mainly to the Type 1 driver.
876 - The new CFF engine now supports all Type 2 operators except
879 - The macro `_STANDALONE_', used for compiling the B/W and smooth
880 rasterizers as stand-alone modules, has been renamed to
881 `STANDALONE_', since macro names starting with an underscore and
882 followed by an uppercase letter are reserved in both C and C++.
884 - Function `FT_Library_SetLcdFilterWeights' now also activates
885 custom LCD filter weights (instead of just adjusting them).
887 - Support for `unpatented hinting' has been completely removed:
888 Consequently, the two functions `FT_Face_CheckTrueTypePatents'
889 and `FT_Face_SetUnpatentedHinting' now return always false,
892 - The `ftgamma' demo program has been modernized; the gamma grid
893 display has been moved from `ftview' to this program.
895 - In `ftview', it is now possible to cycle through the available
899 ======================================================================
901 CHANGES BETWEEN 2.6.1 and 2.6.2
905 - The auto-hinter now supports stem darkening, to be controlled by
906 the new `no-stem-darkening' and `darkening-parameters'
907 properties. This is an experimental feature contributed by
908 Nikolaus Waxweiler, and the interface might change in a future
911 - By default, stem darkening is now switched off (for both the CFF
912 engine and the auto-hinter). The main reason is that you need
913 linear alpha blending and gamma correction to get correct
914 rendering results, and the latter is not yet available in most
915 freely available rendering stacks like X11. Applying stem
916 darkening without proper gamma correction leads to far too dark
919 - The meaning of `FT_RENDER_MODE_LIGHT' has been slightly
920 modified. It now essentially means `no hinting along the
921 horizontal axis'; in particular, no change of glyph advance
922 widths. Consequently, the auto-hinter is used for all scalable
923 font formats except for CFF. It is planned that other
924 font-specific rendering engines (TrueType, Type 1) will follow.
929 - The default LCD filter has been changed to be normalized and
932 - For better compatibility with FontConfig, function
933 `FT_Library_SetLcdFilter' accepts a new enumeration value
934 `FT_LCD_FILTER_LEGACY1' (which has the same meaning as
935 `FT_LCD_FILTER_LEGACY').
937 - A large number of bugs have been detected by using the libFuzzer
938 framework, which should further improve handling of invalid
939 fonts. Thanks again to Kostya Serebryany and Bungeman!
941 - `TT_CONFIG_OPTION_MAX_RUNNABLE_OPCODES', a new configuration
942 option, controls the maximum number of executed opcodes within a
943 bytecode program. You don't want to change this except for very
944 special situations (e.g., making a library fuzzer spend less
945 time to handle broken fonts).
947 - The smooth renderer has been made faster.
949 - The `ftstring' demo program now supports subpixel rendering; use
950 key `l' to cycle through the LCD modes.
952 - The `ftstring' demo program now supports color rendering; use
953 the `space' key to cycle through various color combinations.
955 - The graphical demo programs now use a default gamma value of 1.8
959 ======================================================================
961 CHANGES BETWEEN 2.6 and 2.6.1
963 I. IMPORTANT BUG FIXES
965 - It turned out that for CFFs only the advance widths should be
966 taken from the `htmx' table, not the side bearings. This bug,
967 introduced in version 2.6.0, makes it necessary to upgrade if
968 you are using CFFs; otherwise, you get cropped glyphs with GUI
969 interfaces like GTK or Qt.
971 - Accessing Type 42 fonts returned incorrect results if the glyph
972 order of the embedded TrueType font differs from the glyph order
973 of the Type 42 charstrings table.
976 II. IMPORTANT CHANGES
978 - The header file layout has been changed (again), moving all
979 header files except `ft2build.h' into a subdirectory tree.
981 Doing so reduces the possibility of header file name clashes
982 (e.g., FTGL's `FTGlyph.h' with FreeType's `ftglyph.h') on case
983 insensitive file systems like Mac OS X or Windows.
985 Applications that use (a) the `freetype-config' script or
986 FreeType's `freetype2.pc' file for pkg-config to get the include
987 directory for the compiler, and (b) the documented way for
988 header inclusion like
990 #include <ft2build.h>
991 #include FT_FREETYPE_H
994 don't need any change to the source code.
996 - Simple access to named instances in GX variation fonts is now
997 available (in addition to the previous method via FreeType's MM
998 interface). In the `FT_Face' structure, bits 16-30 of the
999 `face_index' field hold the current named instance index for the
1000 given face index, and bits 16-30 of `style_flags' contain the
1001 number of instances for the given face index. `FT_Open_Face'
1002 and friends also understand the extended bits of the face index
1005 You need to enable TT_CONFIG_OPTION_GX_VAR_SUPPORT for this new
1006 feature. Otherwise, bits 16-30 of the two fields are zero (or
1009 - Lao script support has been added to the auto-hinter.
1014 - The auto-hinter's Arabic script support has been enhanced.
1016 - Superscript-like and subscript-like glyphs as used by various
1017 phonetic alphabets like the IPA are now better supported by the
1020 - The TrueType bytecode interpreter now runs slightly faster.
1022 - Improved support for builds with cmake.
1024 - The function `FT_CeilFix' now always rounds towards plus
1027 - The function `FT_FloorFix' now always rounds towards minus
1030 - A new load flag `FT_LOAD_COMPUTE_METRICS' has been added; it
1031 makes FreeType ignore pre-computed metrics, as needed by font
1032 validating or font editing programs. Right now, only the
1033 TrueType module supports it to ignore data from the `hdmx'
1036 - Another round of bug fixes to better handle broken fonts, found
1037 by Kostya Serebryany <kcc@google.com>.
1040 ======================================================================
1042 CHANGES BETWEEN 2.5.5 and 2.6
1044 I. IMPORTANT CHANGES
1046 - Behdad Esfahbod contributed code for improved thread-safety,
1047 which results in the following model.
1049 * An `FT_Face' object can only be safely used from one thread at
1052 * An `FT_Library' object can now be used without modification
1053 from multiple threads at the same time.
1055 * `FT_Face' creation and destruction with the same `FT_Library'
1056 object can only be done from one thread at a time.
1058 One can use a single `FT_Library' object across threads as long
1059 as a mutex lock is used around `FT_New_Face' and `FT_Done_Face'.
1060 Any calls to `FT_Load_Glyph' and similar API are safe and do not
1061 need the lock to be held as long as the same `FT_Face' is not
1062 used from multiple threads at the same time.
1064 - Thai script support has been added to the auto-hinter.
1066 - Arabic script support has been added to the auto-hinter.
1068 - Following OpenType version 1.7, advance widths and side bearing
1069 values in CFFs (wrapped in an SFNT structure) are now always
1070 taken from the `hmtx' table.
1072 - Following OpenType version 1.7, the PostScript font name of a
1073 CFF font (wrapped in an SFNT structure) is now always taken from
1074 the `name' table. This is also true for OpenType Collections
1075 (i.e., TTCs using CFFs subfonts instead of TTFs), where it may
1076 have a significant difference.
1078 - Fonts natively hinted for ClearType are now supported, properly
1079 handling selector index 3 of the INSTCTRL bytecode instruction.
1081 - Major improvements to the GX TrueType variation font handling.
1086 - A new auto-hinter property `warping' can switch on and off the
1087 warping code if this experimental feature is compiled in (by
1088 defining the AF_CONFIG_OPTION_USE_WARPER configuration option;
1089 by default this option is now enabled but warping is switched
1092 The AF_CONFIG_OPTION_USE_WARPER option itself is an old feature,
1093 available since 2006. Warping only works in `light'
1094 auto-hinting mode. The idea of the code is to slightly scale
1095 and shift a glyph along the non-hinted dimension (which is
1096 usually the horizontal axis) so that as much of its segments are
1097 aligned (more or less) to the grid. To find out a glyph's
1098 optimal scaling and shifting value, various parameter
1099 combinations are tried and scored.
1101 See file `ftautoh.h' for more; the demo programs `ftdiff',
1102 `ftview', and `ftgrid' can toggle warping with key `w'.
1104 - Some fields in the `FTC_ImageTypeRec' structure have been
1105 changed from signed to unsigned type, which better reflects the
1106 actual usage. It is also an additional means to protect against
1109 This change doesn't break the ABI; however, it might cause
1112 - Function `FT_Bitmap_New' has been renamed to `FT_Bitmap_Init',
1113 since this name better reflects its function. For backward
1114 compatibility, the old function name is still available.
1116 - Function `FT_Get_X11_Font_Format' has been renamed to
1117 `FT_Get_Font_Format', since this name better reflects its
1118 function. For backward compatibility, the old function name is
1121 Additionally, the header file macro for this function has been
1122 renamed to `FT_FONT_FORMATS_H' (the old name `FT_XFREE86_H' is
1123 retained for backward compatibility).
1125 - Various improvements to the `ftgrid' demo program.
1127 . It can now display GX and MM fonts while interactively
1128 manipulating the axes (with keys F2, F3, and F4).
1130 . Anti-aliasing rendering modes can now be selected (with keys
1133 . The display of point numbers can be toggled with key `D'.
1135 - Various improvements to the `ftdump' demo program.
1137 . It now displays information on MM and GX variation axes.
1139 . New command line option `-u' makes it output data in utf-8
1142 - The `ftmulti' demo program can now handle up to six MM or GX
1146 ======================================================================
1148 CHANGES BETWEEN 2.5.4 and 2.5.5
1150 I. IMPORTANT BUG FIXES
1152 - Handling of uncompressed PCF files works again (bug introduced
1156 ======================================================================
1158 CHANGES BETWEEN 2.5.3 and 2.5.4
1160 I. IMPORTANT BUG FIXES
1162 - A variant of vulnerability CVE-2014-2240 was identified
1163 (cf. https://savannah.nongnu.org/bugs/?43661) and fixed in the
1164 new CFF driver. All users should upgrade.
1166 - The new auto-hinter code using HarfBuzz crashed for some invalid
1169 - Many fixes to better protect against malformed input.
1172 II. IMPORTANT CHANGES
1174 - Full auto-hinter support of the Devanagari script.
1176 - Experimental auto-hinter support of the Telugu script.
1178 - CFF stem darkening behaviour can now be controlled at build time
1179 using the eight macros
1181 CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} .
1183 - Some fields in the `FT_Bitmap' structure have been changed from
1184 signed to unsigned type, which better reflects the actual usage.
1185 It is also an additional means to protect against malformed
1188 This change doesn't break the ABI; however, it might cause
1194 - Improvements to the auto-hinter's algorithm to recognize stems
1197 - Function `FT_Get_SubGlyph_Info' always returned an error even in
1200 - Version 2.5.1 introduced major bugs in the cjk part of the
1201 auto-hinter, which are now fixed.
1203 - The `FT_Sfnt_Tag' enumeration values have been changed to
1204 uppercase, e.g. `FT_SFNT_HEAD'. The lowercase variants are
1205 deprecated. This is for orthogonality with all other
1206 enumeration (and enumeration-like) values in FreeType.
1208 - `cmake' now supports builds of FreeType as an OS X framework and
1211 - Improved project files for vc2010, introducing a property file.
1213 - The documentation generator for the API reference has been
1214 updated to produce better HTML code (with proper CSS). At the
1215 same time, the documentation got a better structure.
1217 - The FT_LOAD_BITMAP_CROP flag is obsolete; it is not used by any
1220 - The TrueType DELTAP[123] bytecode instructions now work in
1221 subpixel hinting mode as described in the ClearType whitepaper
1222 (i.e., for touched points in the non-subpixel direction).
1224 - Many small improvements to the internal arithmetic routines.
1227 ======================================================================
1229 CHANGES BETWEEN 2.5.2 and 2.5.3
1231 I. IMPORTANT BUG FIXES
1233 - A vulnerability (CVE-2014-2240) was identified and fixed in the
1234 new CFF driver (cf. https://savannah.nongnu.org/bugs/?41697).
1235 All users should upgrade.
1237 - More bug fixes related to correct positioning of composite
1240 - Many fixes to better protect against malformed input.
1243 II. IMPORTANT CHANGES
1245 - FreeType can now use the HarfBuzz library to greatly improve the
1246 auto-hinting of fonts that use OpenType features: Many glyphs
1247 that are part of such features but don't have cmap entries are
1248 now handled properly, for example small caps or superscripts.
1249 Define the configuration macro FT_CONFIG_OPTION_USE_HARFBUZZ to
1250 activate HarfBuzz support.
1252 You need HarfBuzz version 0.9.19 or newer.
1254 Note that HarfBuzz depends on FreeType; this currently causes a
1255 chicken-and-egg problem that can be solved as follows in case
1256 HarfBuzz is not yet installed on your system.
1258 1. Compile and install FreeType without the configuration
1259 macro FT_CONFIG_OPTION_USE_HARFBUZZ.
1261 2. Compile and install HarfBuzz.
1263 3. Define macro FT_CONFIG_OPTION_USE_HARFBUZZ, then compile
1264 and install FreeType again.
1266 With FreeType's `configure' script the procedure boils down to
1267 configure, build, and install FreeType, then configure, compile,
1268 and install HarfBuzz, then configure, compile, and install
1269 FreeType again (after executing `make distclean').
1271 - All libraries FreeType depends on are now checked using the
1272 `pkg-config' configuration files first, followed by alternative
1275 - The new value `auto' for the various `--with-XXX' library
1276 options (for example `--with-harfbuzz=auto') makes the
1277 `configure' script automatically link to the libraries it finds.
1278 This is now the default.
1280 - In case FreeType's `configure' script can't find a library, you
1281 can pass environment variables to circumvent pkg-config, and
1282 those variables have been harmonized as a consequence of the
1283 changes mentioned above:
1285 LIBZ -> removed; use LIBZ_CFLAGS and LIBZ_LIBS
1286 LIBBZ2 -> removed; use BZIP2_CFLAGS and BZIP2_LIBS
1287 LIBPNG_LDFLAGS -> LIBPNG_LIBS
1289 `./configure --help' shows all available environment variables.
1291 - The `freetype-config' script now understands option `--static'
1292 to emit static linking information.
1295 ======================================================================
1297 CHANGES BETWEEN 2.5.1 and 2.5.2
1299 I. IMPORTANT BUG FIXES
1301 - Improving the display of some broken TrueType fonts introduced a
1302 bug that made FreeType crash on some popular (but not fully
1303 conformant) fonts like `ahronbd.ttf'.
1305 - Another round of improvements to correct positioning and hinting
1306 of composite glyphs in TrueType fonts.
1311 - Version 2.5.1 introduced a bug in handling embedded bitmap
1312 strikes of TrueType fonts, causing garbage display under some
1315 - The `ftgrid' demo program couldn't be compiled in
1316 non-development builds.
1319 ======================================================================
1321 CHANGES BETWEEN 2.5 and 2.5.1
1323 I. IMPORTANT BUG FIXES
1325 - For some WinFNT files, the last glyph wasn't displayed but
1326 incorrectly marked as invalid.
1328 - The vertical size of glyphs was incorrectly set after a call to
1329 `FT_GlyphSlot_Embolden', resulting in clipped glyphs.
1331 - Many fields of the `PCLT' table in SFNT based fonts (if accessed
1332 with `FT_Get_Sfnt_Table') were computed incorrectly.
1334 - In TrueType fonts, hinting of composite glyphs could sometimes
1335 deliver incorrect positions of components or even distorted
1339 II. IMPORTANT CHANGES
1341 - WOFF font format support has been added.
1343 - The auto-hinter now supports Hebrew. Greek and Cyrillic support
1346 - Support for the forthcoming `OS/2' SFNT table version 5, as can
1347 be found e.g. in the `Sitka' font family for Windows 8.1.
1349 - The header file layout has been changed. After installation,
1350 all files are now located in `<prefix>/include/freetype2'.
1352 Applications that use (a) `freetype-config' or FreeType's
1353 `pkg-config' file to get the include directory for the compiler,
1354 and (b) the documented way for header inclusion like
1356 #include <ft2build.h>
1357 #include FT_FREETYPE_H
1360 don't need any change to the source code.
1365 - The stem darkening feature of the new CFF engine can now be
1366 fine-tuned with the new `darkening-parameters' property.
1368 - `ftgrid' has been updated to toggle various engines with the `H'
1369 key, similar to `ftview' and `ftdiff'.
1371 - The functionality of `ttdebug' has been greatly enhanced.
1373 . It now displays twilight, storage, and control value data; key
1374 `T' shows the twilight point table, key `S' the storage data,
1375 and key `C' the control value table.
1377 . Some keys have been reassigned from lowercase to their
1378 uppercase equivalents; for example `q' to quit the program is
1381 . Key `f' finishes the current function.
1383 . Key `R' restarts the debugger.
1385 . Keys `b' and `p' set a breakpoint.
1387 . Key `B' provides a function call backtrace.
1389 - Better support of ARMv7 and x86_64 processors.
1391 - Apple's `sbix' color bitmap format is now supported.
1393 - Improved auto-hinter rendering for many TrueType fonts,
1394 especially in the range 20-40ppem.
1396 - A new face flag `FT_FACE_FLAG_COLOR' has been added (to be
1397 accessed with the macro `FT_HAS_COLOR').
1399 - `FT_Gzip_Uncompress' (modeled after zlib's `uncompress'
1400 function) has been added; this is a by-product of the newly
1403 - Support for a build with `cmake' has been contributed by John
1404 Cary <cary@txcorp.com>.
1406 - Support for x64 builds with Visual C++ has been contributed by
1407 Kenneth Miller <kennethadammiller@yahoo.com>
1409 - Manual pages for most demo programs have been added.
1411 - The GETINFO bytecode instruction for TrueType fonts was buggy if
1412 used to retrieve subpixel hinting information. It was necessary
1413 to set selector bit 6 to get results for selector bits 7-10,
1416 - Improved computation of emulated vertical metrics for TrueType
1419 - Fixed horizontal start-up position of vertical phantom points in
1423 ======================================================================
1425 CHANGES BETWEEN 2.4.12 and 2.5
1427 I. IMPORTANT BUG FIXES
1429 - The cache manager function `FTC_Manager_Reset' didn't flush the
1433 II. IMPORTANT CHANGES
1435 - Behdad Esfahbod (on behalf of Google) contributed support for
1436 color embedded bitmaps (eg. color emoji).
1438 A new load flag, FT_LOAD_COLOR, makes FreeType load color
1439 embedded-bitmaps, following this draft specification
1441 https://color-emoji.googlecode.com/git/specification/v1.html
1443 which defines two new SFNT tables, `CBDT' and `CBLC' (named and
1444 modeled after `EBDT' and `EBLC', respectively). The color
1445 bitmaps are stored in the new FT_PIXEL_MODE_BGRA format to
1446 represent BGRA pre-multiplied sRGB images. If PNG support is
1447 available, PNG color images as defined in the same proposed
1448 specification are supported also.
1450 Note that color bitmaps are converted to grayscale if client
1451 didn't ask for color.
1453 - As announced in the previous release, the old FreeType CFF
1454 engine is now disabled by default. It can be conditionally
1455 compiled by defining the configuration macro
1456 CFF_CONFIG_OPTION_OLD_ENGINE.
1458 - As announced in the previous release, all code related to macro
1459 FT_CONFIG_OPTION_OLD_INTERNALS has been removed, thus becoming
1465 - The property API (`FT_Property_Get' and `FT_Property_Set') is
1466 now declared as stable.
1468 The exception, however, are the experimental auto-hinter
1469 properties `glyph-to-script-map' and `fallback-script' which are
1470 subject to change in a forthcoming release.
1472 - `ftview' has been updated to support color embedded bitmaps; it
1473 can be toggled on and off with key `c'. The small cache toggle
1476 - It is now possible to control the version of the TrueType
1477 hinting engine using the new `interpreter-version' property of
1478 the `truetype' module: Versions 35 and 38 (the default) are
1479 supported, which roughly corresponds to disable and enable
1480 subpixel hinting support, respectively.
1482 In both `ftview' and `ftdiff', switching between the two
1483 versions can be done with key `H'. In the `ftbench' demo
1484 program, command line option `-H' has been extended to activate
1485 the non-default interpreter version.
1487 - The `ttdebug' program has been further improved. In particular,
1488 it accepts a new command line option `-H' to select the hinting
1491 - `ftdump's verbose option has been renamed to `-V'. For all demo
1492 programs, `-v' now shows version information.
1494 - Another round of TrueType subpixel hinting fixes.
1496 - The `apinames' tool can now create an import file for NetWare.
1498 - 64bit compilation of the new CFF engine was buggy.
1500 - Some fixes to improve robustness in memory-tight situations.
1503 ======================================================================
1505 CHANGES BETWEEN 2.4.11 and 2.4.12
1507 - We have another CFF parsing and hinting engine! Written by Dave
1508 Arnold <darnold@adobe.com>, this work has been contributed by
1509 Adobe in collaboration with Google. It is vastly superior to
1510 the old CFF engine, and it will replace it in the next release.
1511 Right now, it is still off by default, and you have to
1512 explicitly select it using the new `hinting-engine' property of
1516 #include FT_MODULE_H
1517 #include FT_CFF_DRIVER_H
1520 int engine = FT_CFF_HINTING_ADOBE;
1524 FT_Property_Set( library, "cff", "hinting-engine", &engine );
1526 The code has a (mature) beta status; we encourage all users to
1527 test it and report any problems.
1529 In case you want to activate the new CFF engine unconditionally,
1533 diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
1534 index ebcf189..3f2ce6b 100644
1535 --- a/src/cff/cffobjs.c
1536 +++ b/src/cff/cffobjs.c
1537 @@ -1056,7 +1056,7 @@
1540 /* set default property values */
1541 - driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
1542 + driver->hinting_engine = FT_CFF_HINTING_ADOBE;
1543 driver->no_stem_darkening = FALSE;
1548 - The macro FT_CONFIG_OPTION_OLD_INTERNALS is no longer set by
1549 default. In the next release, we will completely remove the
1550 associated code. Please update your programs in case you are
1551 still using this macro.
1556 - The (top-level) `configure' script now respects the MAKE
1557 environment variable to specify a `make' binary. For backward
1558 compatibility, GNUMAKE still overrides MAKE, though.
1560 - The `ftview' and `ftdiff' demo programs have been redesigned,
1561 showing more options permanently on the screen, among other
1564 - Using the `H' key, it is now possible to select the CFF engine
1565 in both `ftview' and `ftdiff'.
1567 - The new command line option `-H' for `ftbench' selects the Adobe
1570 - It is now possible to directly select the LCD rendering mode
1571 with the keys `A'-`F' in `ftview'. The key mapping for cycling
1572 through LCD modes has been changed from `K' and `L' to `k' and
1573 `l', and toggling custom LCD filtering is no longer mapped to
1574 key `F' but to key `L'.
1576 - In `ftdiff', key `x' toggles between layout modes: Either use
1577 the advance width (this is new and now the default) or the
1578 bounding box information to determine line breaks.
1580 - For all demo tools, the new command line option `-v' shows the
1583 - For the demo tools with a GUI, the new command line options `-w'
1584 and `-h' select the width and the height of the output window,
1587 - The `ttdebug' program was broken and has been reactivated. Note
1588 that this program is not compiled by default.
1591 ======================================================================
1593 CHANGES BETWEEN 2.4.10 and 2.4.11
1595 I. IMPORTANT BUG FIXES
1597 - Some vulnerabilities in the BDF implementation have been fixed.
1598 Users of this font format should upgrade.
1601 II. IMPORTANT CHANGES
1603 - Subpixel hinting support has been contributed by Infinality,
1604 based on Greg Hitchcock's whitepaper at
1606 https://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
1608 Originally, it was a separate patch available from
1610 https://web.archive.org/web/20150710073951/http://www.infinality.net:80/blog/
1612 and which has been integrated.
1614 Note that ClearType support is not completely implemented! In
1615 particular, full support for the options `compatible_widths',
1616 `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode
1617 instruction) is missing.
1619 Activation of subpixel hinting support can be controlled with
1620 the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration option; it
1621 is switched off by default. This feature is still experimental;
1622 we welcome test reports!
1624 - Support for OpenType collections (OTC) has been added.
1626 - Pure CFF fonts within an SFNT wrapper are now supported.
1631 - Minor rendering improvements to the auto-hinter.
1633 - `FT_GlyphSlot_Oblique' now uses a shear angle of 12°.
1635 - Experimental support to handle `property modules', for example
1636 to control the behaviour of the auto-hinter. The API consists
1637 of two new functions, `FT_Property_Set' and `FT_Property_Get'.
1639 The code is still subject to change and should not be used for
1642 - The `ftdiff' demo program now supports UTF-8 encoded input files
1645 - Using keys `r' and `R', you can now adjust the stroker radius in
1646 the `ftview' demo program.
1648 - Other, minor fixes and improvements.
1651 ======================================================================
1653 CHANGES BETWEEN 2.4.9 and 2.4.10
1655 I. IMPORTANT BUG FIXES
1657 - Incremental glyph loading as needed by ghostscript was broken.
1662 - A new function `FT_Outline_EmboldenXY', contributed by Alexei
1665 - In the `ftview' demo program, key `e' has been replaced with `x'
1666 and `y' to embolden in the horizontal and vertical direction,
1669 - The glyph spacing computation in `FT_GlyphSlot_Embolden' (and
1670 similar code in `ftview') has been improved.
1672 - Minor improvements to the TrueType bytecode interpreter and
1673 glyph loader, the auto-hinter, and the B/W rasterizer.
1676 ======================================================================
1678 CHANGES BETWEEN 2.4.8 and 2.4.9
1680 I. IMPORTANT BUG FIXES
1682 - Another round of fixes to better handle invalid fonts. Many of
1683 them are vulnerabilities (see CVE-2012-1126 up to CVE-2012-1144
1684 and SA48320) so all users should upgrade.
1689 - The `ENCODING -1 <n>' format of BDF fonts is now supported.
1691 - For BDF fonts, support for the whole Unicode encoding range has
1694 - Better TTF support for x_ppem != y_ppem.
1696 - `FT_Get_Advances' sometimes returned bogus values.
1698 - The demo programs no longer recognize and handle default
1699 suffixes; you now have to always specify the complete font name.
1701 - Better rendering and LCD mode cycling added to `ftview'.
1704 ======================================================================
1706 CHANGES BETWEEN 2.4.7 and 2.4.8
1708 I. IMPORTANT BUG FIXES
1710 - Some vulnerabilities in handling CID-keyed PostScript fonts have
1711 been fixed; see CVE-2011-3439.
1716 - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to
1717 retrieve most of the dictionary keys in Type 1 fonts.
1720 ======================================================================
1722 CHANGES BETWEEN 2.4.6 and 2.4.7
1724 I. IMPORTANT BUG FIXES
1726 - Some vulnerabilities in handling Type 1 fonts have been fixed;
1732 - FreeType now properly handles ZapfDingbats glyph names while
1733 constructing a Unicode character map (for fonts which don't have
1737 ======================================================================
1739 CHANGES BETWEEN 2.4.5 and 2.4.6
1741 I. IMPORTANT BUG FIXES
1743 - For TrueType based fonts, the ascender and descender values were
1744 incorrect sometimes (off by a pixel if the ppem value was not a
1745 multiple of 5). Depending on the use you might now experience
1746 a different layout; the change should result in better, more
1747 consistent line spacing.
1749 - Fix CVE-2011-0226 which causes a vulnerability while handling
1752 - BDF fonts containing glyphs with negative values for ENCODING
1753 were incorrectly rejected. This bug has been introduced in
1754 FreeType version 2.2.0.
1756 - David Bevan contributed a major revision of the FreeType stroker
1759 . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.
1761 . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has
1762 been introduced to support PostScript and PDF miter joins.
1764 . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
1765 alias for FT_STROKER_LINEJOIN_MITER.
1767 . Various stroking glitches has been fixed.
1772 - SFNT bitmap fonts which contain an outline glyph for `.notdef'
1773 only no longer set the FT_FACE_FLAG_SCALABLE flag.
1776 ======================================================================
1778 CHANGES BETWEEN 2.4.4 and 2.4.5
1780 I. IMPORTANT BUG FIXES
1782 - A rendering regression for second-order Bézier curves has been
1783 fixed, introduced in 2.4.3.
1786 II. IMPORTANT CHANGES
1788 - If autohinting is not explicitly disabled, FreeType now uses
1789 the autohinter if a TrueType based font doesn't contain native
1792 - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made
1793 redundant and is simply ignored; this means that FreeType now
1794 ignores the global advance width value in TrueType fonts.
1799 - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of
1802 - Support for PCF files compressed with bzip2 has been contributed
1803 by Joel Klinghed. To make this work, the OS must provide a
1806 - Bradley Grainger contributed project and solution files in
1807 Visual Studio 2010 format.
1809 - Again some fixes to better handle broken fonts.
1811 - Some improvements to the B/W rasterizer.
1813 - Fixes to the cache module to improve robustness.
1815 - Just Fill Bugs contributed (experimental) code to compute blue
1816 zones for CJK Ideographs, improving the alignment of horizontal
1817 stems at the top or bottom edges.
1819 - The `ftgrid' demo program can now display autohinter segments,
1820 to be toggled on and off with key `s'.
1823 ======================================================================
1825 CHANGES BETWEEN 2.4.3 and 2.4.4
1827 I. IMPORTANT BUG FIXES
1829 - UVS support (TrueType/OpenType cmap format 14) support is fixed.
1830 This regression has been introduced in version 2.4.0.
1835 - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums
1836 of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when
1837 a TrueType font without family name is given. The previous fix,
1838 introduced in 2.4.3, was too rigorous, causing many subsetted
1839 fonts (mainly from PDF files) displayed badly because FreeType
1840 forced rendering with the TrueType bytecode engine instead of
1843 - Better support for 64bit platforms.
1845 - More fixes to improve handling of broken fonts.
1848 ======================================================================
1850 CHANGES BETWEEN 2.4.2 and 2.4.3
1852 I. IMPORTANT BUG FIXES
1854 - Fix rendering of certain cubic, S-shaped arcs. This regression
1855 has been introduced in version 2.4.0.
1860 - To fix the above mentioned rendering issue, a new spline
1861 flattening algorithm has been introduced which speeds up both
1862 conic and cubic arcs.
1864 - Handling of broken fonts has been further improved.
1867 ======================================================================
1869 CHANGES BETWEEN 2.4.1 and 2.4.2
1871 I. IMPORTANT BUG FIXES
1873 - A stack overflow in CFF Type2 CharStrings interpreter is fixed.
1875 - Handling Type 42 font deallocation was broken; additionally, the
1876 library is now more robust against malformed Type 42 fonts.
1881 - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and
1882 `FT_Reference_Face' (in FT_FREETYPE_H), have been added to
1883 simplify life-cycle management. A counter gets initialized to 1
1884 at the time an FT_Library (or FT_Face) structure is created.
1885 The two new functions increment the respective counter.
1886 `FT_Done_Library' and `FT_Done_Face' then only destroy a library
1887 or face if the counter is 1, otherwise they simply decrement the
1891 ======================================================================
1893 CHANGES BETWEEN 2.4.0 and 2.4.1
1895 I. IMPORTANT CHANGES
1897 - A serious bug in the CFF font module prevented display of many
1898 glyphs in CFF fonts like `MinionPro-Regular.otf'.
1901 ======================================================================
1903 CHANGES BETWEEN 2.3.12 and 2.4.0
1905 I. IMPORTANT CHANGES
1907 - Since May 2010, all patents regarding the TrueType bytecode
1908 interpreter have expired worldwide. Consequently, we now define
1909 TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
1910 TT_CONFIG_OPTION_UNPATENTED_HINTING).
1912 - A new function `FT_Library_SetLcdFilterWeights' is available to
1913 adjust the filter weights set by `FT_Library_SetLcdFilter'.
1918 - Thanks to many reports from Robert Święcki, FreeType's stability
1919 in handling broken or damaged fonts is much improved.
1921 - Support for LCD filter control has been added to the demo
1922 programs `ftdiff' and `ftview'.
1925 ======================================================================
1927 CHANGES BETWEEN 2.3.11 and 2.3.12
1929 I. IMPORTANT CHANGES
1931 - For `FT_Open_Face', new parameters are available to ignore
1932 preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
1933 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
1938 - Support for incremental font loading (controlled with the
1939 FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default.
1941 - Better support for vertical metrics.
1943 - Various minor bug fixes.
1946 ======================================================================
1948 CHANGES BETWEEN 2.3.10 and 2.3.11
1950 I. IMPORTANT BUG FIXES
1952 - Version 2.3.10 broke PCF support.
1955 ======================================================================
1957 CHANGES BETWEEN 2.3.10 and 2.3.9
1959 I. IMPORTANT BUG FIXES
1961 - If all ASCII digits in a font have the same (unscaled) width,
1962 the autohinter respects this and won't change it.
1964 - TrueType fonts are now rasterized correctly if the horizontal
1965 and vertical resolution differ.
1967 - Type 1 fonts are now handled with increased precision internally
1968 to avoid serious rounding issues if non-integral coordinates are
1971 - Horizontally condensed CFF fonts (using the font matrix) were
1972 rendered incorrectly. This bug has been introduced after
1976 II. IMPORTANT CHANGES
1978 - Support for the SFNT cmap 13 table format (as defined by the new
1979 OpenType 1.6 specification) has been added.
1981 - B/W rasterization of well-hinted TrueType fonts at small sizes
1982 has been greatly improved.
1984 - Calculation of vertical metrics in OpenType fonts has been
1990 - It is now possible to change the emboldening factor in the
1991 `ftview' demo program with keys `e' and `E'.
1993 - It is now possible to change the slant value in the `ftview'
1994 demo program with keys `s' and `S'.
1996 - The 5-levels grayscale mode of the `ftraster' module (which
1997 FreeType doesn't use by default) was broken since version 2.3.0.
1999 - Compilation of the `ftgrays' and `ftraster' modules was broken
2000 in stand-alone mode.
2002 - Various fixes for compilation on 64bit and 16bit architectures.
2005 ======================================================================
2007 CHANGES BETWEEN 2.3.9 and 2.3.8
2009 I. IMPORTANT BUG FIXES
2011 - Very unfortunately, FreeType 2.3.8 contained a change that broke
2012 its official ABI. The end result is that programs compiled
2013 against previous versions of the library, but dynamically linked
2014 to 2.3.8 can experience memory corruption if they call the
2015 `FT_Get_PS_Font_Info' function.
2017 We recommend all users to upgrade to 2.3.9 as soon as possible,
2018 or to downgrade to a previous release of the library if this is
2021 The origin of the bug is that a new field was added to the
2022 publicly defined `PS_FontInfoRec' structure. Unfortunately,
2023 objects of this type can be stack or heap allocated by callers
2024 of `FT_Get_PS_Font_Info', resulting in a memory buffer
2025 overwrite with its implementation in 2.3.8.
2027 If you want to know whether your code is vulnerable to this
2028 issue, simply search for the substrings `PS_FontInfo' and
2029 `PS_Font_Info' in your source code. If none is found, your code
2030 is safe and is not affected.
2032 The FreeType team apologizes for the problem.
2034 - The POSIX support of MacOS resource-fork fonts (Suitcase fonts
2035 and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If
2036 FreeType2 is built without Carbon framework, these fonts are not
2037 handled correctly. Version 2.3.7 didn't have this bug.
2039 - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for
2040 almost all font formats except TrueType fonts.
2042 - Fix a bug in the SFNT kerning table loader/parser which could
2043 crash the engine if certain malformed tables were encountered.
2045 - Composite SFNT bitmaps are now handled correctly.
2048 II. IMPORTANT CHANGES
2050 - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and
2051 `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed
2052 CFF fonts via CID values. This code has been contributed by
2058 - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT
2059 for empty outlines. This was incorrectly documented.
2061 - The `ftview' demo program now supports UTF-8 encoded strings.
2064 ======================================================================
2066 CHANGES BETWEEN 2.3.8 and 2.3.7
2068 I. IMPORTANT BUG FIXES
2070 - CID-keyed fonts in an SFNT wrapper were not handled correctly.
2072 - The smooth renderer produced truncated images (on the right) for
2073 outline parts with negative horizontal values. Most fonts don't
2074 contain outlines left to the y coordinate axis, but the effect
2075 was very noticeable for outlines processed with FT_Glyph_Stroke,
2076 using thick strokes.
2078 - `FT_Get_TrueType_Engine_Type' returned a wrong value if both
2079 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and
2080 TT_CONFIG_OPTION_UNPATENTED_HINTING were defined.
2082 - The `face_index' field in the `FT_Face' structure wasn't
2083 initialized properly after calling FT_Open_Face and friends with
2084 a positive face index for CFFs, WinFNTs, and, most importantly,
2085 for TrueType Collections (TTCs).
2088 II. IMPORTANT CHANGES
2090 - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts
2091 in an SFNT wrapper has been added -- such fonts are used on the
2092 Mac. The core SFNT tables `TYP1' and `CID ' are passed to the
2093 PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX',
2094 `BBOX', etc.) are not supported yet.
2096 - A new interface to extract advance values of glyphs without
2097 loading their outlines has been added. The functions are called
2098 `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file
2099 `ftadvanc.h' (to be accessed as FT_ADVANCES_H).
2101 - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been
2102 contributed by David Bevan to access the embedding and
2103 subsetting restriction information of fonts.
2108 - FT_MulFix is now an inlined function; by default, assembler code
2109 is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX
2110 and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more.
2112 - The handling of `tricky' fonts (this is, fonts which don't work
2113 with the autohinter, needing the font format's hinting engine)
2114 has been generalized and changed slightly:
2116 . A new face flag FT_FACE_FLAG_TRICKY indicates that the font
2117 format's hinting engine is necessary for correct rendering.
2118 The macro FT_IS_TRICKY can be used to check this flag.
2120 . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really
2121 force raw loading of such fonts (without hinting), both
2122 FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used --
2123 this is something which you probably never want to do.
2125 . Tricky TrueType fonts always use the bytecode interpreter,
2126 either the patented or unpatented version.
2128 - The function `FT_GlyphSlot_Own_Bitmap' has been moved from
2129 FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official'
2130 API. (The functions in FT_SYNTHESIS_H are still subject to
2133 - In the `ftdiff' demo program you can now toggle the use of
2134 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'.
2137 ======================================================================
2139 CHANGES BETWEEN 2.3.7 and 2.3.6
2141 I. IMPORTANT BUG FIXES
2143 - If the library was compiled on an i386 platform using gcc, and
2144 compiler option -O3 was given, `FT_MulFix' sometimes returned
2145 incorrect results which could have caused problems with
2146 `FT_Request_Metrics' and `FT_Select_Metrics', returning an
2147 incorrect descender size.
2149 - Pure CFFs without subfonts were scaled incorrectly if the font
2150 matrix was non-standard. This bug has been introduced in
2153 - The `style_name' field in the `FT_FaceRec' structure often
2154 contained a wrong value for Type 1 fonts. This misbehaviour
2155 has been introduced in version 2.3.6 while trying to fix
2156 another problem. [Note, however, that this value is
2157 informative only since the used algorithm to extract it is
2161 II. IMPORTANT CHANGES
2163 - Two new macros, FT_OUTLINE_SMART_DROPOUTS and
2164 FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with
2165 FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is
2166 now possible to control the dropout mode of the `raster' module
2167 (for B&W rasterization), using the `flags' field in the
2168 `FT_Outline' structure.
2170 - The TrueType bytecode interpreter now passes the dropout mode to
2171 the B&W rasterizer. This greatly increases the output for small
2172 ppem values of many fonts like `pala.ttf'.
2175 ======================================================================
2177 CHANGES BETWEEN 2.3.6 and 2.3.5
2179 I. IMPORTANT BUG FIXES
2181 - A bunch of potential security problems have been found. All
2182 users should update.
2184 - Microsoft Unicode cmaps in TrueType fonts are now always
2185 preferred over Apple cmaps. This is not a bug per se, but there
2186 exist some buggy fonts created for MS which have broken Apple
2187 cmaps. This affects only the automatic selection of FreeType;
2188 it's always possible to manually select an Apple Unicode cmap if
2191 - Many bug fixes to the TrueType bytecode interpreter.
2193 - Improved Mac support.
2195 - Subsetted CID-keyed CFFs are now supported correctly.
2197 - CID-keyed CFFs with subfonts which are scaled in a non-standard
2198 way are now handled correctly.
2200 - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
2201 the font was a Windows (bitmap) FNT/FON.
2204 II. IMPORTANT CHANGES
2206 - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
2207 access to those fields in a CID-keyed font. The code has been
2208 contributed by Derek Clegg.
2210 - George Williams contributed code to validate the new `MATH'
2211 OpenType table (within the `otvalid' module). The `ftvalid'
2212 demo program has been extended accordingly.
2214 - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
2215 has been contributed by George Williams.
2217 - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
2218 with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
2224 - Build support for symbian has been contributed.
2226 - Better WGL4 glyph name support, contributed by Sergey Tolstov.
2228 - Debugging output of the various FT_TRACEX macros is now sent to
2231 - The `ftview' demo program now provides artificial slanting too.
2233 - The `ftvalid' demo program has a new option `-f' to select the
2237 ======================================================================
2239 CHANGES BETWEEN 2.3.5 and 2.3.4
2241 I. IMPORTANT BUG FIXES
2243 - Some subglyphs in TrueType fonts were handled incorrectly due to
2244 a missing graphics state reinitialization.
2246 - Large .Z files (as distributed with some X11 packages) weren't
2247 handled correctly, making FreeType increase the heap stack in an
2250 - A large number of bugs have been fixed to avoid crashes and
2251 endless loops with invalid fonts.
2254 II. IMPORTANT CHANGES
2256 - The two new cache functions `FTC_ImageCache_LookupScaler' and
2257 `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
2258 glyphs using an `FTC_Scaler' object; this makes it possible to
2259 use fractional pixel sizes in the cache. The demo programs have
2260 been updated accordingly to use this feature.
2262 - A new API `FT_Get_CMap_Format' has been added to get the cmap
2263 format of a TrueType font. This is useful in handling PDF
2264 files. The code has been contributed by Derek Clegg.
2266 - The auto-hinter now produces better output by default for
2267 non-Latin scripts like Indic. This was done by using the CJK
2268 hinting module as the default instead of the Latin one. Thanks
2269 to Rahul Bhalerao for this suggestion.
2271 - A new API `FT_Face_CheckTrueTypePatents' has been added to find
2272 out whether a given TrueType font uses patented bytecode
2273 instructions. The `ft2demos' bundle contains a new program
2274 called `ftpatchk' which demonstrates its usage.
2276 - A new API `FT_Face_SetUnpatentedHinting' has been added to
2277 enable or disable the unpatented hinter.
2279 - Support for Windows FON files in PE format has been contributed
2280 by Dmitry Timoshkov.
2285 - Vincent Richomme contributed Visual C++ project files for Pocket
2289 ======================================================================
2291 CHANGES BETWEEN 2.3.4 and 2.3.3
2293 I. IMPORTANT BUG FIXES
2295 - A serious bug in the handling of bitmap fonts (and bitmap
2296 strikes of outline fonts) has been introduced in 2.3.3.
2299 ======================================================================
2301 CHANGES BETWEEN 2.3.3 and 2.3.2
2303 I. IMPORTANT BUG FIXES
2305 - Remove a serious regression in the TrueType bytecode interpreter
2306 that was introduced in version 2.3.2. Note that this does not
2307 disable the improvements introduced to the interpreter in
2308 version 2.3.2, only some ill cases that occurred with certain
2309 fonts (though a few popular ones).
2311 - The auto-hinter now ignores single-point contours for computing
2312 blue zones. This bug created `wavy' baselines when rendering
2313 text with various fonts that use these contours to model
2314 mark-attach points (these are points that are never rasterized
2315 and are placed outside of the glyph's real outline).
2317 - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
2318 zero for mono-spaced fonts. Otherwise code that uses them would
2319 essentially ruin the fixed-advance property.
2321 - Fix CVE-2007-1351 which can cause an integer overflow while
2322 parsing BDF fonts, leading to a potentially exploitable heap
2328 - Fixed compilation issues on some 64-bit platforms (see ChangeLog
2331 - A new demo program `ftdiff' has been added to compare TrueType
2332 hinting, FreeType's auto hinting, and rendering without hinting
2336 ======================================================================
2338 CHANGES BETWEEN 2.3.2 and 2.3.1
2340 I. IMPORTANT BUG FIXES
2342 - FreeType returned incorrect kerning information from TrueType
2343 fonts when the bytecode interpreter was enabled. This happened
2344 due to a typo introduced in version 2.3.0.
2346 - Negative kerning values from PFM files are now reported
2347 correctly (they were read as 16-bit unsigned values from the
2350 - Fixed a small memory leak when `FT_Init_FreeType' failed for
2353 - The Postscript hinter placed and sized very thin and ghost stems
2356 - The TrueType bytecode interpreter has been fixed to get rid of
2357 most of the rare differences seen in comparison to the Windows
2361 II. IMPORTANT CHANGES
2363 - The auto-hinter now better deals with serifs and corner cases
2364 (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
2365 spacing adjustments and doesn't change widths for non-spacing
2368 - Many Mac-specific functions are deprecated (but still
2369 available); modern replacements have been provided for them.
2370 See the documentation in file `ftmac.h'.
2373 ======================================================================
2375 CHANGES BETWEEN 2.3.1 and 2.3.0
2377 I. IMPORTANT BUG FIXES
2379 - The TrueType interpreter sometimes returned incorrect horizontal
2380 metrics due to a bug in the handling of the SHZ instruction.
2382 - A typo in a security check introduced after version 2.2.1
2383 prevented FreeType to render some glyphs in CFF fonts.
2386 ======================================================================
2388 CHANGES BETWEEN 2.3.0 and 2.2.1
2390 I. IMPORTANT BUG FIXES
2392 - The PCF font loader is now much more robust while loading
2393 malformed font files.
2395 - Various memory leaks have been found and fixed.
2397 - The TrueType name loader now deals properly with some fonts that
2398 encode their names in UTF-16 (the specification was vague, and
2399 the code incorrectly assumed UCS-4).
2401 - Fixed the TrueType bytecode loader to deal properly with subtle
2402 monochrome/gray issues when scaling the CVT. Some fonts
2403 exhibited bad rendering artifacts otherwise.
2405 - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
2406 (it mangled the vertical advance height).
2408 - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
2411 - The PFR font loader no longer erroneously tags font files
2412 without any outlines as FT_FACE_FLAG_SCALABLE.
2415 II. NEW API FUNCTIONS
2417 - `FT_Library_SetLcdFilter' allows you to select a special filter
2418 to be applied to the bitmaps generated by `FT_Render_Glyph' if
2419 one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
2420 been selected. This filter is used to reduce color fringes;
2421 several settings are available through the FT_LCD_FILTER_XXX
2424 Its declaration and documentation can be found in file
2425 `include/freetype/ftlcdfil.h' (to be accessed with macro
2428 *IMPORTANT*: This function returns an error
2429 (FT_Err_Unimplemented_Feature) in default builds of the library
2430 for patent reasons. See below.
2432 - `FT_Get_Gasp' allows you to query the flags of the TrueType
2433 `gasp' table for a given character pixel size. This is useful
2434 to duplicate the text rendering of MS Windows when the native
2435 bytecode interpreter is enabled (which isn't the default for
2436 other patent reasons).
2438 Its declaration and documentation can be found in file
2439 `include/freetype/ftgasp.h' (to be accessed with macro
2443 III. IMPORTANT CHANGES
2445 - The auto-hinter has been tuned a lot to improve its results with
2446 serif fonts, resulting in much better font rendering of many web
2449 - The unpatented hinter is now part of the default build of the
2450 library; we have added code to automatically support `tricky'
2453 This means that FreeType should `just work' with certain Asian
2454 fonts, like MingLiU, which cannot properly be loaded without a
2455 bytecode interpreter, but which fortunately do not use any of
2456 the patented bytecode opcodes. We detect these fonts by name,
2457 so please report any font file that doesn't seem to work with
2458 FreeType, and we shall do what we can to support it in a next
2461 Note that the API hasn't changed, so you can still force
2462 unpatented hinting with a special parameter to `FT_Open_Face' as
2463 well. This might be useful in same cases; for example, a PDF
2464 reader might present a user option to activate it to deal with
2465 certain `tricky' embedded fonts which cannot be clearly
2468 If you are a developer for embedded systems, you might want to
2469 *disable* the feature to save code space by undefining
2470 TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
2472 - LCD-optimized rendering is now *disabled* in all default builds
2473 of the library, mainly due to patent issues. For more
2476 https://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
2478 A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
2479 has been introduced in `ftoption.h'; manually define it in this
2480 file if you want to re-enable the feature.
2482 The change only affects the implementation, not the FreeType
2483 API. This means that clients don't need to be modified, because
2484 the library still generates LCD decimated bitmaps, but with the
2485 added constraint that R=G=B on each triplet.
2487 The displayed result should be equal to normal anti-aliased
2490 Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
2491 defined, the new `FT_Library_SetLcdFilter' function returns the
2492 FT_Err_Unimplemented_Feature error code.
2494 - Some computation bugs in the TrueType bytecode interpreter were
2495 found, which allow us to get rid of very subtle and rare
2496 differences we had experienced with the Windows renderer.
2498 - It is now possible to cross-compile the library easily. See the
2499 file `docs/INSTALL.CROSS' for details.
2501 - The file `src/base/ftmac.c' now contains code for Mac OS X only;
2502 its deprecated function `FT_GetFile_From_Mac_Font_Name' always
2503 returns an error even if the QuickDraw framework is available.
2504 The previous version has been moved to `builds/mac/ftmac.c'.
2506 Selecting configure option `--with-quickdraw-carbon' makes the
2507 build process use the original `ftmac.c' file instead of the Mac
2513 - Various performance and memory footprint optimizations have been
2514 performed on the TrueType and CFF font loaders, sometimes with
2515 very drastic benefits (e.g., the TrueType loader is now about
2516 25% faster; FreeType should use less heap memory under nearly
2519 - The anti-aliased rasterizer has been optimized and is now 15% to
2520 25% percent faster than in previous versions, depending on
2523 - The Type 1 loader has been improved; as an example, it now skips
2524 top-level dictionaries properly.
2526 - Better support for Mac fonts on POSIX systems, plus compilation
2527 fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
2529 - Configuration without `--with-old-mac-fonts' does not include
2530 `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
2532 - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
2536 ======================================================================
2538 CHANGES BETWEEN 2.2.1 and 2.2
2540 I. IMPORTANT BUG FIXES
2542 - Various integer overflows have been fixed.
2544 - PFB fonts with MacOS resource fork weren't handled correctly on
2545 non-MacOS platforms.
2548 ======================================================================
2550 CHANGES BETWEEN 2.2 and 2.1.10
2552 (not released officially)
2554 I. IMPORTANT BUG FIXES
2556 - Vertical metrics for SFNT fonts were incorrect sometimes.
2558 - The FT_HAS_KERNING macro always returned 0.
2560 - CFF OpenType fonts didn't return correct vertical metrics for
2561 glyphs with outlines.
2563 - If FreeType was compiled without hinters, all font formats based
2564 on PS outlines weren't scaled correctly.
2567 II. IMPORTANT CHANGES
2569 - Version 2.2 no longer exposes its internals, this is, the header
2570 files located in the `include/freetype/internal' directory of
2571 the source package are not copied anymore by the `make install'
2572 command. Consequently, a number of rogue clients which directly
2573 access FreeType's internal functions and structures won't
2574 compile without modification.
2576 We provide patches for most of those rogue clients. See the
2577 following page for more information:
2579 https://www.freetype.org/freetype2/patches/rogue-patches.html
2581 Note that, as a convenience to our Unix desktop users, version
2582 2.2 is *binary* compatible with FreeType 2.1.7, which means that
2583 installing this release on an existing distribution shall not
2584 break any working desktop.
2586 - FreeType's build mechanism has been redesigned. With GNU make
2587 it is now sufficient in most cases to edit two files:
2588 `modules.cfg', to select the library components, and the
2589 configuration file `include/freetype/config/ftoption.h' (which
2590 can be copied to the objects directory). Removing unused module
2591 directories to prevent its compilation and editing
2592 `include/freetype/config/ftmodule.h' is no longer necessary.
2594 - The LIGHT hinting algorithm produces more pleasant results.
2595 Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
2596 always forces auto-hinting, as a special exception. This allows
2597 you to experiment with it even if you have enabled the TrueType
2598 bytecode interpreter in your build.
2600 - The auto hinter now employs a new algorithm for CJK fonts, based
2601 on Akito Hirai's patch. Note that this only works for fonts
2602 with a Unicode charmap at the moment.
2604 - The following callback function types have changed slightly (by
2605 adding the `const' keyword where appropriate):
2607 FT_Outline_MoveToFunc
2608 FT_Outline_LineToFunc
2609 FT_Outline_ConicToFunc
2610 FT_Outline_CubicToFunc
2612 FT_Raster_RenderFunc
2614 FT_Glyph_TransformFunc
2615 FT_Renderer_RenderFunc
2616 FT_Renderer_TransformFunc
2618 Note that this doesn't affect binary backward compatibility.
2620 - On MacOS, new APIs have been added as replacements for legacy
2621 APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
2622 and `FT_GetFile_From_Mac_ATS_Name' for
2623 `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
2624 FreeType is built without disabling them.
2626 - A new API `FT_Select_Size' has been added to select a bitmap
2627 strike by its index. Code using other functions to select
2628 bitmap strikes should be updated to use this function.
2630 - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
2631 subglyph data. This can be used by rogue clients which used to
2632 access the internal headers to get the corresponding data.
2634 - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
2635 BDF/PCF fonts, and only for them. This causes inconsistency.
2636 In this release, we undo the change. The intent of the change
2637 in 2.1.10 is to allow size selection through real dimensions,
2638 which can now be done through `FT_Request_Size'.
2640 - Some security issues were discovered and fixed in the CFF and
2641 Type 1 loader, causing crashes of FreeType by malformed font
2647 - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
2648 values now better reflects its usage and differences: One set is
2649 used to specify the hinting algorithm, the other to specify the
2650 pixel rendering mode.
2652 - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
2653 changed to count supported scalable faces (sfnt, LWFN) only, and
2654 to return the number of available faces via face->num_faces.
2655 Unsupported bitmap faces (fbit, NFNT) are ignored.
2657 - builds/unix/configure has been improved for MacOS X. It now
2658 automatically checks available functions in Carbon library, and
2659 prepare to use newest functions by default. Options to specify
2660 the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
2661 QuickDraw, ATS) are available too. By manual disabling of all
2662 QuickDraw functionality, FreeType can be built without
2663 `deprecated function' warnings on MacOS 10.4.x, but
2664 FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
2665 function, and returns an `unimplemented' error. For details see
2668 - SFNT cmap handling has been improved, mainly to run much faster
2671 - A new function `FT_Get_TrueType_Engine_Type (declared in
2672 `FT_MODULE_H') is provided to determine the status of the
2673 TrueType bytecode interpreter compiled into the library
2674 (patented, unpatented, unimplemented).
2676 - Vertical metrics of glyphs are synthesized if the font does not
2677 provide such information. You can tell whether the metrics are
2678 synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
2681 - The demo programs `ftview' and `ftstring' have been rewritten
2682 for better readability. `ftview' has a new switch `-p' to test
2683 FT_New_Memory_Face (instead of FT_New_Face).
2685 - FreeType now honours bit 1 in the `head' table of TrueType fonts
2686 (meaning `left sidebearing point at x=0'). This helps with some
2689 - Rudimentary support for Adobe's new `SING Glyphlet' format. See
2691 https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5148.SING_Tutorial.pdf
2693 for more information.
2695 - The `ftdump' program from the `ft2demos' bundle now shows some
2696 information about charmaps. It also supports a new switch `-v'
2697 to increase verbosity.
2699 - Better AFM support. This includes track kerning support.
2702 ======================================================================
2704 CHANGES BETWEEN 2.1.10 and 2.1.9
2706 I. IMPORTANT BUG FIXES
2708 - The size comparison for BDF and PCF files could fail sometimes.
2710 - Some CFF files were still not loaded correctly. Patch from
2713 - The stroker still had some serious bugs.
2715 - Boris Letocha fixed a bug in the TrueType interpreter: The
2716 NPUSHW instruction wasn't skipped correctly in IF clauses. Some
2717 fonts like `Helvetica 75 Bold' failed.
2719 - Another serious bug in handling TrueType hints caused many
2720 distortions. It has been introduced in version 2.1.8, and it is
2721 highly recommended to upgrade.
2723 - FreeType didn't properly parse empty Type 1 glyphs.
2725 - An unbound dynamic buffer growth was fixed in the PFR loader.
2727 - Several bugs have been fixed in the cache sub-system.
2729 - FreeType behaved incorrectly when resizing two distinct but very
2730 close character pixel sizes through `FT_Set_Char_Size' (Savannah
2733 - The auto-hinter didn't work properly for fonts without a Unicode
2734 charmap -- it even refused to load the glyphs.
2737 II. IMPORTANT CHANGES
2739 - Many fixes have been applied to drastically reduce the amount of
2740 heap memory used by FreeType, especially when using
2741 memory-mapped font files (which is the default on Unix systems
2742 which support them).
2744 - The auto-hinter has been replaced with a new module, called the
2745 `auto-fitter'. It consumes less memory than its predecessor,
2746 and it is prepared to support non-latin scripts better in next
2749 - George Williams contributed code to read kerning data from PFM
2752 - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
2753 TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
2754 setting family and style in SFNT fonts (patch from Kornfeld
2757 - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
2758 been added to retrieve name and size information of SFNT tables.
2760 - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
2761 been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
2762 JSTF). After validation it is no longer necessary to check
2763 for errors in those tables while accessing them.
2765 Note that this module might be moved to another library in the
2766 future to avoid a tight dependency between FreeType and the
2767 OpenType specification.
2769 - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
2770 `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
2771 been added. Its use is to convert an FT_Bitmap structure in
2772 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
2773 probably using a different pitch, and to further manipulate it.
2775 - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
2776 control how outlines are emboldened.
2778 - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
2779 also (code contributed by Chia I Wu). Note that this function
2780 is still experimental and may be replaced with a better API.
2782 - The method how BDF and PCF bitmap fonts are accessed has been
2783 refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
2784 were synonyms in FreeType's BDF and PCF interface. This has
2785 changed now. FT_Set_Pixel_Sizes should be used to select the
2786 actual font dimensions (the `strike', which is the sum of the
2787 `FONT_ASCENT' and `FONT_DESCENT' properties), while
2788 FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
2789 property). In both functions, the width parameter is ignored.
2794 - The BDF driver no longer converts all returned bitmaps with a
2795 depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
2796 not mentioned this explicitly, but implementors might have
2797 relied on this after looking into the source files.
2799 - A new option `--ftversion' has been added to freetype-config to
2800 return the FreeType version.
2802 - The memory debugger has been updated to dump allocation
2803 statistics on all allocation sources in the library. This is
2804 useful to spot greedy allocations when loading and processing
2807 - We removed a huge array of constant pointers to constant strings
2808 in the `psnames' module. The problem was that compilations in
2809 PIC mode (i.e., when generating a Unix shared object/dll) put
2810 the array into the non-shared writable section of the library
2811 since absolute pointers are not relocatable by nature.
2813 This reduces the memory consumption by approximately 16KByte per
2814 process linked to FreeType. We now also store the array in a
2815 compressed form (as a trie) which saves about 20KByte of code as
2818 - Kirill Smelkov provided patches to make src/raster/ftraster.c
2819 compile stand-alone again.
2822 ======================================================================
2824 CHANGES BETWEEN 2.1.9 and 2.1.8
2826 I. IMPORTANT BUG FIXES
2828 - The function `FT_Get_CharMap_Index' was only declared, without
2829 any real code. For consistency, it has been renamed to
2830 `FT_Get_Charmap_Index'. (This function is needed to implement
2833 - `FT_Outline_Get_BBox' sometimes returned incorrect values for
2834 conic outlines (e.g., for TrueType fonts).
2836 - Handling of `bhed' table has been fixed.
2838 - The TrueType driver with enabled byte code interpreter sometimes
2839 returned artifacts due to incorrect rounding. This bug has been
2840 introduced after version 2.1.4.
2842 - The BDF driver dropped the last glyph in the font.
2844 - The BDF driver now uses the DEFAULT_CHAR property (if available)
2845 to select a glyph shape for the undefined glyph.
2847 - The stroker failed for closed outlines and single points.
2850 II. IMPORTANT CHANGES
2852 - George Williams contributed code to handle Apple's font
2853 distortion technology found in GX fonts (`avar', `cvar', `fvar',
2854 and `gvar' tables; the Multiple Masters API has been slightly
2855 extended to cope with the new functionality).
2857 - The `FT_GlyphSlotRec' structure has been extended: The elements
2858 `lsb_delta' and `rsb_delta' give the difference between hinted
2859 and unhinted left and right side bearings if autohinting is
2860 active. Using those values can improve the inter-letter spacing
2861 considerably. See the documentation of `FT_GlyphSlotRec' and
2862 the `ftstring' demo program how to use it.
2864 - Loading TrueType and Type 1 fonts has been made much faster.
2866 - The stroker is no longer experimental (but the cache subsystem
2872 - A new documentation file `formats.txt' describes various font
2873 formats supported (and not supported) by FreeType.
2876 ======================================================================
2878 CHANGES BETWEEN 2.1.8 and 2.1.7
2880 I. IMPORTANT BUG FIXES
2882 - The native TrueType hinter contained some bugs which prevented
2883 some fonts to be rendered correctly, most notably Legendum.otf.
2885 - The PostScript hinter now produces improved results.
2887 - The linear advance width and height values were incorrectly
2888 rounded, making them virtually unusable if not loaded with
2889 FT_LOAD_LINEAR_DESIGN.
2891 - Indexing CID-keyed CFF fonts is now working: The glyph index is
2892 correctly treated as a CID, similar to FreeType's CID driver
2893 module. Note that CID CMap support is still missing.
2895 - The FT_FACE_FLAG_GLYPH_NAMES flag is now set correctly for all
2898 - Some subsetted Type 1 fonts weren't parsed correctly. This bug
2899 has been introduced in 2.1.7. In summary, the Type 1 parser has
2902 - Non-decimal numbers weren't parsed correctly in PS fonts.
2904 - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
2905 but one encoding. Use the new FT_WinFNT_ID_XXX values together
2906 with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
2908 - The descender metrics (face->size->metrics.descender) for WinFNT
2909 bitmap fonts had the wrong sign.
2911 - The (emulated) `seac' support for CFF fonts was broken.
2913 - The `flex' operator didn't work for CFF fonts.
2915 - PS glyphs which use the `hintmask' operator haven't been
2916 rendered correctly in some cases.
2918 - Metrics for BDF and PCF bitmap font formats have been fixed.
2920 - Autohinting is now disabled for glyphs which are vertically
2921 distorted or mirrored (using a transformation matrix). This
2922 fixes a bug which produced zero-height glyphs.
2924 - The `freetype-config' script now handles --prefix and
2925 --exec-prefix correctly; it also returns the proper --rpath (or
2926 -R) value if FreeType has been built as a shared library.
2929 II. IMPORTANT CHANGES
2931 - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
2932 ADD_STYLE_NAME properties. Values are appended to
2933 face->style_name; example: `Bold SemiCondensed'.
2935 - The PCF driver now handles bitmap fonts compressed with the LZW
2936 algorithm (extension .pcf.Z, compressed with `compress').
2938 - A new API function `FT_Get_CMap_Language_ID' (declared in
2939 `tttables.h') is available to get the language ID of a
2942 - The hexadecimal format of data after the `StartData' command in
2943 CID-keyed Type 1 fonts is now supported. While this can't occur
2944 in file-based fonts, it can happen in document-embedded
2945 resources of PostScript documents.
2947 - Embedded bitmaps in SFNT-based CFF fonts are now supported.
2949 - A simple API is now available to control FreeType's tracing
2950 mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
2951 `ftdebug.h' for more details.
2953 - YAMATO Masatake contributed improved handling of MacOS resource
2954 forks on non-MacOS platforms (for example, Linux can mount MacOS
2957 - Support for MacOS has been improved; there is now a new function
2958 `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
2959 it accepts an FSSpec instead of a path.
2961 - The cache sub-system has been rewritten.
2963 - There is now support for deinstallation of faces.
2965 - A new API function `FTC_Manager_RemoveFaceID' has been added
2966 to delete all `idle' nodes that correspond to a given
2967 FTC_FaceID. All `locked' nodes (i.e., those with a reference
2968 count > 0), will be modified to prevent them from appearing in
2969 further lookups (they will be cleaned normally when their
2970 reference count reaches 0).
2972 - There is now support for point scaling (i.e., providing
2973 character sizes in points + dpis, instead of pixels).
2975 - Three abstract cache classes are now available:
2977 FTC_GCache: Used to store one glyph item per cache node,
2978 with the ability to group common attributes into
2979 `families'. This replaces the old
2980 FTC_GlyphCache class.
2982 FTC_ICache: Used to store one FT_Glyph per cache node. This
2983 extends FTC_GCache. Family definition, family
2984 comparison, and glyph loading are however left
2987 FTC_SCache: Used to store up to 16 small bitmaps per cache
2988 node. This extends FTC_GCache. Family
2989 definition, family comparison and glyph loading
2990 are however left to sub-classes.
2992 - The file `src/cache/ftcbasic.c' implements:
2994 FTC_ImageCache: Extends FTC_ICache; implements family
2995 definitions and glyph loading similar to the
2998 FTC_SBitCache: Extends FTC_SCache, implements family
2999 definitions and glyph loading similar to the
3002 Client applications should be able to extend FTC_GCache,
3003 FTC_ICache, or FTC_SCache much more easily (i.e., less code to
3004 write, and less callbacks). For example, one could envision
3005 caches that are capable of storing transformed (obliqued),
3006 stroked, emboldened, or colored glyph images. Use
3007 `ftcbasic.c' as an example.
3009 - All public APIs are now in `include/freetype/ftcache.h', (to
3010 be accessed as `FT_CACHE_H'). The contents of
3011 `include/freetype/cache/' is only needed by applications that
3012 wish to implement their own caches.
3014 - There were some major performance improvements through the use
3015 of various programming tricks. Cache hits are up to 70%
3016 faster than in the old code.
3018 - The FTC_CMapCache has been simplified. Charmaps can only be
3019 accessed by index right now. There is also a new API named
3020 `FT_Charmap_GetIndex' for this purpose.
3022 - The demo programs have been updated to the new code. The
3023 previous versions will not work with the current one.
3025 - Using an invalid face index in FT_Open_Face and friends now
3026 causes an error even if the font contains a single face only.
3031 - Wolfgang Domröse contributed support files for building FreeType
3032 on the Atari using the PureC compiler. Note that the Atari is a
3035 - Vitaliy Pasternak contributed project files for VS.NET 2003.
3038 ======================================================================
3040 CHANGES BETWEEN 2.1.7 and 2.1.6
3042 I. IMPORTANT BUG FIXES
3044 - Updated to newest libtool version, fixing build problems on
3047 - On Unix platforms, `make install' didn't copy the correct
3050 Note that version 2.1.7 contains the same library C source code as
3054 ======================================================================
3056 CHANGES BETWEEN 2.1.6 and 2.1.5
3058 I. IMPORTANT BUG FIXES
3060 - The PFR font driver didn't load kerning tables correctly, and
3061 the functions in FT_PFR_H didn't work at all.
3063 - Type 1 font files in binary format (PFB) with an end-of-file
3064 indicator weren't accepted by the FreeType engine.
3066 - Fonts which contain /PaintType and /StrokeWidth no longer cause
3067 a segfault. This bug has been introduced in version 2.1.5.
3069 - Fonts loaded with FT_LOAD_RENDER no longer cause strange
3070 results. This bug has been introduced in version 2.1.5.
3072 - Some Windows (bitmap) FNT/FON files couldn't be handled
3076 II. IMPORTANT CHANGES
3078 - The internal module API has been heavily changed in favor of
3079 massive simplifications within the font engine. This also means
3080 that authors of third-party modules must adapt their code to the
3083 NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
3086 - The PostScript parser has been enhanced to handle comments and
3087 strings correctly. Additionally, more syntax forms are
3090 - Added the optional unpatented hinting system for TrueType. It
3091 allows typefaces which need hinting to produce correct glyph
3092 forms (e.g., Chinese typefaces from Dynalab) to work acceptably
3093 without infringing Apple patents. This system is compiled only
3094 if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
3095 ftoption.h (activated by default).
3100 - There is now a guard in the public header files to protect
3101 against inclusion of freetype.h from FreeType 1.
3103 - Direct inclusion of freetype.h and other public header files no
3104 longer works. You have to use the documented scheme
3106 #include <ft2build.h>
3107 #include FT_FREETYPE_H
3109 to load freetype.h with a symbolic name. This protects against
3110 renaming of public header files (which shouldn't happen but
3111 actually has, avoiding two public header files with the same
3115 ======================================================================
3117 CHANGES BETWEEN 2.1.5 and 2.1.4
3119 I. IMPORTANT BUG FIXES
3121 - Parsing the /CIDFontName field now removes the leading slash to
3122 be in sync with other font drivers.
3124 - gzip support was buggy. Some fonts could not be read.
3126 - Fonts which have nested subglyphs more than one level deep no
3127 longer cause a segfault.
3129 - Creation of synthetic cmaps for fonts in CFF format was broken
3132 - Numeric font dictionary entries for synthetic fonts are no
3135 - The font matrix wasn't applied to the advance width for Type1,
3136 CID, and CFF fonts. This caused problems when loading certain
3137 synthetic Type 1 fonts like `Helvetica Narrow'.
3139 - The test for the charset registry in BDF and PCF fonts is now
3142 - FT_Vector_Rotate sometimes returned strange values due to
3145 - The PCF driver now returns the correct number of glyphs
3146 (including an artificial `notdef' glyph at index 0).
3148 - FreeType now supports buggy CMaps which are contained in many
3149 CJK fonts from Dynalab.
3151 - Opening an invalid font on a Mac caused a segfault due to
3152 double-freeing memory.
3154 - BDF fonts with more than 32768 glyphs weren't supported
3158 II. IMPORTANT CHANGES
3160 - Accessing bitmap font formats has been synchronized. To do that
3161 the FT_Bitmap_Size structure has been extended to contain new
3162 fields `size', `x_ppem', and `y_ppem'.
3164 - The FNT driver now returns multiple faces, not multiple strikes.
3166 - The `psnames' module has been updated to the Adobe Glyph List
3169 - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
3171 - The algorithm for guessing the font style has been improved.
3173 - For fonts in SFNT format, root->height is no longer increased if
3174 the line gap is zero. There exist fonts (containing e.g. form
3175 drawing characters) which intentionally have a zero line gap
3178 - ft_glyph_bbox_xxx flags are now deprecated in favour of
3181 - ft_module_xxx flags are now deprecated in favour of
3184 - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
3185 deprecated in favour of
3186 FT_ENCODING_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} -- those encodings
3187 are not specific to Microsoft.
3192 - The autohinter has been further improved; for example, `m'
3193 glyphs now retain its vertical symmetry.
3195 - Partial support of Mac fonts on non-Mac platforms.
3197 - `make refdoc' (after first `make') builds the HTML
3198 documentation. You need Python for this.
3200 - The make build system should now work more reliably on DOS-like
3203 - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
3206 - Better VMS build support.
3208 - Support for the pkg-config package by providing a `freetype.pc'
3211 - New configure option --with-old-mac-fonts for Darwin.
3213 - Some source files have been renamed (mainly to fit into the 8.3
3217 ======================================================================
3219 CHANGES BETWEEN 2.1.4 and 2.1.3
3221 I. IMPORTANT BUG FIXES
3223 - Updated to newest libtool version, fixing build problems on
3226 - A fix in the Gzip stream reader: It couldn't read certain .gz
3227 files properly due to a small typo. In certain cases, FreeType
3228 could also loop endlessly when trying to load tiny gzipped
3231 - The configure script now tries to use the system-wide zlib when
3232 it finds one (instead of the copy found in src/gzip). And
3233 `freetype-config' has been updated to return relevant flags in
3234 this case when invoked with `--libs' (e.g. `-lzlib').
3236 - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
3237 Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
3240 - The CFF loader was modified to accept fonts which only contain a
3241 subset of their reference charset. This prevented the correct
3242 use of PDF-embedded fonts.
3244 - The logic to detect Unicode charmaps has been modified. This is
3245 required to support fonts which include both 16-bit and 32-bit
3246 charmaps (like very recent asian ones) using the new 10 and 12
3249 - The TrueType loader now limits the depth of composite glyphs.
3250 This is necessary to prevent broken fonts to break the engine by
3251 blowing the stack with recursive glyph definitions.
3253 - The CMap cache is now capable of managing UCS-4 character codes
3254 that are mapped through extended charmaps in recent
3255 TrueType/OpenType fonts.
3257 - The cache sub-system now properly manages out-of-memory
3258 conditions instead of blindly reporting them to the caller.
3259 This means that it will try to empty the cache before restarting
3260 its allocations to see if that can help.
3262 - The PFR driver didn't return the list of available embedded
3265 - There was a nasty memory leak when using embedded bitmaps in
3266 certain font formats.
3269 II. IMPORTANT CHANGES
3271 - David Chester contributed some enhancements to the auto-hinter
3272 that significantly increase the quality of its output. The
3273 Postscript hinter was also improved in several ways.
3275 - The FT_RENDER_MODE_LIGHT render mode was implemented.
3277 - A new API function called `FT_Get_BDF_Property' has been added
3278 to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
3279 files. THIS IS STILL EXPERIMENTAL, since it hasn't been
3280 properly tested yet.
3282 - A Windows FNT specific API has been added, mostly to access font
3283 headers. This is used by Wine.
3285 - TrueType tables without an `hmtx' table are now tolerated when
3286 an incremental interface is used. This happens for certain
3287 Type42 fonts passed from Ghostscript to FreeType.
3289 - The PFR font driver is now capable of returning the font family
3290 and style names when they are available (instead of the sole
3291 `FontID'). This is performed by parsing an *undocumented*
3292 portion of the font file!
3297 - The path stroker in FT_STROKER_H has entered beta stage. It now
3298 works very well, but its interface might change a bit in the
3299 future. More on this in later releases.
3301 - The documentation for FT_Size_Metrics didn't appear properly in
3304 - The file docs/VERSION.DLL has been updated to explain versioning
3305 with FreeType (i.e., comparing release/libtool/so numbers, and
3306 how to use them in autoconf scripts).
3308 - The installation documentation has been seriously revamped.
3309 Everything is now in the `docs' directory.
3312 ======================================================================
3314 CHANGES BETWEEN 2.1.3 and 2.1.2
3316 I. IMPORTANT BUG FIXES
3318 - FT_Vector_Transform had been incorrectly modified in 2.1.2,
3319 resulting in incorrect transformations being applied (for
3320 example, rotations were processed in opposite angles).
3322 - The format 8 and 12 TrueType charmap enumeration routines have
3323 been fixed (FT_Get_Next_Char returned invalid values).
3325 - The PFR font driver returned incorrect advance widths if the
3326 outline and metrics resolution defined in the font file were
3329 - FT_Glyph_To_Bitmap now returns successfully when called with an
3330 FT_BitmapGlyph argument (it previously returned an error).
3332 - A bug in the Type 1 loader that prevented valid font bounding
3333 boxes to be loaded from multiple master fonts.
3335 - The SFNT validation code has been rewritten. FreeType can now
3336 load `broken' fonts that were usable on Windows, but not with
3337 previous versions of the library.
3339 - The computation of bearings in the BDF driver has been fixed.
3341 - The Postscript hinter crashed when trying to hint certain glyphs
3342 (more precisely, when trying to apply hints to an empty glyph
3345 - The TrueType glyph loader now supports composites in `Apple
3346 format' (they differ slightly from Microsoft/OpenType ones in
3347 the way transformation offsets are computed).
3349 - FreeType was very slow at opening certain asian CID/CFF fonts,
3350 due to fixed increment in dynamic array re-allocations. This
3351 has been changed to exponential behaviour to get acceptable
3356 II. IMPORTANT CHANGES
3358 - The PCF driver now supports gzip-compressed font files natively.
3359 This means that you will be able to use all these bitmap fonts
3360 that come with XFree86 with FreeType (and libXft/libXft2, by
3363 - The automatic and postscript hinters have both been updated.
3364 This results in a relatively important increase of rendering
3365 quality since many nasty defaults have been suppressed. Please
3368 https://www.freetype.org/hinting/smooth-hinting.html
3370 for additional details on this topic.
3372 - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
3373 (instead of just being an FT_Int). This breaks source and
3374 binary compatibility for 16bit systems only, while retaining
3375 both of them for 32 and 64 bit ones.
3377 Some new flags have been added consequently:
3379 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
3380 (but not native format hinters).
3382 FT_LOAD_TARGET_NORMAL :: Hint and render for normal
3383 anti-aliased displays.
3385 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
3387 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
3388 BGR subpixel displays (like LCD
3389 screens). THIS IS STILL
3392 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
3393 vertical subpixel displays (like
3394 rotated LCD screens). THIS IS STILL
3397 FT_LOAD_MONOCHROME is still supported, but only affects
3398 rendering, not the hinting.
3400 Note that the `ftview' demo program available in the `ft2demos'
3401 package has been updated to support LCD-optimized display on
3402 non-paletted displays (under Win32 and X11).
3404 - The PFR driver now supports embedded bitmaps (all formats
3405 supported), and returns correct kerning metrics for all glyphs.
3407 - The TrueType charmap loader now supports certain `broken' fonts
3408 that load under Windows without problems.
3410 - The cache API has been slightly modified (it's still a beta!):
3412 - The type FTC_ImageDesc has been removed; it is now replaced
3413 by FTC_ImageTypeRec. Note that one of its fields is a
3414 `load_flag' parameter for FT_Load_Glyph.
3416 - The field `num_grays' of FT_SBitRec has been changed to
3417 `max_grays' in order to fit within a single byte. Its
3418 maximum value is thus 255 (instead of 256 as previously).
3423 - Added support for the DESTDIR variable during `make install'.
3424 This simplifies packaging of FreeType.
3426 - Included modified copies of the ZLib sources in `src/gzip' in
3427 order to support gzip-compressed PCF fonts. We do not use the
3428 system-provided zlib for now, though this is a probable
3429 enhancement for future releases.
3431 - The DocMaker tool used to generate the on-line API reference has
3432 been completely rewritten. It is now located in
3433 `src/tools/docmaker/docmaker.py'. Features:
3435 - better cross-referenced output
3436 - more polished output
3437 - uses Python regular expressions (though it didn't speed the
3439 - much more modular structure, which allows for different
3440 `backends' in order to generate HTML, XML, or whatever
3443 One can regenerate the API reference by calling:
3445 python src/tools/docmaker/docmaker.py \
3447 --title=FreeType-2.1.3 \
3448 --output=<outputdirectory>
3449 include/freetype/*.h \
3450 include/freetype/config/*.h \
3451 include/freetype/cache/*.h
3453 - A new, experimental, support for incremental font loading (i.e.,
3454 loading of fonts where the glyphs are not in the font file
3455 itself, but provided by an external component, like a Postscript
3456 interpreter) has been added by Graham Asher. This is still work
3457 in progress, however.
3459 - A new, EXPERIMENTAL, path stroker has been added. It doesn't
3460 suffer from severe rounding errors and treat bezier arcs
3461 directly. Still work in progress (i.e. not part of the official
3462 API). See the file <freetype/ftstroker.h> for some of the
3465 - The massive re-formatting of sources and internal re-design is
3466 still under-way. Many internal functions, constants, and types
3470 ======================================================================
3472 CHANGES BETWEEN 2.1.2 and 2.1.1
3474 I. IMPORTANT BUG FIXES
3476 - Many font drivers didn't select a Unicode charmap by default
3477 when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
3478 options enabled), causing many applications to not be able to
3479 display text correctly with the 2.1.x releases.
3481 - The PFR driver had a bug in its composite loading code that
3482 produces incorrectly placed accents with many fonts.
3484 - The Type42 driver crashed sometimes due to a nasty bug.
3486 - The Type 1 custom encoding charmap didn't handle the case where
3487 the first glyph index wasn't 0.
3489 - A serious typo in the TrueType composite loader produced
3490 incorrectly placed glyphs in fonts like `Wingdings' and a few
3496 - The Win32 Visual C++ project file has been updated to include
3497 the PFR driver as well.
3499 - `freetype.m4' is now installed by default by `make install' on
3502 - The function FT_Get_PS_Font_Info now works with CID and Type42
3506 ======================================================================
3508 CHANGES BETWEEN 2.1.1 and 2.1.0
3510 I. IMPORTANT BUG FIXES
3512 - The `version_info' returned by `freetype-config' in 2.1.0
3513 returned an invalid value. It now returns 9:1:3 (2.0.9 returned
3516 - Version 2.1.0 couldn't be linked against applications on Win32
3517 and Amiga systems due to a new debug function that wasn't
3518 properly propagated to the system-specific directory in
3521 - Various MacOS and Mac OS X specific fixes.
3523 - Fixed a bug in the TrueType charmap validation routines that
3524 made version 2.1.0 too restrictive -- many popular fonts have
3527 - There was still a very small difference between the monochrome
3528 glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
3529 bytecode interpreter enabled. This was caused by an invalid
3530 flag setting in the TrueType glyph loader, making the rasterizer
3531 change its drop-out control mode. Now the results should
3532 _really_ be completely identical.
3534 - The TrueType name table loader has been improved to support many
3535 popular though buggy Asian fonts. It now ignores empty name
3536 entries, invalid pointer offsets and a few other incorrect
3537 subtleties. Moreover, name strings are now loaded on demand,
3538 which reduces the memory load of many faces (e.g. the ARIAL.TTF
3539 font file contains a 10kByte name table with 70 names).
3541 - Fixed a bug in the Postscript hinter that prevented family blues
3542 substitution to happen correctly.
3547 - Three new font drivers in this release:
3549 * A BDF font driver, contributed by Franco Zappa Nardelli,
3550 heavily modified by Werner Lemberg. It also supports
3551 anti-aliased bitmaps (using a slightly extended BDF format).
3553 * A Type42 font driver, contributed by Roberto Alameda. It is
3554 still experimental but seems to work relatively well.
3556 * A PFR font driver, contributed by David Turner himself. It
3557 doesn't support PFR hinting -- note that BitStream has at
3558 least two patents on this format!
3563 - The cache sub-system has been optimized in important ways.
3564 Cache hits are now significantly faster. For example, using the
3565 CMap cache is about twice faster than calling FT_Get_Char_Index
3566 on most platforms. Similarly, using an SBit cache is about five
3567 times faster than loading the bitmaps from a bitmap file, and
3568 300 to 500 times faster than generating them from a scalable
3571 Note that you should recompile your sources if you designed a
3572 custom cache class for the FT2 Cache subsystem, since the
3573 changes performed are source, but not binary, compatible.
3576 ======================================================================
3578 CHANGES BETWEEN 2.1.0 and 2.0.9
3580 I. IMPORTANT BUG FIXES
3582 - The TrueType bytecode interpreter has been fixed to produce
3583 _exactly_ the same output as FreeType 1.x. Previous differences
3584 were due to slightly distinct fixed-point computation routines
3585 used to perform dot products and vector length measurements.
3587 It seems that native TrueType hinting is _extremely_ sensitive
3588 to rounding errors. The required vector computation routines
3589 have been optimized and placed within the `ttinterp.c' file.
3591 - Fixed the parsing of accelerator tables in the PCF font driver.
3593 - Fixed the Type1 glyph loader routine used to compute the font's
3594 maximum advance width.
3599 - The `configure' script used on Unix systems has been modified to
3600 check that GNU Make is being used to build the library.
3601 Otherwise, it will display a message proposing to use the
3602 GNUMAKE environment variable to name it.
3604 The Unix-specific file README.UNX has been modified accordingly.
3609 - The FreeType License in `docs/FTL.TXT' has been updated to
3610 include a proposed preferred disclaimer. If you are using
3611 FreeType in your products, you are encouraged (but not mandated)
3612 to use the following text in your documentation:
3615 Portions of this software are copyright © 1996-2002 The
3616 FreeType Project (www.freetype.org). All rights reserved.
3619 - The default size of the render pool has been reduced to 16kByte.
3620 This shouldn't result in any noticeable performance penalty,
3621 unless you are using the engine as-is to render very large and
3624 - The FreeType 2 redesign has begun. More information can be
3627 https://www.freetype.org/freetype2/redesign.html
3629 The following internal changes have been performed within the
3630 sources of this release:
3632 - Many internal types have been renamed to increase
3633 consistency. The following should be true, except for
3636 * All structure types have a name ending in `Rec' (short
3639 * A pointer-to-structure type has the same name as the
3640 structure, _without_ the `Rec' suffix.
3644 typedef struct FooRec_
3650 - Many internal macros have been renamed to increase
3651 consistency. The following should be true:
3653 * All macros have a name beginning with `FT_'. This
3654 required a few changes like
3658 REALLOC => FT_REALLOC
3660 * All macros are completely UPPERCASE. This required a
3663 READ_Short => FT_READ_SHORT
3664 NEXT_Short => FT_NEXT_SHORT
3665 GET_ULongLE => FT_GET_ULONG_LE
3666 MEM_Set => FT_MEM_SET
3667 MEM_Copy => FT_MEM_COPY
3670 * Whenever possible, all macro names follow the
3671 FT_<OBJECT>_<METHOD> pattern. For example
3673 ACCESS_Frame => FT_FRAME_ENTER
3674 FORGET_Frame => FT_FRAME_EXIT
3675 EXTRACT_Frame => FT_FRAME_EXTRACT
3676 RELEASE_Frame => FT_FRAME_RELEASE
3678 FILE_Pos => FT_STREAM_POS
3679 FILE_Seek => FT_STREAM_SEEK
3680 FILE_Read => FT_STREAM_READ
3681 FILE_ReadAt => FT_STREAM_READ_AT
3682 READ_Fields => FT_STREAM_READ_FIELDS
3684 - Many internal functions have been renamed to follow the
3685 FT_<Object>_<Method> pattern. For example:
3687 FT_Seek_Stream => FT_Stream_Seek
3688 FT_Read_Stream_At => FT_Stream_ReadAt
3689 FT_Done_Stream => FT_Stream_Close
3690 FT_New_Stream => FT_Stream_Open
3691 FT_New_Memory_Stream => FT_Stream_OpenMemory
3692 FT_Extract_Frame => FT_Stream_ExtractFrame
3694 Note that method names do not contain `_'.
3696 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
3697 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
3698 type as the fourth argument. Instead, the array element
3699 type size is computed automatically from the type of the
3700 target pointer used.
3702 - A new object class, FT_CMap, has been introduced. These
3703 internal objects are used to model character maps. This
3704 eases the support of additional charmap types within the
3707 - A new configuration file named `ftstdlib.h' has been added
3708 to `include/freetype/config'. It is used to define aliases
3709 for _every_ routine of the ISO C library that the font
3710 engine uses. Each aliases has a `ft_' prefix
3711 (e.g. `ft_strlen' is an alias for `strlen').
3713 This is used to ease the porting of FreeType 2 to exotic
3714 runtime environments where the ISO C Library isn't available
3715 (e.g. XFree86 extension modules).
3717 More details are available in the `ChangeLog' file.
3720 ======================================================================
3722 CHANGES BETWEEN 2.0.9 and 2.0.8
3724 I. IMPORTANT BUG FIXES
3726 - Certain fonts like `foxjump.ttf' contain broken name tables with
3727 invalid entries and wild offsets. This caused FreeType to crash
3728 when trying to load them.
3730 The SFNT `name' table loader has been fixed to be able to
3731 support these strange fonts.
3733 Moreover, the code in charge of processing this table has been
3734 changed to always favour Windows-formatted entries over other
3735 ones. Hence, a font that works on Windows but not on the Mac
3736 will load cleanly in FreeType and report accurate values for
3737 Family & PostScript names.
3739 - The CID font driver has been fixed. It unfortunately returned a
3740 Postscript Font name with a leading slash, as in
3741 `/MunhwaGothic-Regular'.
3743 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
3746 - A bug in the Postscript hinter has been found and fixed,
3747 removing un-even stem widths at small pixel sizes (like 14-17).
3749 This improves the quality of a certain number of Postscript
3755 - A new function named `FT_Library_Version' has been added to
3756 return the current library's major, minor, and patch version
3757 numbers. This is important since the macros FREETYPE_MAJOR,
3758 FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
3759 library is dynamically linked by a program.
3761 - Two new APIs have been added: `FT_Get_First_Char' and
3764 Together, these can be used to iterate efficiently over the
3765 currently selected charmap of a given face. Read the API
3766 reference for more details.
3771 - The FreeType sources are under heavy internal re-factoring. As
3772 a consequence, we have created a branch named `STABLE' on the
3773 CVS to hold all future releases/fixes in the 2.0.x family.
3775 The HEAD branch now contains the re-factored sources and
3776 shouldn't be used for testing or packaging new releases. In
3777 case you would like to access the 2.0.9 sources from our CVS
3778 repository, use the tag `VER-2-0-9'.
3781 ======================================================================
3783 CHANGES BETWEEN 2.0.8 and 2.0.7
3785 I. IMPORTANT BUG FIXES
3787 - There was a small but nasty bug in `freetype-config.in' which
3788 caused the `freetype-config' script to fail on Unix.
3790 This didn't prevent the installation of the library or even its
3791 execution, but caused problems when trying to compile many Unix
3792 packages that depend on it.
3794 - Some TrueType or OpenType fonts embedded in PDF documents do not
3795 have a 'cmap', 'post' and 'name' as is required by the
3796 specification. FreeType no longer refuses to load such fonts.
3798 - Various fixes to the PCF font driver.
3801 ======================================================================
3803 CHANGES BETWEEN 2.0.7 and 2.0.6
3805 I. IMPORTANT BUG FIXES
3807 - Fixed two bugs in the Type 1 font driver. The first one
3808 resulted in a memory leak in subtle cases. The other one caused
3809 FreeType to crash when trying to load `.gsf' files (Ghostscript
3810 so-called Postscript fonts).
3812 (This made _many_ KDE applications crash on certain systems.
3813 FreeType _is_ becoming a critical system component on Linux :-)
3815 - Fixed a memory leak in the CFF font driver.
3817 - Fixed a memory leak in the PCF font driver.
3819 - Fixed the Visual C++ project file
3820 `builds/win32/visualc/freetype.dsp' since it didn't include the
3821 Postscript hinter component, causing errors at build time.
3823 - Fixed a small rendering bug in the anti-aliased renderer that
3824 only occurred when trying to draw thin (less than 1 pixel)
3827 - Fixed `builds/unix/freetype2.a4' which is used to generate a
3828 valid `freetype2.m4' for use with autoconf.
3830 - Fixed the OpenVMS Makefiles.
3835 - Added `configure' and `install' scripts to the top-level
3836 directory. A GNU-style installation is thus now easily possible
3839 ./configure <options>
3844 ======================================================================
3846 CHANGES BETWEEN 2.0.6 and 2.0.5
3848 I. IMPORTANT BUG FIXES
3850 - It wasn't possible to load embedded bitmaps when the auto-hinter
3851 was used. This is now fixed.
3853 - The TrueType font driver didn't load some composites properly
3854 (the sub-glyphs were slightly shifted, and this was only
3855 noticeable when using monochrome rendering).
3857 - Various fixes to the auto-hinter. They merely improve the
3858 output of sans-serif fonts. Note that there are still problems
3859 with serifed fonts and composites (accented characters).
3861 - All scalable font drivers erroneously returned un-fitted glyph
3862 advances when hinting was requested. This created problems for
3863 a number of layout applications. This is a very old bug that
3864 got undetected mainly because most test/demo program perform
3865 rounding explicitly or implicitly (through the cache).
3867 - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
3870 - `glnames.py' still contained a bug that made FreeType return
3871 invalid names for certain glyphs.
3873 - The library crashed when loading certain Type 1 fonts like
3874 `sadn.pfb' (`Stalingrad Normal'), which appear to contain
3875 pathetic font info dictionaries.
3877 - The TrueType glyph loader is now much more paranoid and checks
3878 everything when loading a given glyph image. This was necessary
3879 to avoid problems (crashes and/or memory overwrites) with broken
3880 fonts that came from a really buggy automatic font converter.
3883 II. IMPORTANT UPDATES AND NEW FEATURES
3885 - Important updates to the Mac-specific parts of the library.
3887 - The caching sub-system has been completely re-designed, and its
3888 API has evolved (the old one is still supported for backward
3891 The documentation for it is not yet completed, sorry. For now,
3892 you are encouraged to continue using the old API. However, the
3893 ftview demo program in the ft2demos package has already been
3894 updated to use the new caching functions.
3896 - A new charmap cache is provided too. See `FTC_CMapCache'. This
3897 is useful to perform character code -> glyph index translations
3898 quickly, without the need for an opened FT_Face.
3900 - A NEW POSTSCRIPT HINTER module has been added to support native
3901 hints in the following formats: PostScript Type 1, PostScript
3904 Please test! Note that the auto-hinter produces better results
3905 for a number of badly-hinted fonts (mostly auto-generated ones)
3908 - A memory debugger is now part of the standard FreeType sources.
3909 To enable it, define FT_DEBUG_MEMORY in
3910 <freetype/config/ftoption.h>, and recompile the library.
3912 Additionally, define the _environment_ variable FT_DEBUG_MEMORY
3913 and run any program using FreeType. When the library is exited,
3914 a summary of memory footprints and possible leaks will be
3917 This works transparently with _any_ program that uses FreeType.
3918 However, you will need a lot of memory to use this (allocated
3919 blocks are never released to the heap to detect double deletes
3925 - We are aware of subtle differences between the output of
3926 FreeType versions 1 and 2 when it comes to monochrome
3927 TrueType-hinted glyphs. These are most probably due to small
3928 differences in the monochrome rasterizers and will be worked out
3929 in an upcoming release.
3931 - We have decided to fork the sources in a `stable' branch, and an
3932 `unstable' one, since FreeType is becoming a critical component
3933 of many Unix systems.
3935 The next bug-fix releases of the library will be named 2.0.7,
3936 2.0.8, etc., while the `2.1' branch will contain a version of
3937 the sources where we will start major reworking of the library's
3938 internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
3939 more distant future.
3941 We also hope that this scheme will allow much more frequent
3942 releases than in the past.
3945 ======================================================================
3947 CHANGES BETWEEN 2.0.5 and 2.0.4
3949 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
3950 WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
3952 - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
3953 `lslash' unavailable from Unicode charmaps of Postscript fonts.
3954 This prevented the correct display of Polish text, for example.
3956 - The kerning table of Type 1 fonts was loaded by FreeType, when its
3957 AFM file was attached to its face, but the
3958 FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
3959 preventing FT_Get_Kerning to return meaningful values.
3961 - Improved SFNT (TrueType & OpenType) charmap support. Slightly
3962 better performance, as well as support for the new formats defined
3963 by the OpenType 1.3 specification (8, 10, and 12)
3965 - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
3966 computations in certain rare cases, producing ugly artefacts.
3968 - The size of the EM square is computed with a more accurate
3969 algorithm for Postscript fonts. The old one caused slight errors
3970 with embedded fonts found in PDF documents.
3972 - Fixed a bug in the cache manager that prevented normal LRU
3973 behaviour within the cache manager, causing unnecessary reloads
3974 (for FT_Face and FT_Size objects only).
3976 - Added a new function named `FT_Get_Name_Index' to retrieve the
3977 glyph index of a given glyph name, when found in a face.
3979 - Added a new function named `FT_Get_Postscript_Name' to retrieve
3980 the `unique' Postscript font name of a given face.
3982 - Added a new public header size named FT_SIZES_H (or
3983 <freetype/ftsizes.h>) providing new FT_Size-management functions:
3984 FT_New_Size, FT_Activate_Size, FT_Done_Size.
3986 - Fixed a reallocation bug that generated a dangling pointer (and
3987 possibly memory leaks) with Postscript fonts (in
3988 src/psaux/psobjs.c).
3990 - Many fixes for 16-bit correctness.
3992 - Removed many pedantic compiler warnings from the sources.
3994 - Added an Amiga build directory in `builds/amiga'.
3997 ======================================================================
3999 CHANGES BETWEEN 2.0.4 and 2.0.3
4001 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
4002 the font transformation set through FT_Set_Transform was applied
4003 twice to auto-hinted glyphs, resulting in incorrectly rotated text
4006 - Fixed _many_ compiler warnings. FT2 should now compile cleanly
4007 with Visual C++'s most pedantic warning level (/W4). It already
4008 compiled fine with GCC and a few other compilers.
4010 - Fixed a bug that prevented the linear advance width of composite
4011 TrueType glyphs to be correctly returned.
4013 - Fixed the Visual C++ project files located in
4014 `builds/win32/visualc' (previous versions used older names of the
4017 - Many 32-bit constants have an `L' appended to their value, in
4018 order to improve the 16-bitness of the code. Someone is actually
4019 trying to use FT2 on an Atari ST machine!
4021 - Updated the `builds/detect.mk' file in order to automatically
4022 build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
4023 `/sbin/init' and wasn't previously detected as a Unix platform by
4024 the FreeType build system.
4026 - Updated the Unix-specific portions of the build system (new
4027 libtool version, etc.).
4029 - The SFNT kerning loader now ensures that the table is sorted
4030 (since some problem fonts do not meet this requirement).
4033 =======================================================================
4035 CHANGES BETWEEN 2.0.3 and 2.0.2
4037 I. CHANGES TO THE MODULES / FONT DRIVERS
4039 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
4040 several annoying artefacts, mainly:
4042 - Blue zone alignment of horizontal stems wasn't performed
4043 correctly, resulting in artefacts like the `d' being placed
4044 one pixel below the `b' in some fonts like Time New Roman.
4046 - Overshoot thresholding wasn't performed correctly, creating
4047 unpleasant artefacts at large character pixel sizes.
4049 - Composite glyph loading has been simplified. This gets rid
4050 of various artefacts where the components of a composite
4051 glyphs were not correctly spaced.
4053 These are the last changes to the current auto-hinting module.
4054 A new hinting sub-system is currently in the work in order to
4055 support native hints in Type 1 / CFF / OpenType fonts, as well
4056 as globally improve rendering.
4058 - The PCF driver has been fixed. It reported invalid glyph
4059 dimensions for the fonts available on Solaris.
4061 - The Type 1, CID and CFF drivers have been modified to fix the
4062 computation of the EM size.
4064 - The Type 1 driver has been fixed to avoid a dangerous bug that
4065 crashed the library with non-conforming fonts (i.e. ones that do
4066 not place the .notdef glyph at position 0).
4068 - The TrueType driver had a rather subtle bug (dangling pointer
4069 when loading composite glyphs) that could crash the library in
4073 II. HIGH-LEVEL API CHANGES
4075 - The error code enumeration values have been changed. An error
4076 value is decomposed in a generic error code, and a module
4077 number. see <freetype/fterrors.h> for details.
4079 - A new public header file has been introduced, named
4080 FT_TRIGONOMETRY_H (include/freetype/fttrigon.h), providing
4081 trigonometric functions to compute sines, cosines, arctangents,
4082 etc. with 16.16 fixed precision. The implementation is based on
4083 the CORDIC algorithm and is very fast while being sufficiently
4089 - Added BeOS-specific files in the old build sub-system. Note
4090 that no changes were required to compile the library with Jam.
4092 - The configuration is now capable of automatically detecting
4093 64-bit integers on a set of predefined compilers (GCC, Visual
4094 C++, Borland C++) and will use them by default. This provides a
4095 small performance boost.
4097 - A small memory leak that happened when opening 0-sized files
4098 (duh!) have been fixed.
4100 - Fixed bezier stack depth bug in the routines provided by the
4101 FT_BBOX_H header file. Also fixed similar bugs in the
4104 - The outline bounding box code has been rewritten to use direct
4105 computations, instead of bezier sub-division, to compute the
4106 exact bounding box of glyphs. This is slightly slower but more
4109 - The build system has been improved and fixed, mainly to support
4110 `make' on Windows 2000 correctly, avoid problems with `make
4111 distclean' on non Unix systems, etc.
4113 - Hexadecimal constants have been suffixed with `U' to avoid
4114 problems with certain compilers on 64-bit platforms.
4116 - A new directory named `src/tools' has been created. It contains
4117 Python scripts and simple unit test programs used to develop the
4120 - The DocMaker tool has been moved from `docs' to `src/tools' and
4121 has been updated with the following:
4123 - Now accepts the `--title=XXXX' or `-t XXXX' option from the
4124 command line to set the project's name in the generated API
4127 - Now accepts the `--output=DIR' or `-o DIR' option from the
4128 command line to set the output directory for all generated
4131 - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
4132 command line to set the file prefix to use for all
4133 generated HTML files.
4135 - Now generates the current time/data on each generated page
4136 in order to distinguish between versions.
4138 DocMaker can be used with other projects now, not only FT2
4139 (e.g. MLib, FTLayout, etc.).
4142 ======================================================================
4144 CHANGES BETWEEN 2.0.2 and 2.0.1
4146 I. CHANGES TO THE MODULES / FONT DRIVERS
4148 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
4149 avoid legal problems with the Apple patents. It seems that we
4150 mistakenly turned this option on in previous releases of the
4153 Note that if you want to use the bytecode interpreter in order
4154 to get high-quality TrueType rendering, you will need to toggle
4155 by hand the definition of the
4156 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
4157 `include/freetype/config/ftoption.h'.
4159 - The CFF driver has been improved by Tom Kacvinsky and Sander van
4162 * Support for `seac' emulation.
4163 * Support for `dotsection'.
4164 * Support for retrieving glyph names through
4165 `FT_Get_Glyph_Name'.
4167 The first two items are necessary to correctly a large number of
4168 Type 1 fonts converted to the CFF formats by Adobe Acrobat.
4170 - The Type 1 driver was also improved by Tom & others:
4172 * Better EM size computation.
4173 * Better support for synthetic (transformed) fonts.
4174 * The Type 1 driver returns the charstrings corresponding to
4175 each glyph in the `glyph->control_data' field after a call to
4176 `FT_Load_Glyph' (thanks Ha Shao).
4178 - Various other bugfixes, including the following:
4180 * Fixed a nasty memory leak in the Type 1 driver.
4181 * The autohinter and the pcf driver used static writable data
4182 when they shouldn't.
4183 * Many casts were added to make the code more 64-bits safe. It
4184 also now compiles on Windows XP 64-bits without warnings.
4185 * Some incorrect writable statics were removed in the `autohint'
4186 and `pcf' drivers. FreeType 2 now compiles on Epoc again.
4189 II. CHANGES TO THE HIGH-LEVEL API
4191 - The library header files inclusion scheme has been changed. The
4192 old scheme looked like:
4194 #include <freetype/freetype.h>
4195 #include <freetype/ftglyph.h>
4196 #include <freetype/ftcache.h>
4197 #include <freetype/cache/ftimage.h>
4201 #include <ft2build.h>
4202 #include FT_FREETYPE_H
4205 #include FT_CACHE_IMAGE_H
4207 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
4208 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
4209 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
4211 The file <ft2build.h> is used to define the header filename
4212 macros. The complete and commented list of macros is available
4213 in the API reference under the section name `Header File Macros'
4216 For more information, see section I of the following document:
4218 https://www.freetype.org/freetype2/docs/tutorial/step1.html
4220 - Many, many comments have been added to the public source file in
4221 order to automatically generate the API Reference through the
4222 `docmaker.py' Python script.
4224 The latter has been updated to support the grouping of sections
4225 in chapters and better index sort. See:
4227 https://www.freetype.org/freetype2/docs/reference/ft2-toc.html
4230 III. CHANGES TO THE BUILD PROCESS
4232 - If you are not building FreeType 2 with its own build system
4233 (but with your own Makefiles or project files), you will need to
4234 be aware that the build process has changed a little bit.
4236 You don't need to put the `src' directory in the include path
4237 when compiling any FT2 component. Instead, simply put the
4238 component's directory in the current include path.
4240 So, if you were doing something like:
4242 cc -c -Iinclude -Isrc src/base/ftbase.c
4246 cc -c -Iinclude -Isrc/base src/base/ftbase.c
4248 If you were doing something like:
4251 cc -c -I../../include -I.. ftbase.c
4256 cc -c -I../../include ftbase.c
4259 ======================================================================
4261 CHANGES BETWEEN 2.0.1 and 2.0
4263 2.0.1 introduces a few changes:
4265 - Fixed many bugs related to the support of CFF / OpenType fonts.
4266 These formats are now much better supported though there is
4267 still work planned to deal with charset tables and PDF-embedded
4268 CFF files that use the old `seac' command.
4270 - The library could not be compiled in debug mode with a very
4271 small number of C compilers whose pre-processors didn't
4272 implement the `##' directive correctly (i.e. per se the ANSI C
4273 specification!) An elegant fix was found.
4275 - Added support for the free Borland command-line C++ Builder
4276 compiler. Use `make setup bcc32'. Also fixed a few source
4277 lines that generated new warnings with BCC32.
4279 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
4282 - Updated the INSTALL file to add IDE compilation.
4284 - Other minor bug fixes, from invalid Type 1 style flags to
4285 correct support of synthetic (obliqued) fonts in the
4286 auto-hinter, better support for embedded bitmaps in a SFNT font.
4288 - Fixed some problems with `freetype-config'.
4290 Finally, the `standard' scheme for including FreeType headers is now
4291 gradually changing, but this will be explained in a later release
4294 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
4295 for their contributions!
4298 ======================================================================
4300 CHANGES BETWEEN beta8 and 2.0
4302 - Changed the default installation path for public headers from
4303 `include/freetype' to `include/freetype2'.
4305 Also added a new `freetype-config' that is automatically generated
4306 and installed on Unix and Cygwin systems. The script itself is
4307 used to retrieve the current install path, C compilation flags as
4308 well as linker flags.
4310 - Fixed several small bugs:
4312 * Incorrect max advance width for fixed-pitch Type 1 fonts.
4313 * Incorrect glyph names for certain TrueType fonts.
4314 * The glyph advance was not copied when FT_Glyph_To_Bitmap was
4316 * The linearHoriAdvance and linearVertAdvance fields were not
4317 correctly returned for glyphs processed by the auto-hinter.
4318 * `type1z' renamed back to `type1'; the old `type1' module has
4321 - Revamped the build system to make it a lot more generic. This
4322 will allow us to re-use nearly un-modified in lots of other
4323 projects (including FreeType Layout).
4325 - Changed `cid' to use `psaux' too.
4327 - Added the cache sub-system. See <freetype/ftcache.h> as well as
4328 the sources in `src/cache'. Note that it compiles but is still
4331 - Updated `docs/docmaker.py', a draft API reference is available at
4332 https://web.archive.org/web/20001215173400/http://www.freetype.org:80/ft2api.html.
4334 - Changed `type1' to use `psaux'.
4336 - Created a new module named `psaux' to hold the Type 1 & Type 2
4337 parsing routines. It should be used by `type1', `cid', and `cff'
4340 - Fixed an important bug in `FT_Glyph_Get_CBox'.
4342 - Fixed some compiler warnings that happened since the TrueType
4343 bytecode decoder was deactivated by default.
4345 - Fixed two memory leaks:
4347 * The memory manager (16 bytes) isn't released in
4349 * Using custom input streams, the copy of the original stream was
4352 - Fixed the auto-hinter by performing automatic computation of the
4353 `filling direction' of each glyph. This is done through a simple
4354 and fast approximation, and seems to work (problems spotted by
4355 Werner though). The Arphic fonts are a lot nicer though there are
4356 still a lot of things to do to handle Asian fonts correctly.
4359 ======================================================================
4361 BETA-8 (RELEASE CANDIDATE) CHANGES
4363 - Deactivated the TrueType bytecode interpreter by default.
4365 - Deactivated the `src/type1' font driver. Now `src/type1z' is used
4368 - Updates to the build system. We now compile the library correctly
4369 under Unix system through `configure' which is automatically
4370 called on the first `make' invocation.
4372 - Added the auto-hinting module! Fixing some bugs here and there.
4374 - Found some bugs in the composite loader (seac) of the Type1-based
4377 - Renamed the directory `freetype2/config' to `freetype2/builds' and
4378 updated all relevant files.
4380 - Found a memory leak in the `type1' driver.
4382 - Incorporated Tom's patches to support flex operators correctly in
4383 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
4384 fonts to be done with this driver :-)
4386 - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
4387 always `simulates' a Unicode charmap, so it shouldn't be
4388 considered completed right now.
4390 It is there to be more a proof of concept than anything else
4391 anyway. The driver is a single C source file, that compiles to 3
4394 I'm still working on the PCF/BDF drivers, but I'm too lazy to
4397 - CHANGES TO THE HIGH-LEVEL API
4399 * FT_Get_Kerning has a new parameter that allows you to select the
4400 coordinates of the kerning vector (font units, scaled, scaled +
4402 * The outline functions are now in <freetype/ftoutln.h> and not
4403 part of <freetype/freetype.h> anymore.
4404 * <freetype/ftmodule.h> now contains declarations for
4405 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
4406 * The so-called convenience functions have moved from `ftoutln.c'
4407 to `ftglyph.c', and are thus available with this optional
4408 component of the library. They are declared in
4409 <freetype/ftglyph.h> now.
4410 * Anti-aliased rendering is now the default for FT_Render_Glyph
4411 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
4412 To generate a monochrome bitmap, use ft_render_mode_mono, or the
4413 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
4414 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
4415 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
4416 solving a few headaches :-)
4417 * The type FT_GlyphSlotRec has now a `library' field.
4419 - CHANGES TO THE `ftglyph.h' API
4421 This API has been severely modified in order to make it simpler,
4422 clearer, and more efficient. It certainly now looks like a real
4423 `glyph factory' object, and allows client applications to manage
4424 (i.e. transform, bbox and render) glyph images without ever
4425 knowing their original format.
4427 - Added support for CID-keyed fonts to the CFF driver. Maybe
4428 support for pure CFF + CEF fonts should come in?
4430 - Cleaned up source code in order to avoid two functions with the
4431 same name. Also changed the names of the files in `type1z' from
4432 `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
4434 `make multi' now works well :-)
4436 Also removed the use of `cidafm' for now, even if the source files
4437 are still there. This functionality will certainly go into a
4440 - ADDED SUPPORT FOR THE AUTO-HINTER
4442 It works :-) I have a demo program which simply is a copy of
4443 `ftview' that does a `FT_Add_Module(library,
4444 &autohinter_module_class)' after library initialization, and Type
4445 1 & OpenType/CFF fonts are now hinted.
4447 CID fonts are not hinted, as they include no charmap and the
4448 auto-hinter doesn't include `generic' global metrics computations
4451 Now, I need to release this thing to the FreeType 2 source.
4453 - CHANGES TO THE RENDERER MODULES
4455 The monochrome and smooth renderers are now in two distinct
4456 directories, namely `src/raster1' and `src/smooth'. Note that the
4457 old `src/renderer' is now gone.
4459 I ditched the 5-gray-levels renderers. Basically, it involved a
4460 simple #define toggle in 'src/raster1/ftraster.c'.
4462 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
4463 select the best renderer available, depending on render mode. If
4464 the current renderer for a given glyph image format isn't capable
4465 of supporting the render mode, another one will be found in the
4466 library's list. This means that client applications do not need
4467 to switch or set the renderers themselves (as in the latest
4468 change), they'll get what they want automatically. At last.
4470 Changed the demo programs accordingly.
4472 - MAJOR INTERNAL REDESIGN:
4474 A lot of internal modifications have been performed lately on the
4475 source in order to provide the following enhancements:
4477 * More generic module support:
4479 The FT_Module type is now defined to represent a handle to a
4480 given module. The file <freetype/ftmodule.h> contains the
4481 FT_Module_Class definition, as well as the module-loading public
4484 The FT_Driver type is still defined, and still represents a
4485 pointer to a font driver. Note that FT_Add_Driver is replaced
4486 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
4488 * Support for generic glyph image types:
4490 The FT_Renderer type is a pointer to a module used to perform
4491 various operations on glyph image.
4493 Each renderer is capable of handling images in a single format
4494 (e.g. ft_glyph_format_outline). Its functions are used to:
4496 - transform an glyph image
4497 - render a glyph image into a bitmap
4498 - return the control box (dimensions) of a given glyph image
4500 The scan converters `ftraster.c' and `ftgrays.c' have been moved
4501 to the new directory `src/renderer', and are used to provide two
4502 default renderer modules.
4504 One corresponds to the `standard' scan-converter, the other to
4507 he current renderer can be set through the new function
4510 The old raster-related function FT_Set_Raster, FT_Get_Raster and
4511 FT_Set_Raster_Mode have now disappeared, in favor of the new:
4516 See the file <freetype/ftrender.h> for more details.
4518 These changes were necessary to properly support different
4519 scalable formats in the future, like bi-color glyphs, etc.
4521 * Glyph loader object:
4523 A new internal object, called a 'glyph loader' has been
4524 introduced in the base layer. It is used by all scalable format
4525 font drivers to load glyphs and composites.
4527 This object has been created to reduce the code size of each
4528 driver, as each one of them basically re-implemented its
4531 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
4534 * FT_GlyphSlot has new fields:
4536 In order to support extended features (see below), the
4537 FT_GlyphSlot structure has a few new fields:
4541 This field gives the linearly scaled (i.e. scaled but
4542 unhinted) advance width for the glyph, expressed as a 16.16
4543 fixed pixel value. This is useful to perform WYSIWYG text.
4546 This field gives the linearly scaled advance height for the
4547 glyph (relevant in vertical glyph layouts only). This is
4548 useful to perform WYSIWYG text.
4550 Note that the two above field replace the removed `metrics2'
4551 field in the glyph slot.
4554 This field is a vector that gives the transformed advance for
4555 the glyph. By default, it corresponds to the advance width,
4556 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
4557 FT_Load_Glyph or FT_Load_Char.
4560 This field gives the distance in integer pixels from the
4561 current pen position to the left-most pixel of a glyph image
4562 IF IT IS A BITMAP. It is only valid when the `format' field
4563 is set to `ft_glyph_format_bitmap', for example, after calling
4564 the new function FT_Render_Glyph.
4567 This field gives the distance in integer pixels from the
4568 current pen position (located on the baseline) to the top-most
4569 pixel of the glyph image IF IT IS A BITMAP. Positive values
4570 correspond to upwards Y.
4573 This is a new private field for the glyph slot. Client
4574 applications should not touch it.
4577 * Support for transforms and direct rendering in FT_Load_Glyph:
4579 Most of the functionality found in <freetype/ftglyph.h> has been
4580 moved to the core library. Hence, the following:
4582 - A transform can be specified for a face through
4583 FT_Set_Transform. this transform is applied by FT_Load_Glyph
4584 to scalable glyph images (i.e. NOT TO BITMAPS) before the
4585 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
4586 was set in the load flags.
4588 - Once a glyph image has been loaded, it can be directly
4589 converted to a bitmap by using the new FT_Render_Glyph
4590 function. Note that this function takes the glyph image from
4591 the glyph slot, and converts it to a bitmap whose properties
4592 are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
4593 and `face.glyph.bitmap_top'. The original native image might
4594 be lost after the conversion.
4596 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
4597 and FT_Load_Char functions will call FT_Render_Glyph
4598 automatically when needed.
4600 - Reformatted all modules source code in order to get rid of the
4601 basic data types redefinitions (i.e. `TT_Int' instead of `FT_Int',
4602 `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
4603 prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
4604 relevant structures.
4607 ======================================================================
4609 OLD CHANGES FOR BETA 7
4611 - bug-fixed the OpenType/CFF parser. It now loads and displays my
4612 two fonts nicely, but I'm pretty certain that more testing is
4615 - fixed the crummy Type 1 hinter, it now handles accented characters
4616 correctly (well, the accent is not always well placed, but that's
4619 - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
4620 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
4621 really useful CMAP files..
4623 - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
4624 Thanks to Boris Letocha for spotting them and providing a fix.
4626 - fixed potential `divide by zero' bugs in ftcalc.c.
4628 - added source code for the OpenType/CFF driver (still incomplete
4631 - modified the SFNT driver slightly to perform more robust header
4632 checks in TT_Load_SFNT_Header. This prevents certain font files
4633 (e.g. some Type 1 Multiple Masters) from being incorrectly
4634 `recognized' as TrueType font files..
4636 - moved a lot of stuff from the TrueType driver to the SFNT module,
4637 this allows greater code re-use between font drivers
4638 (e.g. TrueType, OpenType, Compact-TrueType, etc..)
4640 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
4641 to minimally speed it up..
4643 - added support for Multiple Master fonts in `type1z'. There is
4644 also a new file named <freetype/ftmm.h> which defines functions to
4645 manage them from client applications.
4647 The new file `src/base/ftmm.c' is also optional to the engine..
4649 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
4650 small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
4652 - a minor fix to the Type 1 driver to let them apply the font matrix
4653 correctly (used for many oblique fonts..)
4655 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
4656 to use %p instead of %lx). Thanks to Karl Robillard.
4658 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
4659 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
4660 cropped when loaded from a file (maybe I should move the bitmap
4661 cropper to the base layer ??).
4663 - changed the default number of gray levels of the smooth renderer
4664 to 256 (instead of the previous 128). Of course, the human eye
4665 can't see any difference ;-)
4667 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
4668 of subglyphs in a TrueType font now..
4671 ======================================================================
4673 OLD CHANGES 16 May 2000
4675 - tagged `BETA-6' in the CVS tree. This one is a serious release
4676 candidate even though it doesn't incorporate the auto-hinter yet..
4678 - various obsolete files were removed, and copyright header updated
4680 - finally updated the standard raster to fix the monochrome
4681 rendering bug + re-enable support for 5-gray levels anti-aliasing
4684 - created new header files, and modified sources accordingly:
4686 <freetype/fttypes.h>
4687 - simple FreeType types, without the API
4688 <freetype/internal/ftmemory.h>
4689 - definition of memory-management macros
4691 - added the `DSIG' (OpenType Digital Signature) tag to
4694 - light update/cleaning of the build system + changes to the sources
4695 in order to get rid of _all_ compiler warnings with three
4698 gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
4701 IMPORTANT NOTE FOR WIN32-LCC USERS:
4703 | It seems the C pre-processor that comes with LCC is broken, it
4704 | doesn't recognize the ANSI standard directives # and ##
4705 | correctly when one of the argument is a macro. Also,
4708 | #define F(x) print##x
4712 | will get incorrectly translated to:
4716 | by its pre-processor. For this reason, you simply cannot build
4717 | FreeType 2 in debug mode with this compiler..
4719 - yet another massive grunt work. I've changed the definition of
4720 the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
4721 now take an argument, which is the function's return value type.
4723 This is necessary to compile FreeType as a DLL on Windows and
4724 OS/2. Depending on the compiler used, a compiler-specific keyword
4725 like __export or __system must be placed before (VisualC++) or
4726 after (BorlandC++) the type..
4728 Of course, this needed a lot of changes throughout the source code
4729 to make it compile again... All cleaned up now, apparently..
4731 Note also that there is a new EXPORT_VAR macro defined to allow
4732 the _declaration_ of an exportable public (constant)
4733 variable. This is the case of the raster interfaces (see
4734 ftraster.h and ftgrays.h), as well as each module's interface (see
4735 sfdriver.h, psdriver.h, etc..)
4737 - new feature: it is now possible to pass extra parameters to font
4738 drivers when creating a new face object. For now,
4739 this capability is unused. It could however prove to
4740 be useful in a near future..
4742 the FT_Open_Args structure was changes, as well as the internal
4743 driver interface (the specific `init_face' module function has
4744 now a different signature).
4746 - updated the tutorial (not finished though).
4748 - updated the top-level BUILD document
4750 - fixed a potential memory leak that could occur when loading
4753 - added the declaration of FT_New_Memory_Face in
4754 <freetype/freetype.h>, as it was missing from the public header
4755 (the implementation was already in `ftobjs.c').
4757 - the file <freetype/fterrors.h> has been seriously updated in order
4758 to allow the automatic generation of error message tables. See
4759 the comments within it for more information.
4761 - major directory hierarchy re-organisation. This was done for two
4764 * first, to ease the `manual' compilation of the library by
4765 requiring at lot less include paths :-)
4767 * second, to allow external programs to effectively access
4768 internal data fields. For example, this can be extremely
4769 useful if someone wants to write a font producer or a font
4770 manager on top of FreeType.
4772 Basically, you should now use the 'freetype/' prefix for header
4775 #include <freetype/freetype.h>
4776 #include <freetype/ftglyph.h>
4778 Some new include sub-directories are available:
4780 a. the `freetype/config' directory, contains two files used to
4781 configure the build of the library. Client applications
4782 should not need to look at these normally, but they can if
4785 #include <freetype/config/ftoption.h>
4786 #include <freetype/config/ftconfig.h>
4788 b. the `freetype/internal' directory, contains header files that
4789 describes library internals. These are the header files that
4790 were previously found in the `src/base' and `src/shared'
4794 As usual, the build system and the demos have been updated to
4795 reflect the change..
4797 Here's a layout of the new directory hierarchy:
4826 Compiling a module is now much easier, for example, the following
4827 should work when in the TOP_DIR directory on an ANSI build:
4829 gcc -c -I./include -I./src/base src/base/ftbase.c
4830 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
4833 (of course, using -Iconfig/<system> if you provide system-specific
4834 configuration files).
4836 - updated the structure of FT_Outline_Funcs in order to allow direct
4837 coordinate scaling within the outline decomposition routine (this
4838 is important for virtual `on' points with TrueType outlines) +
4839 updates to the rasters to support this..
4841 - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
4842 order to support version 2 of the table (see OpenType 1.2 spec)
4844 - created `include/tttables.h' and `include/t1tables.h' to allow
4845 client applications to access some of the SFNT and T1 tables of a
4846 face with a procedural interface (see `FT_Get_Sfnt_Table') +
4847 updates to internal source files to reflect the change..
4849 - some cleanups in the source code to get rid of warnings when
4850 compiling with the `-Wall -W -ansi -pedantic' options in gcc.
4852 - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
4853 its header to `include/ftgrays.h'
4855 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
4856 with up to 80 sub-glyphs !! Thanks to Werner
4859 ======================================================================
4861 OLD CHANGES - 14-apr-2000
4863 - fixed a bug in the TrueType glyph loader that prevented the
4864 correct loading of some CJK glyphs in mingli.ttf
4866 - improved the standard Type 1 hinter in `src/type1'
4868 - fixed two bugs in the experimental Type 1 driver in `src/type1z'
4869 to handle the new XFree86 4.0 fonts (and a few other ones..)
4871 - the smooth renderer is now complete and supports sub-banding to
4872 render large glyphs at high speed. However, it is still located
4873 in `demos/src/ftgrays.c' and should move to the library itself in
4874 the next beta. NOTE: The smooth renderer doesn't compile in
4875 stand-alone mode anymore, but this should be fixed RSN..
4877 - introduced convenience functions to more easily deal with glyph
4878 images, see `include/ftglyph.h' for more details, as well as the
4879 new demo program named `demos/src/ftstring.c' that demonstrates
4882 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
4883 drivers (this is required by the auto-hinter to improve its
4886 - changed the raster interface, in order to allow client
4887 applications to provide their own span-drawing callbacks.
4888 However, only the smooth renderer supports this. See
4889 `FT_Raster_Params' in the file `include/ftimage.h'.
4891 - fixed a small bug in FT_MulFix that caused incorrect transform
4894 - Note: The tutorial is out-of-date.
4897 ======================================================================
4899 OLD CHANGES - 12-mar-2000
4901 - changed the layout of configuration files : now, all ANSI
4902 configuration files are located in
4903 `freetype2/config'. System-specific over-rides can be placed in
4904 `freetype2/config/<system>'.
4906 - moved all configuration macros to `config/ftoption.h'
4908 - improvements in the Type 1 driver with AFM support
4910 - changed the fields in the FT_Outline structure : the old `flags'
4911 array is re-named `tags', while all ancient flags are encoded into
4912 a single unsigned int named `flags'.
4914 - introduced new flags in FT_Outline.flags (see
4915 ft_outline_.... enums in `ftimage.h').
4917 - changed outline functions to `FT_Outline_<action>' syntax
4919 - added a smooth anti-alias renderer to the demonstration programs
4921 - added Mac graphics driver (thanks Just)
4923 - FT_Open_Face changed in order to received a pointer to a
4924 FT_Open_Args descriptor..
4926 - various cleanups, a few more API functions implemented (see
4932 ======================================================================
4934 OLD CHANGES - 22-feb-2000
4936 - introduced the `psnames' module. It is used to:
4938 o convert a Postscript glyph name into the equivalent Unicode
4939 character code (used by the Type 1 driver(s) to synthesize on
4940 the fly a Unicode charmap).
4942 o provide an interface to retrieve the Postscript names of the
4943 Macintosh, Adobe Standard & Adobe Expert character codes.
4944 (the Macintosh names are used by the SFNT-module postscript
4945 names support routines, while the other two tables are used by
4946 the Type 1 driver(s)).
4948 - introduced the `type1z' alternate Type 1 driver. This is a (still
4949 experimental) driver for the Type 1 format that will ultimately
4950 replace the one in `src/type1'. It uses pattern matching to load
4951 data from the font, instead of a finite state analyzer. It works
4952 much better than the `old' driver with `broken' fonts. It is also
4953 much smaller (under 15 Kb).
4955 - the Type 1 drivers (both in `src/type1' and `src/type1z') are
4956 nearly complete. They both provide automatic Unicode charmap
4957 synthesis through the `psnames' module. No re-encoding vector is
4958 needed. (note that they still leak memory due to some code
4959 missing, and I'm getting lazy).
4961 Trivial AFM support has been added to read kerning information but
4962 wasn't exactly tested as it should ;-)
4964 - The TrueType glyph loader has been seriously rewritten (see the
4965 file `src/truetype/ttgload.c'. It is now much, much simpler as
4966 well as easier to read, maintain and understand :-) Preliminary
4967 versions introduced a memory leak that has been reported by Jack
4968 Davis, and is now fixed..
4970 - introduced the new `ft_glyph_format_plotter', used to represent
4971 stroked outlines like Windows `Vector' fonts, and certain Type 1
4972 fonts like `Hershey'. The corresponding raster will be written
4975 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
4976 interface that uses a structure to describe the input stream, the
4977 driver (if required), etc..
4982 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
4984 - Add a function like FT_Load_Character(face, char_code, load_flags)
4985 that would really embed a call to FT_Get_Char_Index then
4986 FT_Load_Glyph to ease developer's work.
4988 - Update the tutorial!
4990 - consider adding support for Multiple Master fonts in the Type 1
4993 - Test the AFM routines of the Type 1 drivers to check that kerning
4994 information is returned correctly.
4996 - write a decent auto-gridding component !! We need this to release
5002 - add a CFF/Type2 driver
5004 - add a FNT/PCF/HBF driver
5005 - add a Speedo driver from the X11 sources
5008 ======================================================================
5010 OLDER CHANGES - 27-jan-2000
5012 - updated the `sfnt' module interface to allow several SFNT-based
5013 drivers to co-exist peacefully
5015 - updated the `T1_Face' type to better separate Postscript font
5016 content from the rest of the FT_Face structure. Might be used
5017 later by the CFF/Type2 driver..
5019 - added an experimental replacement Type 1 driver featuring advanced
5020 (and speedy) pattern matching to retrieve the data from postscript
5023 - very minor changes in the implementation of FT_Set_Char_Size and
5024 FT_Set_Pixel_Sizes (they now implement default to lighten the font
5028 ======================================================================
5032 This file summarizes the changes that occurred since the last `beta'
5033 of FreeType 2. Because the list is important, it has been divided into
5038 I High-Level Interface (easier !)
5039 II Directory Structure
5040 III Glyph Image Formats
5046 ----------------------------------------------------------------------
5048 High-Level Interface:
5050 The high-level API has been considerably simplified. Here is how:
5052 - resource objects have disappeared. this means that face objects
5053 can now be created with a single function call (see FT_New_Face
5056 - when calling either FT_New_Face & FT_Open_Face, a size object
5057 and a glyph slot object are automatically created for the face,
5058 and can be accessed through `face->glyph' and `face->size' if
5059 one really needs to. In most cases, there's no need to call
5060 FT_New_Size or FT_New_Glyph.
5062 - similarly, FT_Load_Glyph now only takes a `face' argument
5063 (instead of a glyph slot and a size). Also, its `result'
5064 parameter is gone, as the glyph image type is returned in the
5065 field `face->glyph.format'
5067 - the list of available charmaps is directly accessible through
5068 `face->charmaps', counting `face->num_charmaps' elements. Each
5069 charmap has an 'encoding' field which specifies which known
5070 encoding it deals with. Valid values are, for example:
5072 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
5073 ft_encoding_apple_roman
5075 ft_encoding_adobe_standard
5076 ft_encoding_adobe_expert
5078 other values may be added in the future. Each charmap still
5079 holds its `platform_id' and `encoding_id' values in case the
5080 encoding is too exotic for the current library
5083 ----------------------------------------------------------------------
5085 Directory Structure:
5087 Should seem obvious to most of you:
5090 config/ -- configuration sub-makefiles
5092 unix/ -- platform-specific configuration files
5097 include/ -- public header files, those to be included
5098 directly by client apps
5100 src/ -- sources of the library
5101 base/ -- the base layer
5102 sfnt/ -- the sfnt `driver' (see the drivers section
5104 truetype/ -- the truetype driver
5105 type1/ -- the type1 driver
5106 shared/ -- some header files shared between drivers
5108 demos/ -- demos/tools
5110 docs/ -- documentation (a bit empty for now)
5113 ----------------------------------------------------------------------
5115 Glyph Image Formats:
5117 Drivers are now able to register new glyph image formats within the
5118 library. For now, the base layer supports of course bitmaps and
5119 vector outlines, but one could imagine something different like
5120 colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
5123 See the file `include/ftimage.h'. Note also that the type
5124 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
5125 should encompass all known bitmap types.
5127 Each new image format must provide at least one `raster', i.e. a
5128 module capable of transforming the glyph image into a bitmap. It's
5129 also possible to change the default raster used for a given glyph
5132 The default outline scan-converter now uses 128 levels of grays by
5133 default, which tends to smooth many things. Note that the demo
5134 programs have been updated significantly in order to display these..
5137 ----------------------------------------------------------------------
5141 You still need GNU Make to build the library. The build system has
5142 been very seriously re-vamped in order to provide things like :
5144 - automatic host platform detection (reverting to 'config/ansi' if
5145 it is not detected, with pseudo-standard compilation flags)
5147 - the ability to compile from the Makefiles with very different and
5148 exotic compilers. Note that linking the library can be difficult
5151 For example, the file `config/win32/lcclib.bat' is invoked by the
5152 build system to create the `.lib' file with LCC-Win32 because its
5153 librarian has too many flaws to be invoked directly from the
5156 Here's how it works:
5158 - the first time you type `make', the build system runs a series of
5159 sub-makefiles in order to detect your host platform. It then
5160 dumps what it found, and creates a file called `config.mk' in the
5161 current directory. This is a sub-Makefile used to define many
5162 important Make variables used to build the library.
5164 - the second time, the build system detects the `config.mk' then use
5165 it to build the library. All object files go into 'obj' by
5166 default, as well as the library file, but this can easily be
5169 Note that you can run `make setup' to force another host platform
5170 detection even if a `config.mk' is present in the current
5171 directory. Another solution is simply to delete the file, then
5174 Finally, the default compiler for all platforms is gcc (for now,
5175 this will hopefully changed in the future). You can however specify
5176 a different compiler by specifying it after the 'setup' target as
5179 gnumake setup lcc on Win32 to use the LCC compiler
5180 gnumake setup visualc on Win32 to use Visual C++
5182 See the file `config/<system>/detect.mk' for a list of supported
5183 compilers for your platforms.
5185 It should be relatively easy to write new detection rules files and
5188 Finally, to build the demo programs, go to `demos' and launch GNU
5189 Make, it will use the `config.mk' in the top directory to build the
5193 ----------------------------------------------------------------------
5197 In the previous beta, a single FT_System object was used to
5198 encompass all low-level operations like thread synchronisation,
5199 memory management and i/o access. This has been greatly simplified:
5201 - thread synchronisation has been dropped, for the simple reason
5202 that the library is already re-entrant, and that if you really
5203 need two threads accessing the same FT_Library, you should
5204 really synchronize access to it yourself with a simple mutex.
5206 - memory management is performed through a very simple object
5207 called `FT_Memory', which really is a table containing a table
5208 of pointers to functions like malloc, realloc and free as well
5209 as some user data (closure).
5211 - resources have disappeared (they created more problems than they
5212 solved), and i/o management have been simplified greatly as a
5213 result. Streams are defined through FT_Stream objects, which
5214 can be either memory-based or disk-based.
5216 Note that each face has its own stream, which is closed only
5217 when the face object is destroyed. Hence, a function like
5218 TT_Flush_Face in 1.x cannot be directly supported. However, if
5219 you really need something like this, you can easily tailor your
5220 own streams to achieve the same feature at a lower level (and
5221 use FT_Open_Face instead of FT_New_Face to create the face).
5223 See the file `include/ftsystem.h' for more details, as well as the
5224 implementations found in `config/unix' and `config/ansi'.
5227 ----------------------------------------------------------------------
5231 The Font Driver interface has been modified in order to support
5232 extensions & versioning.
5235 The list of the font drivers that are statically linked to the
5236 library at compile time is managed through a new configuration file
5237 called `config/<platform>/ftmodule.h'.
5239 This file is autogenerated when invoking `make modules'. This
5240 target will parse all sub-directories of 'src', looking for a
5241 `module.mk' rules file, used to describe the driver to the build
5244 Hence, one should call `make modules' each time a font driver is
5245 added or removed from the `src' directory.
5247 Finally, this version provides a `pseudo-driver' in `src/sfnt'.
5248 This driver doesn't support font files directly, but provides
5249 services used by all TrueType-like font drivers. Hence, its code is
5250 shared between the TrueType & OpenType font formats, and possibly
5251 more formats to come if we're lucky..
5254 ----------------------------------------------------------------------
5258 The extensions support is inspired by the one found in 1.x.
5260 Now, each font driver has its own `extension registry', which lists
5261 which extensions are available for the font faces managed by the
5264 Extension ids are now strings, rather than 4-byte tags, as this is
5265 usually more readable.
5268 - some data, associated to each face object
5269 - an interface (table of function pointers)
5271 An extension that is format-specific should simply register itself
5272 to the correct font driver. Here is some example code:
5274 // Registering an extensions
5276 FT_Error FT_Init_XXXX_Extension( FT_Library library )
5278 FT_DriverInterface* tt_driver;
5280 driver = FT_Get_Driver( library, "truetype" );
5281 if (!driver) return FT_Err_Unimplemented_Feature;
5283 return FT_Register_Extension( driver, &extension_class );
5287 // Implementing the extensions
5289 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
5291 FT_XXX_Extension ext;
5292 FT_XXX_Extension_Interface ext_interface;
5294 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
5295 if (!ext) return error;
5297 return ext_interface->do_it(ext);
5300 ------------------------------------------------------------------------
5302 Copyright (C) 2000-2020 by
5303 David Turner, Robert Wilhelm, and Werner Lemberg.
5305 This file is part of the FreeType project, and may only be used,
5306 modified, and distributed under the terms of the FreeType project
5307 license, LICENSE.TXT. By continuing to use, modify, or distribute this
5308 file you indicate that you have read the license and understand and
5313 version-control: never
5317 --- end of CHANGES ---