2 CHANGES BETWEEN 2.5.4 and 2.5.5
6 - Handling of uncompressed PCF files works again (bug introduced
10 ======================================================================
12 CHANGES BETWEEN 2.5.3 and 2.5.4
14 I. IMPORTANT BUG FIXES
16 - A variant of vulnerability CVE-2014-2240 was identified
17 (cf. http://savannah.nongnu.org/bugs/?43661) and fixed in the
18 new CFF driver. All users should upgrade.
20 - The new auto-hinter code using HarfBuzz crashed for some invalid
23 - Many fixes to better protect against malformed input.
28 - Full auto-hinter support of the Devanagari script.
30 - Experimental auto-hinter support of the Telugu script.
32 - CFF stem darkening behaviour can now be controlled at build time
33 using the eight macros
35 CFF_CONFIG_OPTION_DARKENING_PARAMETER_{X,Y}{1,2,3,4} .
37 - Some fields in the `FT_Bitmap' structure have been changed from
38 signed to unsigned type, which better reflects the actual usage.
39 It is also an additional means to protect against malformed
42 This change doesn't break the ABI; however, it might cause
48 - Improvements to the auto-hinter's algorithm to recognize stems
51 - Function `FT_Get_SubGlyph_Info' always returned an error even in
54 - Version 2.5.1 introduced major bugs in the cjk part of the
55 auto-hinter, which are now fixed.
57 - The `FT_Sfnt_Tag' enumeration values have been changed to
58 uppercase, e.g. `FT_SFNT_HEAD'. The lowercase variants are
59 deprecated. This is for orthogonality with all other
60 enumeration (and enumeration-like) values in FreeType.
62 - `cmake' now supports builds of FreeType as an OS X framework and
65 - Improved project files for vc2010, introducing a property file.
67 - The documentation generator for the API reference has been
68 updated to produce better HTML code (with proper CSS). At the
69 same time, the documentation got a better structure.
71 - The FT_LOAD_BITMAP_CROP flag is obsolete; it is not used by any
74 - The TrueType DELTAP[123] bytecode instructions now work in
75 subpixel hinting mode as described in the ClearType whitepaper
76 (i.e., for touched points in the non-subpixel direction).
78 - Many small improvements to the internal arithmetic routines.
81 ======================================================================
83 CHANGES BETWEEN 2.5.2 and 2.5.3
85 I. IMPORTANT BUG FIXES
87 - A vulnerability (CVE-2014-2240) was identified and fixed in the
88 new CFF driver (cf. http://savannah.nongnu.org/bugs/?41697).
89 All users should upgrade.
91 - More bug fixes related to correct positioning of composite
94 - Many fixes to better protect against malformed input.
99 - FreeType can now use the HarfBuzz library to greatly improve the
100 auto-hinting of fonts that use OpenType features: Many glyphs
101 that are part of such features but don't have cmap entries are
102 now handled properly, for example small caps or superscripts.
103 Define the configuration macro FT_CONFIG_OPTION_USE_HARFBUZZ to
104 activate HarfBuzz support.
106 You need HarfBuzz version 0.9.19 or newer.
108 Note that HarfBuzz depends on FreeType; this currently causes a
109 chicken-and-egg problem that can be solved as follows in case
110 HarfBuzz is not yet installed on your system.
112 1. Compile and install FreeType without the configuration
113 macro FT_CONFIG_OPTION_USE_HARFBUZZ.
115 2. Compile and install HarfBuzz.
117 3. Define macro FT_CONFIG_OPTION_USE_HARFBUZZ, then compile
118 and install FreeType again.
120 With FreeType's `configure' script the procedure boils down to
121 configure, build, and install Freetype, then configure, compile,
122 and install HarfBuzz, then configure, compile, and install
123 FreeType again (after executing `make distclean').
125 - All libraries FreeType depends on are now checked using the
126 `pkg-config' configuration files first, followed by alternative
129 - The new value `auto' for the various `--with-XXX' library
130 options (for example `--with-harfbuzz=auto') makes the
131 `configure' script automatically link to the libraries it finds.
132 This is now the default.
134 - In case FreeType's `configure' script can't find a library, you
135 can pass environment variables to circumvent pkg-config, and
136 those variables have been harmonized as a consequence of the
137 changes mentioned above:
139 LIBZ -> removed; use LIBZ_CFLAGS and LIBZ_LIBS
140 LIBBZ2 -> removed; use BZIP2_CFLAGS and BZIP2_LIBS
141 LIBPNG_LDFLAGS -> LIBPNG_LIBS
143 `./configure --help' shows all available environment variables.
145 - The `freetype-config' script now understands option `--static'
146 to emit static linking information.
149 ======================================================================
151 CHANGES BETWEEN 2.5.1 and 2.5.2
153 I. IMPORTANT BUG FIXES
155 - Improving the display of some broken TrueType fonts introduced a
156 bug that made FreeType crash on some popular (but not fully
157 conformant) fonts like `ahronbd.ttf'.
159 - Another round of improvements to correct positioning and hinting
160 of composite glyphs in TrueType fonts.
165 - Version 2.5.1 introduced a bug in handling embedded bitmap
166 strikes of TrueType fonts, causing garbage display under some
169 - The `ftgrid' demo program couldn't be compiled in
170 non-development builds.
173 ======================================================================
175 CHANGES BETWEEN 2.5 and 2.5.1
177 I. IMPORTANT BUG FIXES
179 - For some WinFNT files, the last glyph wasn't displayed but
180 incorrectly marked as invalid.
182 - The vertical size of glyphs was incorrectly set after a call to
183 `FT_GlyphSlot_Embolden', resulting in clipped glyphs.
185 - Many fields of the `PCLT' table in SFNT based fonts (if accessed
186 with `FT_Get_Sfnt_Table') were computed incorrectly.
188 - In TrueType fonts, hinting of composite glyphs could sometimes
189 deliver incorrect positions of components or even distorted
193 II. IMPORTANT CHANGES
195 - WOFF font format support has been added.
197 - The auto-hinter now supports Hebrew. Greek and Cyrillic support
200 - Support for the forthcoming `OS/2' SFNT table version 5, as can
201 be found e.g. in the `Sitka' font family for Windows 8.1.
203 - The header file layout has been changed. After installation,
204 all files are now located in `<prefix>/include/freetype2'.
206 Applications that use (a) `freetype-config' or FreeType's
207 `pkg-config' file to get the include directory for the compiler,
208 and (b) the documented way for header inclusion like
210 #include <ft2build.h>
211 #include FT_FREETYPE_H
214 don't need any change to the source code.
219 - The stem darkening feature of the new CFF engine can now be
220 fine-tuned with the new `darkening-parameters' property.
222 - `ftgrid' has been updated to toggle various engines with the `H'
223 key, similar to `ftview' and `ftdiff'.
225 - The functionality of `ttdebug' has been greatly enhanced.
227 . It now displays twilight, storage, and control value data; key
228 `T' shows the twilight point table, key `S' the storage data,
229 and key `C' the control value table.
231 . Some keys have been reassigned from lowercase to their
232 uppercase equivalents; for example `q' to quit the program is
235 . Key `f' finishes the current function.
237 . Key `R' restarts the debugger.
239 . Keys `b' and `p' set a breakpoint.
241 . Key `B' provides a function call backtrace.
243 - Better support of ARMv7 and x86_64 processors.
245 - Apple's `sbix' color bitmap format is now supported.
247 - Improved auto-hinter rendering for many TrueType fonts,
248 especially in the range 20-40ppem.
250 - A new face flag `FT_FACE_FLAG_COLOR' has been added (to be
251 accessed with the macro `FT_HAS_COLOR').
253 - `FT_Gzip_Uncompress' (modeled after zlib's `uncompress'
254 function) has been added; this is a by-product of the newly
257 - Support for a build with `cmake' has been contributed by John
258 Cary <cary@txcorp.com>.
260 - Support for x64 builds with Visual C++ has been contributed by
261 Kenneth Miller <kennethadammiller@yahoo.com>
263 - Manual pages for most demo programs have been added.
265 - The GETINFO bytecode instruction for TrueType fonts was buggy if
266 used to retrieve subpixel hinting information. It was necessary
267 to set selector bit 6 to get results for selector bits 7-10,
270 - Improved computation of emulated vertical metrics for TrueType
273 - Fixed horizontal start-up position of vertical phantom points in
277 ======================================================================
279 CHANGES BETWEEN 2.4.12 and 2.5
281 I. IMPORTANT BUG FIXES
283 - The cache manager function `FTC_Manager_Reset' didn't flush the
287 II. IMPORTANT CHANGES
289 - Behdad Esfahbod (on behalf of Google) contributed support for
290 color embedded bitmaps (eg. color emoji).
292 A new load flag, FT_LOAD_COLOR, makes FreeType load color
293 embedded-bitmaps, following this draft specification
295 https://color-emoji.googlecode.com/git/specification/v1.html
297 which defines two new SFNT tables, `CBDT' and `CBLC' (named and
298 modeled after `EBDT' and `EBLC', respectively). The color
299 bitmaps are stored in the new FT_PIXEL_MODE_BGRA format to
300 represent BGRA pre-multiplied sRGB images. If PNG support is
301 available, PNG color images as defined in the same proposed
302 specification are supported also.
304 Note that color bitmaps are converted to grayscale if client
305 didn't ask for color.
307 - As announced in the previous release, the old FreeType CFF
308 engine is now disabled by default. It can be conditionally
309 compiled by defining the configuration macro
310 CFF_CONFIG_OPTION_OLD_ENGINE.
312 - As announced in the previous release, all code related to macro
313 FT_CONFIG_OPTION_OLD_INTERNALS has been removed, thus becoming
319 - The property API (`FT_Property_Get' and `FT_Property_Set') is
320 now declared as stable.
322 The exception, however, are the experimental auto-hinter
323 properties `glyph-to-script-map' and `fallback-script' which are
324 subject to change in a forthcoming release.
326 - `ftview' has been updated to support color embedded bitmaps; it
327 can be toggled on and off with key `c'. The small cache toggle
330 - It is now possible to control the version of the TrueType
331 hinting engine using the new `interpreter-version' property of
332 the `truetype' module: Versions 35 and 38 (the default) are
333 supported, which roughly corresponds to disable and enable
334 subpixel hinting support, respectively.
336 In both `ftview' and `ftdiff', switching between the two
337 versions can be done with key `H'. In the `ftbench' demo
338 program, command line option `-H' has been extended to activate
339 the non-default interpreter version.
341 - The `ttdebug' program has been further improved. In particular,
342 it accepts a new command line option `-H' to select the hinting
345 - `ftdump's verbose option has been renamed to `-V'. For all demo
346 programs, `-v' now shows version information.
348 - Another round of TrueType subpixel hinting fixes.
350 - The `apinames' tool can now create an import file for NetWare.
352 - 64bit compilation of the new CFF engine was buggy.
354 - Some fixes to improve robustness in memory-tight situations.
357 ======================================================================
359 CHANGES BETWEEN 2.4.11 and 2.4.12
361 - We have another CFF parsing and hinting engine! Written by Dave
362 Arnold <darnold@adobe.com>, this work has been contributed by
363 Adobe in collaboration with Google. It is vastly superior to
364 the old CFF engine, and it will replace it in the next release.
365 Right now, it is still off by default, and you have to
366 explicitly select it using the new `hinting-engine' property of
371 #include FT_CFF_DRIVER_H
374 int engine = FT_CFF_HINTING_ADOBE;
378 FT_Property_Set( library, "cff", "hinting-engine", &engine );
380 The code has a (mature) beta status; we encourage all users to
381 test it and report any problems.
383 In case you want to activate the new CFF engine unconditionally,
387 diff --git a/src/cff/cffobjs.c b/src/cff/cffobjs.c
388 index ebcf189..3f2ce6b 100644
389 --- a/src/cff/cffobjs.c
390 +++ b/src/cff/cffobjs.c
391 @@ -1056,7 +1056,7 @@
394 /* set default property values */
395 - driver->hinting_engine = FT_CFF_HINTING_FREETYPE;
396 + driver->hinting_engine = FT_CFF_HINTING_ADOBE;
397 driver->no_stem_darkening = FALSE;
402 - The macro FT_CONFIG_OPTION_OLD_INTERNALS is no longer set by
403 default. In the next release, we will completely remove the
404 associated code. Please update your programs in case you are
405 still using this macro.
410 - The (top-level) `configure' script now respects the MAKE
411 environment variable to specify a `make' binary. For backwards
412 compatibility, GNUMAKE still overrides MAKE, though.
414 - The `ftview' and `ftdiff' demo programs have been redesigned,
415 showing more options permanently on the screen, among other
418 - Using the `H' key, it is now possible to select the CFF engine
419 in both `ftview' and `ftdiff'.
421 - The new command line option `-H' for `ftbench' selects the Adobe
424 - It is now possible to directly select the LCD rendering mode
425 with the keys `A'-`F' in `ftview'. The key mapping for cycling
426 through LCD modes has been changed from `K' and `L' to `k' and
427 `l', and toggling custom LCD filtering is no longer mapped to
428 key `F' but to key `L'.
430 - In `ftdiff', key `x' toggles between layout modes: Either use
431 the advance width (this is new and now the default) or the
432 bounding box information to determine line breaks.
434 - For all demo tools, the new command line option `-v' shows the
437 - For the demo tools with a GUI, the new command line options `-w'
438 and `-h' select the width and the height of the output window,
441 - The `ttdebug' program was broken and has been reactivated. Note
442 that this program is not compiled by default.
445 ======================================================================
447 CHANGES BETWEEN 2.4.10 and 2.4.11
449 I. IMPORTANT BUG FIXES
451 - Some vulnerabilities in the BDF implementation have been fixed.
452 Users of this font format should upgrade.
455 II. IMPORTANT CHANGES
457 - Subpixel hinting support has been contributed by Infinality,
458 based on Greg Hitchcock's whitepaper at
460 http://www.microsoft.com/typography/cleartype/truetypecleartype.aspx
462 Originally, it was a separate patch available from
464 http://www.infinality.net/blog/
466 and which has been integrated.
468 Note that ClearType support is not completely implemented! In
469 particular, full support for the options `compatible_widths',
470 `symmetrical_smoothing, and `bgr' (via the GETINFO bytecode
471 instruction) is missing.
473 Activation of subpixel hinting support can be controlled with
474 the `TT_CONFIG_OPTION_SUBPIXEL_HINTING' configuration option; it
475 is switched off by default. This feature is still experimental;
476 we welcome test reports!
478 - Support for OpenType collections (OTC) has been added.
480 - Pure CFF fonts within an SFNT wrapper are now supported.
485 - Minor rendering improvements to the auto-hinter.
487 - `FT_GlyphSlot_Oblique' now uses a shear angle of 12°.
489 - Experimental support to handle `property modules', for example
490 to control the behaviour of the auto-hinter. The API consists
491 of two new functions, `FT_Property_Set' and `FT_Property_Get'.
493 The code is still subject to change and should not be used for
496 - The `ftdiff' demo program now supports UTF-8 encoded input files
499 - Using keys `r' and `R', you can now adjust the stroker radius in
500 the `ftview' demo program.
502 - Other, minor fixes and improvements.
505 ======================================================================
507 CHANGES BETWEEN 2.4.9 and 2.4.10
509 I. IMPORTANT BUG FIXES
511 - Incremental glyph loading as needed by ghostscript was broken.
516 - A new function `FT_Outline_EmboldenXY', contributed by Alexei
519 - In the `ftview' demo program, key `e' has been replaced with `x'
520 and `y' to embolden in the horizontal and vertical direction,
523 - The glyph spacing computation in `FT_GlyphSlot_Embolden' (and
524 similar code in `ftview') has been improved.
526 - Minor improvements to the TrueType bytecode interpreter and
527 glyph loader, the auto-hinter, and the B/W rasterizer.
530 ======================================================================
532 CHANGES BETWEEN 2.4.8 and 2.4.9
534 I. IMPORTANT BUG FIXES
536 - Another round of fixes to better handle invalid fonts. Many of
537 them are vulnerabilities (see CVE-2012-1126 up to CVE-2012-1144
538 and SA48320) so all users should upgrade.
543 - The `ENCODING -1 <n>' format of BDF fonts is now supported.
545 - For BDF fonts, support for the whole Unicode encoding range has
548 - Better TTF support for x_ppem != y_ppem.
550 - `FT_Get_Advances' sometimes returned bogus values.
552 - The demo programs no longer recognize and handle default
553 suffixes; you now have to always specify the complete font name.
555 - Better rendering and LCD mode cycling added to `ftview'.
558 ======================================================================
560 CHANGES BETWEEN 2.4.7 and 2.4.8
562 I. IMPORTANT BUG FIXES
564 - Some vulnerabilities in handling CID-keyed PostScript fonts have
565 been fixed; see CVE-2011-3439.
570 - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to
571 retrieve most of the dictionary keys in Type 1 fonts.
574 ======================================================================
576 CHANGES BETWEEN 2.4.6 and 2.4.7
578 I. IMPORTANT BUG FIXES
580 - Some vulnerabilities in handling Type 1 fonts have been fixed;
586 - FreeType now properly handles ZapfDingbats glyph names while
587 constructing a Unicode character map (for fonts which don't have
591 ======================================================================
593 CHANGES BETWEEN 2.4.5 and 2.4.6
595 I. IMPORTANT BUG FIXES
597 - For TrueType based fonts, the ascender and descender values were
598 incorrect sometimes (off by a pixel if the ppem value was not a
599 multiple of 5). Depending on the use you might now experience
600 a different layout; the change should result in better, more
601 consistent line spacing.
603 - Fix CVE-2011-0226 which causes a vulnerability while handling
606 - BDF fonts containing glyphs with negative values for ENCODING
607 were incorrectly rejected. This bug has been introduced in
608 FreeType version 2.2.0.
610 - David Bevan contributed a major revision of the FreeType stroker
613 . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.
615 . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has
616 been introduced to support PostScript and PDF miter joins.
618 . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
619 alias for FT_STROKER_LINEJOIN_MITER.
621 . Various stroking glitches has been fixed.
626 - SFNT bitmap fonts which contain an outline glyph for `.notdef'
627 only no longer set the FT_FACE_FLAG_SCALABLE flag.
630 ======================================================================
632 CHANGES BETWEEN 2.4.4 and 2.4.5
634 I. IMPORTANT BUG FIXES
636 - A rendering regression for second-order Bézier curves has been
637 fixed, introduced in 2.4.3.
640 II. IMPORTANT CHANGES
642 - If autohinting is not explicitly disabled, FreeType now uses
643 the autohinter if a TrueType based font doesn't contain native
646 - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made
647 redundant and is simply ignored; this means that FreeType now
648 ignores the global advance width value in TrueType fonts.
653 - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of
656 - Support for PCF files compressed with bzip2 has been contributed
657 by Joel Klinghed. To make this work, the OS must provide a
660 - Bradley Grainger contributed project and solution files in
661 Visual Studio 2010 format.
663 - Again some fixes to better handle broken fonts.
665 - Some improvements to the B/W rasterizer.
667 - Fixes to the cache module to improve robustness.
669 - Just Fill Bugs contributed (experimental) code to compute blue
670 zones for CJK Ideographs, improving the alignment of horizontal
671 stems at the top or bottom edges.
673 - The `ftgrid' demo program can now display autohinter segments,
674 to be toggled on and off with key `s'.
677 ======================================================================
679 CHANGES BETWEEN 2.4.3 and 2.4.4
681 I. IMPORTANT BUG FIXES
683 - UVS support (TrueType/OpenType cmap format 14) support is fixed.
684 This regression has been introduced in version 2.4.0.
689 - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums
690 of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when
691 a TrueType font without family name is given. The previous fix,
692 introduced in 2.4.3, was too rigorous, causing many subsetted
693 fonts (mainly from PDF files) displayed badly because FreeType
694 forced rendering with the TrueType bytecode engine instead of
697 - Better support for 64bit platforms.
699 - More fixes to improve handling of broken fonts.
702 ======================================================================
704 CHANGES BETWEEN 2.4.2 and 2.4.3
706 I. IMPORTANT BUG FIXES
708 - Fix rendering of certain cubic, S-shaped arcs. This regression
709 has been introduced in version 2.4.0.
714 - To fix the above mentioned rendering issue, a new spline
715 flattening algorithm has been introduced which speeds up both
716 conic and cubic arcs.
718 - Handling of broken fonts has been further improved.
721 ======================================================================
723 CHANGES BETWEEN 2.4.1 and 2.4.2
725 I. IMPORTANT BUG FIXES
727 - A stack overflow in CFF Type2 CharStrings interpreter is fixed.
729 - Handling Type 42 font deallocation was broken; additionally, the
730 library is now more robust against malformed Type 42 fonts.
735 - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and
736 `FT_Reference_Face' (in FT_FREETYPE_H), have been added to
737 simplify life-cycle management. A counter gets initialized to 1
738 at the time an FT_Library (or FT_Face) structure is created.
739 The two new functions increment the respective counter.
740 `FT_Done_Library' and `FT_Done_Face' then only destroy a library
741 or face if the counter is 1, otherwise they simply decrement the
745 ======================================================================
747 CHANGES BETWEEN 2.4.0 and 2.4.1
751 - A serious bug in the CFF font module prevented display of many
752 glyphs in CFF fonts like `MinionPro-Regular.otf'.
755 ======================================================================
757 CHANGES BETWEEN 2.3.12 and 2.4.0
761 - Since May 2010, all patents regarding the TrueType bytecode
762 interpreter have expired worldwide. Consequently, we now define
763 TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
764 TT_CONFIG_OPTION_UNPATENTED_HINTING).
766 - A new function `FT_Library_SetLcdFilterWeights' is available to
767 adjust the filter weights set by `FT_Library_SetLcdFilter'.
772 - Thanks to many reports from Robert Święcki, FreeType's stability
773 in handling broken or damaged fonts is much improved.
775 - Support for LCD filter control has been added to the demo
776 programs `ftdiff' and `ftview'.
779 ======================================================================
781 CHANGES BETWEEN 2.3.11 and 2.3.12
785 - For `FT_Open_Face', new parameters are available to ignore
786 preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
787 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
792 - Support for incremental font loading (controlled with the
793 FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default.
795 - Better support for vertical metrics.
797 - Various minor bug fixes.
800 ======================================================================
802 CHANGES BETWEEN 2.3.10 and 2.3.11
804 I. IMPORTANT BUG FIXES
806 - Version 2.3.10 broke PCF support.
809 ======================================================================
811 CHANGES BETWEEN 2.3.10 and 2.3.9
813 I. IMPORTANT BUG FIXES
815 - If all ASCII digits in a font have the same (unscaled) width,
816 the autohinter respects this and won't change it.
818 - TrueType fonts are now rasterized correctly if the horizontal
819 and vertical resolution differ.
821 - Type 1 fonts are now handled with increased precision internally
822 to avoid serious rounding issues if non-integral coordinates are
825 - Horizontally condensed CFF fonts (using the font matrix) were
826 rendered incorrectly. This bug has been introduced after
830 II. IMPORTANT CHANGES
832 - Support for the SFNT cmap 13 table format (as defined by the new
833 OpenType 1.6 specification) has been added.
835 - B/W rasterization of well-hinted TrueType fonts at small sizes
836 has been greatly improved.
838 - Calculation of vertical metrics in OpenType fonts has been
844 - It is now possible to change the emboldening factor in the
845 `ftview' demo program with keys `e' and `E'.
847 - It is now possible to change the slant value in the `ftview'
848 demo program with keys `s' and `S'.
850 - The 5-levels grayscale mode of the `ftraster' module (which
851 FreeType doesn't use by default) was broken since version 2.3.0.
853 - Compilation of the `ftgrays' and `ftraster' modules was broken
856 - Various fixes for compilation on 64bit and 16bit architectures.
859 ======================================================================
861 CHANGES BETWEEN 2.3.9 and 2.3.8
863 I. IMPORTANT BUG FIXES
865 - Very unfortunately, FreeType 2.3.8 contained a change that broke
866 its official ABI. The end result is that programs compiled
867 against previous versions of the library, but dynamically linked
868 to 2.3.8 can experience memory corruption if they call the
869 `FT_Get_PS_Font_Info' function.
871 We recommend all users to upgrade to 2.3.9 as soon as possible,
872 or to downgrade to a previous release of the library if this is
875 The origin of the bug is that a new field was added to the
876 publicly defined `PS_FontInfoRec' structure. Unfortunately,
877 objects of this type can be stack or heap allocated by callers
878 of `FT_Get_PS_Font_Info', resulting in a memory buffer
879 overwrite with its implementation in 2.3.8.
881 If you want to know whether your code is vulnerable to this
882 issue, simply search for the substrings `PS_FontInfo' and
883 `PS_Font_Info' in your source code. If none is found, your code
884 is safe and is not affected.
886 The FreeType team apologizes for the problem.
888 - The POSIX support of MacOS resource-fork fonts (Suitcase fonts
889 and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If
890 FreeType2 is built without Carbon framework, these fonts are not
891 handled correctly. Version 2.3.7 didn't have this bug.
893 - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for
894 almost all font formats except TrueType fonts.
896 - Fix a bug in the SFNT kerning table loader/parser which could
897 crash the engine if certain malformed tables were encountered.
899 - Composite SFNT bitmaps are now handled correctly.
902 II. IMPORTANT CHANGES
904 - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and
905 `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed
906 CFF fonts via CID values. This code has been contributed by
912 - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT
913 for empty outlines. This was incorrectly documented.
915 - The `ftview' demo program now supports UTF-8 encoded strings.
918 ======================================================================
920 CHANGES BETWEEN 2.3.8 and 2.3.7
922 I. IMPORTANT BUG FIXES
924 - CID-keyed fonts in an SFNT wrapper were not handled correctly.
926 - The smooth renderer produced truncated images (on the right) for
927 outline parts with negative horizontal values. Most fonts don't
928 contain outlines left to the y coordinate axis, but the effect
929 was very noticeable for outlines processed with FT_Glyph_Stroke,
932 - `FT_Get_TrueType_Engine_Type' returned a wrong value if both
933 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and
934 TT_CONFIG_OPTION_UNPATENTED_HINTING were defined.
936 - The `face_index' field in the `FT_Face' structure wasn't
937 initialized properly after calling FT_Open_Face and friends with
938 a positive face index for CFFs, WinFNTs, and, most importantly,
939 for TrueType Collections (TTCs).
942 II. IMPORTANT CHANGES
944 - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts
945 in an SFNT wrapper has been added -- such fonts are used on the
946 Mac. The core SFNT tables `TYP1' and `CID ' are passed to the
947 PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX',
948 `BBOX', etc.) are not supported yet.
950 - A new interface to extract advance values of glyphs without
951 loading their outlines has been added. The functions are called
952 `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file
953 `ftadvanc.h' (to be accessed as FT_ADVANCES_H).
955 - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been
956 contributed by David Bevan to access the embedding and
957 subsetting restriction information of fonts.
962 - FT_MulFix is now an inlined function; by default, assembler code
963 is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX
964 and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more.
966 - The handling of `tricky' fonts (this is, fonts which don't work
967 with the autohinter, needing the font format's hinting engine)
968 has been generalized and changed slightly:
970 . A new face flag FT_FACE_FLAG_TRICKY indicates that the font
971 format's hinting engine is necessary for correct rendering.
972 The macro FT_IS_TRICKY can be used to check this flag.
974 . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really
975 force raw loading of such fonts (without hinting), both
976 FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used --
977 this is something which you probably never want to do.
979 . Tricky TrueType fonts always use the bytecode interpreter,
980 either the patented or unpatented version.
982 - The function `FT_GlyphSlot_Own_Bitmap' has been moved from
983 FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official'
984 API. (The functions in FT_SYNTHESIS_H are still subject to
987 - In the `ftdiff' demo program you can now toggle the use of
988 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'.
991 ======================================================================
993 CHANGES BETWEEN 2.3.7 and 2.3.6
995 I. IMPORTANT BUG FIXES
997 - If the library was compiled on an i386 platform using gcc, and
998 compiler option -O3 was given, `FT_MulFix' sometimes returned
999 incorrect results which could have caused problems with
1000 `FT_Request_Metrics' and `FT_Select_Metrics', returning an
1001 incorrect descender size.
1003 - Pure CFFs without subfonts were scaled incorrectly if the font
1004 matrix was non-standard. This bug has been introduced in
1007 - The `style_name' field in the `FT_FaceRec' structure often
1008 contained a wrong value for Type 1 fonts. This misbehaviour
1009 has been introduced in version 2.3.6 while trying to fix
1010 another problem. [Note, however, that this value is
1011 informative only since the used algorithm to extract it is
1015 II. IMPORTANT CHANGES
1017 - Two new macros, FT_OUTLINE_SMART_DROPOUTS and
1018 FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with
1019 FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is
1020 now possible to control the dropout mode of the `raster' module
1021 (for B&W rasterization), using the `flags' field in the
1022 `FT_Outline' structure.
1024 - The TrueType bytecode interpreter now passes the dropout mode to
1025 the B&W rasterizer. This greatly increases the output for small
1026 ppem values of many fonts like `pala.ttf'.
1029 ======================================================================
1031 CHANGES BETWEEN 2.3.6 and 2.3.5
1033 I. IMPORTANT BUG FIXES
1035 - A bunch of potential security problems have been found. All
1036 users should update.
1038 - Microsoft Unicode cmaps in TrueType fonts are now always
1039 preferred over Apple cmaps. This is not a bug per se, but there
1040 exist some buggy fonts created for MS which have broken Apple
1041 cmaps. This affects only the automatic selection of FreeType;
1042 it's always possible to manually select an Apple Unicode cmap if
1045 - Many bug fixes to the TrueType bytecode interpreter.
1047 - Improved Mac support.
1049 - Subsetted CID-keyed CFFs are now supported correctly.
1051 - CID-keyed CFFs with subfonts which are scaled in a non-standard
1052 way are now handled correctly.
1054 - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
1055 the font was a Windows (bitmap) FNT/FON.
1058 II. IMPORTANT CHANGES
1060 - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
1061 access to those fields in a CID-keyed font. The code has been
1062 contributed by Derek Clegg.
1064 - George Williams contributed code to validate the new `MATH'
1065 OpenType table (within the `otvalid' module). The `ftvalid'
1066 demo program has been extended accordingly.
1068 - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
1069 has been contributed by George Williams.
1071 - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
1072 with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
1078 - Build support for symbian has been contributed.
1080 - Better WGL4 glyph name support, contributed by Sergey Tolstov.
1082 - Debugging output of the various FT_TRACEX macros is now sent to
1085 - The `ftview' demo program now provides artificial slanting too.
1087 - The `ftvalid' demo program has a new option `-f' to select the
1091 ======================================================================
1093 CHANGES BETWEEN 2.3.5 and 2.3.4
1095 I. IMPORTANT BUG FIXES
1097 - Some subglyphs in TrueType fonts were handled incorrectly due to
1098 a missing graphics state reinitialization.
1100 - Large .Z files (as distributed with some X11 packages) weren't
1101 handled correctly, making FreeType increase the heap stack in an
1104 - A large number of bugs have been fixed to avoid crashes and
1105 endless loops with invalid fonts.
1108 II. IMPORTANT CHANGES
1110 - The two new cache functions `FTC_ImageCache_LookupScaler' and
1111 `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
1112 glyphs using an `FTC_Scaler' object; this makes it possible to
1113 use fractional pixel sizes in the cache. The demo programs have
1114 been updated accordingly to use this feature.
1116 - A new API `FT_Get_CMap_Format' has been added to get the cmap
1117 format of a TrueType font. This is useful in handling PDF
1118 files. The code has been contributed by Derek Clegg.
1120 - The auto-hinter now produces better output by default for
1121 non-Latin scripts like Indic. This was done by using the CJK
1122 hinting module as the default instead of the Latin one. Thanks
1123 to Rahul Bhalerao for this suggestion.
1125 - A new API `FT_Face_CheckTrueTypePatents' has been added to find
1126 out whether a given TrueType font uses patented bytecode
1127 instructions. The `ft2demos' bundle contains a new program
1128 called `ftpatchk' which demonstrates its usage.
1130 - A new API `FT_Face_SetUnpatentedHinting' has been added to
1131 enable or disable the unpatented hinter.
1133 - Support for Windows FON files in PE format has been contributed
1134 by Dmitry Timoshkov.
1139 - Vincent Richomme contributed Visual C++ project files for Pocket
1143 ======================================================================
1145 CHANGES BETWEEN 2.3.4 and 2.3.3
1147 I. IMPORTANT BUG FIXES
1149 - A serious bug in the handling of bitmap fonts (and bitmap
1150 strikes of outline fonts) has been introduced in 2.3.3.
1153 ======================================================================
1155 CHANGES BETWEEN 2.3.3 and 2.3.2
1157 I. IMPORTANT BUG FIXES
1159 - Remove a serious regression in the TrueType bytecode interpreter
1160 that was introduced in version 2.3.2. Note that this does not
1161 disable the improvements introduced to the interpreter in
1162 version 2.3.2, only some ill cases that occurred with certain
1163 fonts (though a few popular ones).
1165 - The auto-hinter now ignores single-point contours for computing
1166 blue zones. This bug created `wavy' baselines when rendering
1167 text with various fonts that use these contours to model
1168 mark-attach points (these are points that are never rasterized
1169 and are placed outside of the glyph's real outline).
1171 - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
1172 zero for mono-spaced fonts. Otherwise code that uses them would
1173 essentially ruin the fixed-advance property.
1175 - Fix CVE-2007-1351 which can cause an integer overflow while
1176 parsing BDF fonts, leading to a potentially exploitable heap
1182 - Fixed compilation issues on some 64-bit platforms (see ChangeLog
1185 - A new demo program `ftdiff' has been added to compare TrueType
1186 hinting, FreeType's auto hinting, and rendering without hinting
1190 ======================================================================
1192 CHANGES BETWEEN 2.3.2 and 2.3.1
1194 I. IMPORTANT BUG FIXES
1196 - FreeType returned incorrect kerning information from TrueType
1197 fonts when the bytecode interpreter was enabled. This happened
1198 due to a typo introduced in version 2.3.0.
1200 - Negative kerning values from PFM files are now reported
1201 correctly (they were read as 16-bit unsigned values from the
1204 - Fixed a small memory leak when `FT_Init_FreeType' failed for
1207 - The Postscript hinter placed and sized very thin and ghost stems
1210 - The TrueType bytecode interpreter has been fixed to get rid of
1211 most of the rare differences seen in comparison to the Windows
1215 II. IMPORTANT CHANGES
1217 - The auto-hinter now better deals with serifs and corner cases
1218 (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
1219 spacing adjustments and doesn't change widths for non-spacing
1222 - Many Mac-specific functions are deprecated (but still
1223 available); modern replacements have been provided for them.
1224 See the documentation in file `ftmac.h'.
1227 ======================================================================
1229 CHANGES BETWEEN 2.3.1 and 2.3.0
1231 I. IMPORTANT BUG FIXES
1233 - The TrueType interpreter sometimes returned incorrect horizontal
1234 metrics due to a bug in the handling of the SHZ instruction.
1236 - A typo in a security check introduced after version 2.2.1
1237 prevented FreeType to render some glyphs in CFF fonts.
1240 ======================================================================
1242 CHANGES BETWEEN 2.3.0 and 2.2.1
1244 I. IMPORTANT BUG FIXES
1246 - The PCF font loader is now much more robust while loading
1247 malformed font files.
1249 - Various memory leaks have been found and fixed.
1251 - The TrueType name loader now deals properly with some fonts that
1252 encode their names in UTF-16 (the specification was vague, and
1253 the code incorrectly assumed UCS-4).
1255 - Fixed the TrueType bytecode loader to deal properly with subtle
1256 monochrome/gray issues when scaling the CVT. Some fonts
1257 exhibited bad rendering artifacts otherwise.
1259 - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
1260 (it mangled the vertical advance height).
1262 - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
1265 - The PFR font loader no longer erroneously tags font files
1266 without any outlines as FT_FACE_FLAG_SCALABLE.
1269 II. NEW API FUNCTIONS
1271 - `FT_Library_SetLcdFilter' allows you to select a special filter
1272 to be applied to the bitmaps generated by `FT_Render_Glyph' if
1273 one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
1274 been selected. This filter is used to reduce color fringes;
1275 several settings are available through the FT_LCD_FILTER_XXX
1278 Its declaration and documentation can be found in file
1279 `include/freetype/ftlcdfil.h' (to be accessed with macro
1282 *IMPORTANT*: This function returns an error
1283 (FT_Err_Unimplemented_Feature) in default builds of the library
1284 for patent reasons. See below.
1286 - `FT_Get_Gasp' allows you to query the flags of the TrueType
1287 `gasp' table for a given character pixel size. This is useful
1288 to duplicate the text rendering of MS Windows when the native
1289 bytecode interpreter is enabled (which isn't the default for
1290 other patent reasons).
1292 Its declaration and documentation can be found in file
1293 `include/freetype/ftgasp.h' (to be accessed with macro
1297 III. IMPORTANT CHANGES
1299 - The auto-hinter has been tuned a lot to improve its results with
1300 serif fonts, resulting in much better font rendering of many web
1303 - The unpatented hinter is now part of the default build of the
1304 library; we have added code to automatically support `tricky'
1307 This means that FreeType should `just work' with certain Asian
1308 fonts, like MingLiU, which cannot properly be loaded without a
1309 bytecode interpreter, but which fortunately do not use any of
1310 the patented bytecode opcodes. We detect these fonts by name,
1311 so please report any font file that doesn't seem to work with
1312 FreeType, and we shall do what we can to support it in a next
1315 Note that the API hasn't changed, so you can still force
1316 unpatented hinting with a special parameter to `FT_Open_Face' as
1317 well. This might be useful in same cases; for example, a PDF
1318 reader might present a user option to activate it to deal with
1319 certain `tricky' embedded fonts which cannot be clearly
1322 If you are a developer for embedded systems, you might want to
1323 *disable* the feature to save code space by undefining
1324 TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
1326 - LCD-optimized rendering is now *disabled* in all default builds
1327 of the library, mainly due to patent issues. For more
1330 http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
1332 A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
1333 has been introduced in `ftoption.h'; manually define it in this
1334 file if you want to re-enable the feature.
1336 The change only affects the implementation, not the FreeType
1337 API. This means that clients don't need to be modified, because
1338 the library still generates LCD decimated bitmaps, but with the
1339 added constraint that R=G=B on each triplet.
1341 The displayed result should be equal to normal anti-aliased
1344 Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
1345 defined, the new `FT_Library_SetLcdFilter' function returns the
1346 FT_Err_Unimplemented_Feature error code.
1348 - Some computation bugs in the TrueType bytecode interpreter were
1349 found, which allow us to get rid of very subtle and rare
1350 differences we had experienced with the Windows renderer.
1352 - It is now possible to cross-compile the library easily. See the
1353 file `docs/INSTALL.CROSS' for details.
1355 - The file `src/base/ftmac.c' now contains code for Mac OS X only;
1356 its deprecated function `FT_GetFile_From_Mac_Font_Name' always
1357 returns an error even if the QuickDraw framework is available.
1358 The previous version has been moved to `builds/mac/ftmac.c'.
1360 Selecting configure option `--with-quickdraw-carbon' makes the
1361 build process use the original `ftmac.c' file instead of the Mac
1367 - Various performance and memory footprint optimizations have been
1368 performed on the TrueType and CFF font loaders, sometimes with
1369 very drastic benefits (e.g., the TrueType loader is now about
1370 25% faster; FreeType should use less heap memory under nearly
1373 - The anti-aliased rasterizer has been optimized and is now 15% to
1374 25% percent faster than in previous versions, depending on
1377 - The Type 1 loader has been improved; as an example, it now skips
1378 top-level dictionaries properly.
1380 - Better support for Mac fonts on POSIX systems, plus compilation
1381 fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
1383 - Configuration without `--with-old-mac-fonts' does not include
1384 `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
1386 - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
1390 ======================================================================
1392 CHANGES BETWEEN 2.2.1 and 2.2
1394 I. IMPORTANT BUG FIXES
1396 - Various integer overflows have been fixed.
1398 - PFB fonts with MacOS resource fork weren't handled correctly on
1399 non-MacOS platforms.
1402 ======================================================================
1404 CHANGES BETWEEN 2.2 and 2.1.10
1406 (not released officially)
1408 I. IMPORTANT BUG FIXES
1410 - Vertical metrics for SFNT fonts were incorrect sometimes.
1412 - The FT_HAS_KERNING macro always returned 0.
1414 - CFF OpenType fonts didn't return correct vertical metrics for
1415 glyphs with outlines.
1417 - If FreeType was compiled without hinters, all font formats based
1418 on PS outlines weren't scaled correctly.
1421 II. IMPORTANT CHANGES
1423 - Version 2.2 no longer exposes its internals, this is, the header
1424 files located in the `include/freetype/internal' directory of
1425 the source package are not copied anymore by the `make install'
1426 command. Consequently, a number of rogue clients which directly
1427 access FreeType's internal functions and structures won't
1428 compile without modification.
1430 We provide patches for most of those rogue clients. See the
1431 following page for more information:
1433 http://www.freetype.org/freetype2/patches/rogue-patches.html
1435 Note that, as a convenience to our Unix desktop users, version
1436 2.2 is *binary* compatible with FreeType 2.1.7, which means that
1437 installing this release on an existing distribution shall not
1438 break any working desktop.
1440 - FreeType's build mechanism has been redesigned. With GNU make
1441 it is now sufficient in most cases to edit two files:
1442 `modules.cfg', to select the library components, and the
1443 configuration file `include/freetype/config/ftoption.h' (which
1444 can be copied to the objects directory). Removing unused module
1445 directories to prevent its compilation and editing
1446 `include/freetype/config/ftmodule.h' is no longer necessary.
1448 - The LIGHT hinting algorithm produces more pleasant results.
1449 Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
1450 always forces auto-hinting, as a special exception. This allows
1451 you to experiment with it even if you have enabled the TrueType
1452 bytecode interpreter in your build.
1454 - The auto hinter now employs a new algorithm for CJK fonts, based
1455 on Akito Hirai's patch. Note that this only works for fonts
1456 with a Unicode charmap at the moment.
1458 - The following callback function types have changed slightly (by
1459 adding the `const' keyword where appropriate):
1461 FT_Outline_MoveToFunc
1462 FT_Outline_LineToFunc
1463 FT_Outline_ConicToFunc
1464 FT_Outline_CubicToFunc
1466 FT_Raster_RenderFunc
1468 FT_Glyph_TransformFunc
1469 FT_Renderer_RenderFunc
1470 FT_Renderer_TransformFunc
1472 Note that this doesn't affect binary backward compatibility.
1474 - On MacOS, new APIs have been added as replacements for legacy
1475 APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
1476 and `FT_GetFile_From_Mac_ATS_Name' for
1477 `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
1478 FreeType is built without disabling them.
1480 - A new API `FT_Select_Size' has been added to select a bitmap
1481 strike by its index. Code using other functions to select
1482 bitmap strikes should be updated to use this function.
1484 - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
1485 subglyph data. This can be used by rogue clients which used to
1486 access the internal headers to get the corresponding data.
1488 - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
1489 BDF/PCF fonts, and only for them. This causes inconsistency.
1490 In this release, we undo the change. The intent of the change
1491 in 2.1.10 is to allow size selection through real dimensions,
1492 which can now be done through `FT_Request_Size'.
1494 - Some security issues were discovered and fixed in the CFF and
1495 Type 1 loader, causing crashes of FreeType by malformed font
1501 - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
1502 values now better reflects its usage and differences: One set is
1503 used to specify the hinting algorithm, the other to specify the
1504 pixel rendering mode.
1506 - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
1507 changed to count supported scalable faces (sfnt, LWFN) only, and
1508 to return the number of available faces via face->num_faces.
1509 Unsupported bitmap faces (fbit, NFNT) are ignored.
1511 - builds/unix/configure has been improved for MacOS X. It now
1512 automatically checks available functions in Carbon library, and
1513 prepare to use newest functions by default. Options to specify
1514 the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
1515 QuickDraw, ATS) are available too. By manual disabling of all
1516 QuickDraw functionality, FreeType can be built without
1517 `deprecated function' warnings on MacOS 10.4.x, but
1518 FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
1519 function, and returns an `unimplemented' error. For details see
1522 - SFNT cmap handling has been improved, mainly to run much faster
1525 - A new function `FT_Get_TrueType_Engine_Type (declared in
1526 `FT_MODULE_H') is provided to determine the status of the
1527 TrueType bytecode interpreter compiled into the library
1528 (patented, unpatented, unimplemented).
1530 - Vertical metrics of glyphs are synthesized if the font does not
1531 provide such information. You can tell whether the metrics are
1532 synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
1535 - The demo programs `ftview' and `ftstring' have been rewritten
1536 for better readability. `ftview' has a new switch `-p' to test
1537 FT_New_Memory_Face (instead of FT_New_Face).
1539 - FreeType now honours bit 1 in the `head' table of TrueType fonts
1540 (meaning `left sidebearing point at x=0'). This helps with some
1543 - Rudimentary support for Adobe's new `SING Glyphlet' format. See
1545 http://www.adobe.com/products/indesign/sing_gaiji.html
1547 for more information.
1549 - The `ftdump' program from the `ft2demos' bundle now shows some
1550 information about charmaps. It also supports a new switch `-v'
1551 to increase verbosity.
1553 - Better AFM support. This includes track kerning support.
1556 ======================================================================
1558 CHANGES BETWEEN 2.1.10 and 2.1.9
1560 I. IMPORTANT BUG FIXES
1562 - The size comparison for BDF and PCF files could fail sometimes.
1564 - Some CFF files were still not loaded correctly. Patch from
1567 - The stroker still had some serious bugs.
1569 - Boris Letocha fixed a bug in the TrueType interpreter: The
1570 NPUSHW instruction wasn't skipped correctly in IF clauses. Some
1571 fonts like `Helvetica 75 Bold' failed.
1573 - Another serious bug in handling TrueType hints caused many
1574 distortions. It has been introduced in version 2.1.8, and it is
1575 highly recommended to upgrade.
1577 - FreeType didn't properly parse empty Type 1 glyphs.
1579 - An unbound dynamic buffer growth was fixed in the PFR loader.
1581 - Several bugs have been fixed in the cache sub-system.
1583 - FreeType behaved incorrectly when resizing two distinct but very
1584 close character pixel sizes through `FT_Set_Char_Size' (Savannah
1587 - The auto-hinter didn't work properly for fonts without a Unicode
1588 charmap -- it even refused to load the glyphs.
1591 II. IMPORTANT CHANGES
1593 - Many fixes have been applied to drastically reduce the amount of
1594 heap memory used by FreeType, especially when using
1595 memory-mapped font files (which is the default on Unix systems
1596 which support them).
1598 - The auto-hinter has been replaced with a new module, called the
1599 `auto-fitter'. It consumes less memory than its predecessor,
1600 and it is prepared to support non-latin scripts better in next
1603 - George Williams contributed code to read kerning data from PFM
1606 - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
1607 TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
1608 setting family and style in SFNT fonts (patch from Kornfeld
1611 - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
1612 been added to retrieve name and size information of SFNT tables.
1614 - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
1615 been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
1616 JSTF). After validation it is no longer necessary to check
1617 for errors in those tables while accessing them.
1619 Note that this module might be moved to another library in the
1620 future to avoid a tight dependency between FreeType and the
1621 OpenType specification.
1623 - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
1624 `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
1625 been added. Its use is to convert an FT_Bitmap structure in
1626 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
1627 probably using a different pitch, and to further manipulate it.
1629 - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
1630 control how outlines are embolded.
1632 - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
1633 also (code contributed by Chia I Wu). Note that this function
1634 is still experimental and may be replaced with a better API.
1636 - The method how BDF and PCF bitmap fonts are accessed has been
1637 refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
1638 were synonyms in FreeType's BDF and PCF interface. This has
1639 changed now. FT_Set_Pixel_Sizes should be used to select the
1640 actual font dimensions (the `strike', which is the sum of the
1641 `FONT_ASCENT' and `FONT_DESCENT' properties), while
1642 FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
1643 property). In both functions, the width parameter is ignored.
1648 - The BDF driver no longer converts all returned bitmaps with a
1649 depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
1650 not mentioned this explicitly, but implementors might have
1651 relied on this after looking into the source files.
1653 - A new option `--ftversion' has been added to freetype-config to
1654 return the FreeType version.
1656 - The memory debugger has been updated to dump allocation
1657 statistics on all allocation sources in the library. This is
1658 useful to spot greedy allocations when loading and processing
1661 - We removed a huge array of constant pointers to constant strings
1662 in the `psnames' module. The problem was that compilations in
1663 PIC mode (i.e., when generating a Unix shared object/dll) put
1664 the array into the non-shared writable section of the library
1665 since absolute pointers are not relocatable by nature.
1667 This reduces the memory consumption by approximately 16KByte per
1668 process linked to FreeType. We now also store the array in a
1669 compressed form (as a trie) which saves about 20KByte of code as
1672 - Kirill Smelkov provided patches to make src/raster/ftraster.c
1673 compile stand-alone again.
1676 ======================================================================
1678 CHANGES BETWEEN 2.1.9 and 2.1.8
1680 I. IMPORTANT BUG FIXES
1682 - The function `FT_Get_CharMap_Index' was only declared, without
1683 any real code. For consistency, it has been renamed to
1684 `FT_Get_Charmap_Index'. (This function is needed to implement
1687 - `FT_Outline_Get_BBox' sometimes returned incorrect values for
1688 conic outlines (e.g., for TrueType fonts).
1690 - Handling of `bhed' table has been fixed.
1692 - The TrueType driver with enabled byte code interpreter sometimes
1693 returned artifacts due to incorrect rounding. This bug has been
1694 introduced after version 2.1.4.
1696 - The BDF driver dropped the last glyph in the font.
1698 - The BDF driver now uses the DEFAULT_CHAR property (if available)
1699 to select a glyph shape for the undefined glyph.
1701 - The stroker failed for closed outlines and single points.
1704 II. IMPORTANT CHANGES
1706 - George Williams contributed code to handle Apple's font
1707 distortion technology found in GX fonts (`avar', `cvar', `fvar',
1708 and `gvar' tables; the Multiple Masters API has been slightly
1709 extended to cope with the new functionality).
1711 - The `FT_GlyphSlotRec' structure has been extended: The elements
1712 `lsb_delta' and `rsb_delta' give the difference between hinted
1713 and unhinted left and right side bearings if autohinting is
1714 active. Using those values can improve the inter-letter spacing
1715 considerably. See the documentation of `FT_GlyphSlotRec' and
1716 the `ftstring' demo program how to use it.
1718 - Loading TrueType and Type 1 fonts has been made much faster.
1720 - The stroker is no longer experimental (but the cache subsystem
1726 - A new documentation file `formats.txt' describes various font
1727 formats supported (and not supported) by FreeType.
1730 ======================================================================
1732 CHANGES BETWEEN 2.1.8 and 2.1.7
1734 I. IMPORTANT BUG FIXES
1736 - The native TrueType hinter contained some bugs which prevented
1737 some fonts to be rendered correctly, most notably Legendum.otf.
1739 - The PostScript hinter now produces improved results.
1741 - The linear advance width and height values were incorrectly
1742 rounded, making them virtually unusable if not loaded with
1743 FT_LOAD_LINEAR_DESIGN.
1745 - Indexing CID-keyed CFF fonts is now working: The glyph index is
1746 correctly treated as a CID, similar to FreeType's CID driver
1747 module. Note that CID CMap support is still missing.
1749 - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
1752 - Some subsetted Type 1 fonts weren't parsed correctly. This bug
1753 has been introduced in 2.1.7. In summary, the Type 1 parser has
1756 - Non-decimal numbers weren't parsed correctly in PS fonts.
1758 - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
1759 but one encoding. Use the new FT_WinFNT_ID_XXX values together
1760 with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
1762 - The descender metrics (face->size->metrics.descender) for WinFNT
1763 bitmap fonts had the wrong sign.
1765 - The (emulated) `seac' support for CFF fonts was broken.
1767 - The `flex' operator didn't work for CFF fonts.
1769 - PS glyphs which use the `hintmask' operator haven't been
1770 rendered correctly in some cases.
1772 - Metrics for BDF and PCF bitmap font formats have been fixed.
1774 - Autohinting is now disabled for glyphs which are vertically
1775 distorted or mirrored (using a transformation matrix). This
1776 fixes a bug which produced zero-height glyphs.
1778 - The `freetype-config' script now handles --prefix and
1779 --exec-prefix correctly; it also returns the proper --rpath (or
1780 -R) value if FreeType has been built as a shared library.
1783 II. IMPORTANT CHANGES
1785 - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
1786 ADD_STYLE_NAME properties. Values are appended to
1787 face->style_name; example: `Bold SemiCondensed'.
1789 - The PCF driver now handles bitmap fonts compressed with the LZW
1790 algorithm (extension .pcf.Z, compressed with `compress').
1792 - A new API function `FT_Get_CMap_Language_ID' (declared in
1793 `tttables.h') is available to get the language ID of a
1796 - The hexadecimal format of data after the `StartData' command in
1797 CID-keyed Type 1 fonts is now supported. While this can't occur
1798 in file-based fonts, it can happen in document-embedded
1799 resources of PostScript documents.
1801 - Embedded bitmaps in SFNT-based CFF fonts are now supported.
1803 - A simple API is now available to control FreeType's tracing
1804 mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
1805 `ftdebug.h' for more details.
1807 - YAMATO Masatake contributed improved handling of MacOS resource
1808 forks on non-MacOS platforms (for example, Linux can mount MacOS
1811 - Support for MacOS has been improved; there is now a new function
1812 `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
1813 it accepts an FSSpec instead of a path.
1815 - The cache sub-system has been rewritten.
1817 - There is now support for deinstallation of faces.
1819 - A new API function `FTC_Manager_RemoveFaceID' has been added
1820 to delete all `idle' nodes that correspond to a given
1821 FTC_FaceID. All `locked' nodes (i.e., those with a reference
1822 count > 0), will be modified to prevent them from appearing in
1823 further lookups (they will be cleaned normally when their
1824 reference count reaches 0).
1826 - There is now support for point scaling (i.e., providing
1827 character sizes in points + dpis, instead of pixels).
1829 - Three abstract cache classes are now available:
1831 FTC_GCache: Used to store one glyph item per cache node,
1832 with the ability to group common attributes into
1833 `families'. This replaces the old
1834 FTC_GlyphCache class.
1836 FTC_ICache: Used to store one FT_Glyph per cache node. This
1837 extends FTC_GCache. Family definition, family
1838 comparison, and glyph loading are however left
1841 FTC_SCache: Used to store up to 16 small bitmaps per cache
1842 node. This extends FTC_GCache. Family
1843 definition, family comparison and glyph loading
1844 are however left to sub-classes.
1846 - The file `src/cache/ftcbasic.c' implements:
1848 FTC_ImageCache: Extends FTC_ICache; implements family
1849 definitions and glyph loading similar to the
1852 FTC_SBitCache: Extends FTC_SCache, implements family
1853 definitions and glyph loading similar to the
1856 Client applications should be able to extend FTC_GCache,
1857 FTC_ICache, or FTC_SCache much more easily (i.e., less code to
1858 write, and less callbacks). For example, one could envision
1859 caches that are capable of storing transformed (obliqued),
1860 stroked, emboldened, or colored glyph images. Use
1861 `ftcbasic.c' as an example.
1863 - All public APIs are now in `include/freetype/ftcache.h', (to
1864 be accessed as `FT_CACHE_H'). The contents of
1865 `include/freetype/cache/' is only needed by applications that
1866 wish to implement their own caches.
1868 - There were some major performance improvements through the use
1869 of various programming tricks. Cache hits are up to 70%
1870 faster than in the old code.
1872 - The FTC_CMapCache has been simplified. Charmaps can only be
1873 accessed by index right now. There is also a new API named
1874 `FT_Charmap_GetIndex' for this purpose.
1876 - The demo programs have been updated to the new code. The
1877 previous versions will not work with the current one.
1879 - Using an invalid face index in FT_Open_Face and friends now
1880 causes an error even if the font contains a single face only.
1885 - Wolfgang Domröse contributed support files for building FreeType
1886 on the Atari using the PureC compiler. Note that the Atari is a
1889 - Vitaliy Pasternak contributed project files for VS.NET 2003.
1892 ======================================================================
1894 CHANGES BETWEEN 2.1.7 and 2.1.6
1896 I. IMPORTANT BUG FIXES
1898 - Updated to newest libtool version, fixing build problems on
1901 - On Unix platforms, `make install' didn't copy the correct
1904 Note that version 2.1.7 contains the same library C source code as
1908 ======================================================================
1910 CHANGES BETWEEN 2.1.6 and 2.1.5
1912 I. IMPORTANT BUG FIXES
1914 - The PFR font driver didn't load kerning tables correctly, and
1915 the functions in FT_PFR_H didn't work at all.
1917 - Type 1 font files in binary format (PFB) with an end-of-file
1918 indicator weren't accepted by the FreeType engine.
1920 - Fonts which contain /PaintType and /StrokeWidth no longer cause
1921 a segfault. This bug has been introduced in version 2.1.5.
1923 - Fonts loaded with FT_LOAD_RENDER no longer cause strange
1924 results. This bug has been introduced in version 2.1.5.
1926 - Some Windows (bitmap) FNT/FON files couldn't be handled
1930 II. IMPORTANT CHANGES
1932 - The internal module API has been heavily changed in favor of
1933 massive simplifications within the font engine. This also means
1934 that authors of third-party modules must adapt their code to the
1937 NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
1940 - The PostScript parser has been enhanced to handle comments and
1941 strings correctly. Additionally, more syntax forms are
1944 - Added the optional unpatented hinting system for TrueType. It
1945 allows typefaces which need hinting to produce correct glyph
1946 forms (e.g., Chinese typefaces from Dynalab) to work acceptably
1947 without infringing Apple patents. This system is compiled only
1948 if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
1949 ftoption.h (activated by default).
1954 - There is now a guard in the public header files to protect
1955 against inclusion of freetype.h from FreeType 1.
1957 - Direct inclusion of freetype.h and other public header files no
1958 longer works. You have to use the documented scheme
1960 #include <ft2build.h>
1961 #include FT_FREETYPE_H
1963 to load freetype.h with a symbolic name. This protects against
1964 renaming of public header files (which shouldn't happen but
1965 actually has, avoiding two public header files with the same
1969 ======================================================================
1971 CHANGES BETWEEN 2.1.5 and 2.1.4
1973 I. IMPORTANT BUG FIXES
1975 - Parsing the /CIDFontName field now removes the leading slash to
1976 be in sync with other font drivers.
1978 - gzip support was buggy. Some fonts could not be read.
1980 - Fonts which have nested subglyphs more than one level deep no
1981 longer cause a segfault.
1983 - Creation of synthetic cmaps for fonts in CFF format was broken
1986 - Numeric font dictionary entries for synthetic fonts are no
1989 - The font matrix wasn't applied to the advance width for Type1,
1990 CID, and CFF fonts. This caused problems when loading certain
1991 synthetic Type 1 fonts like `Helvetica Narrow'.
1993 - The test for the charset registry in BDF and PCF fonts is now
1996 - FT_Vector_Rotate sometimes returned strange values due to
1999 - The PCF driver now returns the correct number of glyphs
2000 (including an artificial `notdef' glyph at index 0).
2002 - FreeType now supports buggy CMaps which are contained in many
2003 CJK fonts from Dynalab.
2005 - Opening an invalid font on a Mac caused a segfault due to
2006 double-freeing memory.
2008 - BDF fonts with more than 32768 glyphs weren't supported
2012 II. IMPORTANT CHANGES
2014 - Accessing bitmap font formats has been synchronized. To do that
2015 the FT_Bitmap_Size structure has been extended to contain new
2016 fields `size', `x_ppem', and `y_ppem'.
2018 - The FNT driver now returns multiple faces, not multiple strikes.
2020 - The `psnames' module has been updated to the Adobe Glyph List
2023 - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
2025 - The algorithm for guessing the font style has been improved.
2027 - For fonts in SFNT format, root->height is no longer increased if
2028 the line gap is zero. There exist fonts (containing e.g. form
2029 drawing characters) which intentionally have a zero line gap
2032 - ft_glyph_bbox_xxx flags are now deprecated in favour of
2035 - ft_module_xxx flags are now deprecated in favour of
2038 - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
2039 deprecated in favour of
2040 FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
2041 are not specific to Microsoft.
2046 - The autohinter has been further improved; for example, `m'
2047 glyphs now retain its vertical symmetry.
2049 - Partial support of Mac fonts on non-Mac platforms.
2051 - `make refdoc' (after first `make') builds the HTML
2052 documentation. You need Python for this.
2054 - The make build system should now work more reliably on DOS-like
2057 - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
2060 - Better VMS build support.
2062 - Support for the pkg-config package by providing a `freetype.pc'
2065 - New configure option --with-old-mac-fonts for Darwin.
2067 - Some source files have been renamed (mainly to fit into the 8.3
2071 ======================================================================
2073 CHANGES BETWEEN 2.1.4 and 2.1.3
2075 I. IMPORTANT BUG FIXES
2077 - Updated to newest libtool version, fixing build problems on
2080 - A fix in the Gzip stream reader: It couldn't read certain .gz
2081 files properly due to a small typo. In certain cases, FreeType
2082 could also loop endlessly when trying to load tiny gzipped
2085 - The configure script now tries to use the system-wide zlib when
2086 it finds one (instead of the copy found in src/gzip). And
2087 `freetype-config' has been updated to return relevant flags in
2088 this case when invoked with `--libs' (e.g. `-lzlib').
2090 - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
2091 Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
2094 - The CFF loader was modified to accept fonts which only contain a
2095 subset of their reference charset. This prevented the correct
2096 use of PDF-embedded fonts.
2098 - The logic to detect Unicode charmaps has been modified. This is
2099 required to support fonts which include both 16-bit and 32-bit
2100 charmaps (like very recent asian ones) using the new 10 and 12
2103 - The TrueType loader now limits the depth of composite glyphs.
2104 This is necessary to prevent broken fonts to break the engine by
2105 blowing the stack with recursive glyph definitions.
2107 - The CMap cache is now capable of managing UCS-4 character codes
2108 that are mapped through extended charmaps in recent
2109 TrueType/OpenType fonts.
2111 - The cache sub-system now properly manages out-of-memory
2112 conditions instead of blindly reporting them to the caller.
2113 This means that it will try to empty the cache before restarting
2114 its allocations to see if that can help.
2116 - The PFR driver didn't return the list of available embedded
2119 - There was a nasty memory leak when using embedded bitmaps in
2120 certain font formats.
2123 II. IMPORTANT CHANGES
2125 - David Chester contributed some enhancements to the auto-hinter
2126 that significantly increase the quality of its output. The
2127 Postscript hinter was also improved in several ways.
2129 - The FT_RENDER_MODE_LIGHT render mode was implemented.
2131 - A new API function called `FT_Get_BDF_Property' has been added
2132 to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
2133 files. THIS IS STILL EXPERIMENTAL, since it hasn't been
2134 properly tested yet.
2136 - A Windows FNT specific API has been added, mostly to access font
2137 headers. This is used by Wine.
2139 - TrueType tables without an `hmtx' table are now tolerated when
2140 an incremental interface is used. This happens for certain
2141 Type42 fonts passed from Ghostscript to FreeType.
2143 - The PFR font driver is now capable of returning the font family
2144 and style names when they are available (instead of the sole
2145 `FontID'). This is performed by parsing an *undocumented*
2146 portion of the font file!
2151 - The path stroker in FT_STROKER_H has entered beta stage. It now
2152 works very well, but its interface might change a bit in the
2153 future. More on this in later releases.
2155 - The documentation for FT_Size_Metrics didn't appear properly in
2158 - The file docs/VERSION.DLL has been updated to explain versioning
2159 with FreeType (i.e., comparing release/libtool/so numbers, and
2160 how to use them in autoconf scripts).
2162 - The installation documentation has been seriously revamped.
2163 Everything is now in the `docs' directory.
2166 ======================================================================
2168 CHANGES BETWEEN 2.1.3 and 2.1.2
2170 I. IMPORTANT BUG FIXES
2172 - FT_Vector_Transform had been incorrectly modified in 2.1.2,
2173 resulting in incorrect transformations being applied (for
2174 example, rotations were processed in opposite angles).
2176 - The format 8 and 12 TrueType charmap enumeration routines have
2177 been fixed (FT_Get_Next_Char returned invalid values).
2179 - The PFR font driver returned incorrect advance widths if the
2180 outline and metrics resolution defined in the font file were
2183 - FT_Glyph_To_Bitmap now returns successfully when called with an
2184 FT_BitmapGlyph argument (it previously returned an error).
2186 - A bug in the Type 1 loader that prevented valid font bounding
2187 boxes to be loaded from multiple master fonts.
2189 - The SFNT validation code has been rewritten. FreeType can now
2190 load `broken' fonts that were usable on Windows, but not with
2191 previous versions of the library.
2193 - The computation of bearings in the BDF driver has been fixed.
2195 - The Postscript hinter crashed when trying to hint certain glyphs
2196 (more precisely, when trying to apply hints to an empty glyph
2199 - The TrueType glyph loader now supports composites in `Apple
2200 format' (they differ slightly from Microsoft/OpenType ones in
2201 the way transformation offsets are computed).
2203 - FreeType was very slow at opening certain asian CID/CFF fonts,
2204 due to fixed increment in dynamic array re-allocations. This
2205 has been changed to exponential behaviour to get acceptable
2210 II. IMPORTANT CHANGES
2212 - The PCF driver now supports gzip-compressed font files natively.
2213 This means that you will be able to use all these bitmap fonts
2214 that come with XFree86 with FreeType (and libXft/libXft2, by
2217 - The automatic and postscript hinters have both been updated.
2218 This results in a relatively important increase of rendering
2219 quality since many nasty defaults have been suppressed. Please
2222 http://www.freetype.org/hinting/smooth-hinting.html
2224 for additional details on this topic.
2226 - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
2227 (instead of just being an FT_Int). This breaks source and
2228 binary compatibility for 16bit systems only, while retaining
2229 both of them for 32 and 64 bit ones.
2231 Some new flags have been added consequently:
2233 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
2234 (but not native format hinters).
2236 FT_LOAD_TARGET_NORMAL :: Hint and render for normal
2237 anti-aliased displays.
2239 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
2241 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
2242 BGR sub-pixel displays (like LCD
2243 screens). THIS IS STILL
2246 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
2247 vertical sub-pixel displays (like
2248 rotated LCD screens). THIS IS STILL
2251 FT_LOAD_MONOCHROME is still supported, but only affects
2252 rendering, not the hinting.
2254 Note that the `ftview' demo program available in the `ft2demos'
2255 package has been updated to support LCD-optimized display on
2256 non-paletted displays (under Win32 and X11).
2258 - The PFR driver now supports embedded bitmaps (all formats
2259 supported), and returns correct kerning metrics for all glyphs.
2261 - The TrueType charmap loader now supports certain `broken' fonts
2262 that load under Windows without problems.
2264 - The cache API has been slightly modified (it's still a beta!):
2266 - The type FTC_ImageDesc has been removed; it is now replaced
2267 by FTC_ImageTypeRec. Note that one of its fields is a
2268 `load_flag' parameter for FT_Load_Glyph.
2270 - The field `num_grays' of FT_SBitRec has been changed to
2271 `max_grays' in order to fit within a single byte. Its
2272 maximum value is thus 255 (instead of 256 as previously).
2277 - Added support for the DESTDIR variable during `make install'.
2278 This simplifies packaging of FreeType.
2280 - Included modified copies of the ZLib sources in `src/gzip' in
2281 order to support gzip-compressed PCF fonts. We do not use the
2282 system-provided zlib for now, though this is a probable
2283 enhancement for future releases.
2285 - The DocMaker tool used to generate the on-line API reference has
2286 been completely rewritten. It is now located in
2287 `src/tools/docmaker/docmaker.py'. Features:
2289 - better cross-referenced output
2290 - more polished output
2291 - uses Python regular expressions (though it didn't speed the
2293 - much more modular structure, which allows for different
2294 `backends' in order to generate HTML, XML, or whatever
2297 One can regenerate the API reference by calling:
2299 python src/tools/docmaker/docmaker.py \
2301 --title=FreeType-2.1.3 \
2302 --output=<outputdirectory>
2303 include/freetype/*.h \
2304 include/freetype/config/*.h \
2305 include/freetype/cache/*.h
2307 - A new, experimental, support for incremental font loading (i.e.,
2308 loading of fonts where the glyphs are not in the font file
2309 itself, but provided by an external component, like a Postscript
2310 interpreter) has been added by Graham Asher. This is still work
2311 in progress, however.
2313 - A new, EXPERIMENTAL, path stroker has been added. It doesn't
2314 suffer from severe rounding errors and treat bezier arcs
2315 directly. Still work in progress (i.e. not part of the official
2316 API). See the file <freetype/ftstroker.h> for some of the
2319 - The massive re-formatting of sources and internal re-design is
2320 still under-way. Many internal functions, constants, and types
2324 ======================================================================
2326 CHANGES BETWEEN 2.1.2 and 2.1.1
2328 I. IMPORTANT BUG FIXES
2330 - Many font drivers didn't select a Unicode charmap by default
2331 when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
2332 options enabled), causing many applications to not be able to
2333 display text correctly with the 2.1.x releases.
2335 - The PFR driver had a bug in its composite loading code that
2336 produces incorrectly placed accents with many fonts.
2338 - The Type42 driver crashed sometimes due to a nasty bug.
2340 - The Type 1 custom encoding charmap didn't handle the case where
2341 the first glyph index wasn't 0.
2343 - A serious typo in the TrueType composite loader produced
2344 incorrectly placed glyphs in fonts like `Wingdings' and a few
2350 - The Win32 Visual C++ project file has been updated to include
2351 the PFR driver as well.
2353 - `freetype.m4' is now installed by default by `make install' on
2356 - The function FT_Get_PS_Font_Info now works with CID and Type42
2360 ======================================================================
2362 CHANGES BETWEEN 2.1.1 and 2.1.0
2364 I. IMPORTANT BUG FIXES
2366 - The `version_info' returned by `freetype-config' in 2.1.0
2367 returned an invalid value. It now returns 9:1:3 (2.0.9 returned
2370 - Version 2.1.0 couldn't be linked against applications on Win32
2371 and Amiga systems due to a new debug function that wasn't
2372 properly propagated to the system-specific directory in
2375 - Various MacOS and Mac OS X specific fixes.
2377 - Fixed a bug in the TrueType charmap validation routines that
2378 made version 2.1.0 too restrictive -- many popular fonts have
2381 - There was still a very small difference between the monochrome
2382 glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
2383 bytecode interpreter enabled. This was caused by an invalid
2384 flag setting in the TrueType glyph loader, making the rasterizer
2385 change its drop-out control mode. Now the results should
2386 _really_ be completely identical.
2388 - The TrueType name table loader has been improved to support many
2389 popular though buggy Asian fonts. It now ignores empty name
2390 entries, invalid pointer offsets and a few other incorrect
2391 subtleties. Moreover, name strings are now loaded on demand,
2392 which reduces the memory load of many faces (e.g. the ARIAL.TTF
2393 font file contains a 10kByte name table with 70 names).
2395 - Fixed a bug in the Postscript hinter that prevented family blues
2396 substitution to happen correctly.
2401 - Three new font drivers in this release:
2403 * A BDF font driver, contributed by Franco Zappa Nardelli,
2404 heavily modified by Werner Lemberg. It also supports
2405 anti-aliased bitmaps (using a slightly extended BDF format).
2407 * A Type42 font driver, contributed by Roberto Alameda. It is
2408 still experimental but seems to work relatively well.
2410 * A PFR font driver, contributed by David Turner himself. It
2411 doesn't support PFR hinting -- note that BitStream has at
2412 least two patents on this format!
2417 - The cache sub-system has been optimized in important ways.
2418 Cache hits are now significantly faster. For example, using the
2419 CMap cache is about twice faster than calling FT_Get_Char_Index
2420 on most platforms. Similarly, using an SBit cache is about five
2421 times faster than loading the bitmaps from a bitmap file, and
2422 300 to 500 times faster than generating them from a scalable
2425 Note that you should recompile your sources if you designed a
2426 custom cache class for the FT2 Cache subsystem, since the
2427 changes performed are source, but not binary, compatible.
2430 ======================================================================
2432 CHANGES BETWEEN 2.1.0 and 2.0.9
2434 I. IMPORTANT BUG FIXES
2436 - The TrueType bytecode interpreter has been fixed to produce
2437 _exactly_ the same output as FreeType 1.x. Previous differences
2438 were due to slightly distinct fixed-point computation routines
2439 used to perform dot products and vector length measurements.
2441 It seems that native TrueType hinting is _extremely_ sensitive
2442 to rounding errors. The required vector computation routines
2443 have been optimized and placed within the `ttinterp.c' file.
2445 - Fixed the parsing of accelerator tables in the PCF font driver.
2447 - Fixed the Type1 glyph loader routine used to compute the font's
2448 maximum advance width.
2453 - The `configure' script used on Unix systems has been modified to
2454 check that GNU Make is being used to build the library.
2455 Otherwise, it will display a message proposing to use the
2456 GNUMAKE environment variable to name it.
2458 The Unix-specific file README.UNX has been modified accordingly.
2463 - The FreeType License in `docs/FTL.TXT' has been updated to
2464 include a proposed preferred disclaimer. If you are using
2465 FreeType in your products, you are encouraged (but not mandated)
2466 to use the following text in your documentation:
2469 Portions of this software are copyright © 1996-2002 The
2470 FreeType Project (www.freetype.org). All rights reserved.
2473 - The default size of the render pool has been reduced to 16kByte.
2474 This shouldn't result in any noticeable performance penalty,
2475 unless you are using the engine as-is to render very large and
2478 - The FreeType 2 redesign has begun. More information can be
2481 http://www.freetype.org/freetype2/redesign.html
2483 The following internal changes have been performed within the
2484 sources of this release:
2486 - Many internal types have been renamed to increase
2487 consistency. The following should be true, except for
2490 * All structure types have a name ending in `Rec' (short
2493 * A pointer-to-structure type has the same name as the
2494 structure, _without_ the `Rec' suffix.
2498 typedef struct FooRec_
2504 - Many internal macros have been renamed to increase
2505 consistency. The following should be true:
2507 * All macros have a name beginning with `FT_'. This
2508 required a few changes like
2512 REALLOC => FT_REALLOC
2514 * All macros are completely UPPERCASE. This required a
2517 READ_Short => FT_READ_SHORT
2518 NEXT_Short => FT_NEXT_SHORT
2519 GET_ULongLE => FT_GET_ULONG_LE
2520 MEM_Set => FT_MEM_SET
2521 MEM_Copy => FT_MEM_COPY
2524 * Whenever possible, all macro names follow the
2525 FT_<OBJECT>_<METHOD> pattern. For example
2527 ACCESS_Frame => FT_FRAME_ENTER
2528 FORGET_Frame => FT_FRAME_EXIT
2529 EXTRACT_Frame => FT_FRAME_EXTRACT
2530 RELEASE_Frame => FT_FRAME_RELEASE
2532 FILE_Pos => FT_STREAM_POS
2533 FILE_Seek => FT_STREAM_SEEK
2534 FILE_Read => FT_STREAM_READ
2535 FILE_ReadAt => FT_STREAM_READ_AT
2536 READ_Fields => FT_STREAM_READ_FIELDS
2538 - Many internal functions have been renamed to follow the
2539 FT_<Object>_<Method> pattern. For example:
2541 FT_Seek_Stream => FT_Stream_Seek
2542 FT_Read_Stream_At => FT_Stream_ReadAt
2543 FT_Done_Stream => FT_Stream_Close
2544 FT_New_Stream => FT_Stream_Open
2545 FT_New_Memory_Stream => FT_Stream_OpenMemory
2546 FT_Extract_Frame => FT_Stream_ExtractFrame
2548 Note that method names do not contain `_'.
2550 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
2551 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
2552 type as the fourth argument. Instead, the array element
2553 type size is computed automatically from the type of the
2554 target pointer used.
2556 - A new object class, FT_CMap, has been introduced. These
2557 internal objects are used to model character maps. This
2558 eases the support of additional charmap types within the
2561 - A new configuration file named `ftstdlib.h' has been added
2562 to `include/freetype/config'. It is used to define aliases
2563 for _every_ routine of the ISO C library that the font
2564 engine uses. Each aliases has a `ft_' prefix
2565 (e.g. `ft_strlen' is an alias for `strlen').
2567 This is used to ease the porting of FreeType 2 to exotic
2568 runtime environments where the ISO C Library isn't available
2569 (e.g. XFree86 extension modules).
2571 More details are available in the `ChangeLog' file.
2574 ======================================================================
2576 CHANGES BETWEEN 2.0.9 and 2.0.8
2578 I. IMPORTANT BUG FIXES
2580 - Certain fonts like `foxjump.ttf' contain broken name tables with
2581 invalid entries and wild offsets. This caused FreeType to crash
2582 when trying to load them.
2584 The SFNT `name' table loader has been fixed to be able to
2585 support these strange fonts.
2587 Moreover, the code in charge of processing this table has been
2588 changed to always favour Windows-formatted entries over other
2589 ones. Hence, a font that works on Windows but not on the Mac
2590 will load cleanly in FreeType and report accurate values for
2591 Family & PostScript names.
2593 - The CID font driver has been fixed. It unfortunately returned a
2594 Postscript Font name with a leading slash, as in
2595 `/MunhwaGothic-Regular'.
2597 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
2600 - A bug in the Postscript hinter has been found and fixed,
2601 removing un-even stem widths at small pixel sizes (like 14-17).
2603 This improves the quality of a certain number of Postscript
2609 - A new function named `FT_Library_Version' has been added to
2610 return the current library's major, minor, and patch version
2611 numbers. This is important since the macros FREETYPE_MAJOR,
2612 FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
2613 library is dynamically linked by a program.
2615 - Two new APIs have been added: `FT_Get_First_Char' and
2618 Together, these can be used to iterate efficiently over the
2619 currently selected charmap of a given face. Read the API
2620 reference for more details.
2625 - The FreeType sources are under heavy internal re-factoring. As
2626 a consequence, we have created a branch named `STABLE' on the
2627 CVS to hold all future releases/fixes in the 2.0.x family.
2629 The HEAD branch now contains the re-factored sources and
2630 shouldn't be used for testing or packaging new releases. In
2631 case you would like to access the 2.0.9 sources from our CVS
2632 repository, use the tag `VER-2-0-9'.
2635 ======================================================================
2637 CHANGES BETWEEN 2.0.8 and 2.0.7
2639 I. IMPORTANT BUG FIXES
2641 - There was a small but nasty bug in `freetype-config.in' which
2642 caused the `freetype-config' script to fail on Unix.
2644 This didn't prevent the installation of the library or even its
2645 execution, but caused problems when trying to compile many Unix
2646 packages that depend on it.
2648 - Some TrueType or OpenType fonts embedded in PDF documents do not
2649 have a 'cmap', 'post' and 'name' as is required by the
2650 specification. FreeType no longer refuses to load such fonts.
2652 - Various fixes to the PCF font driver.
2655 ======================================================================
2657 CHANGES BETWEEN 2.0.7 and 2.0.6
2659 I. IMPORTANT BUG FIXES
2661 - Fixed two bugs in the Type 1 font driver. The first one
2662 resulted in a memory leak in subtle cases. The other one caused
2663 FreeType to crash when trying to load `.gsf' files (Ghostscript
2664 so-called Postscript fonts).
2666 (This made _many_ KDE applications crash on certain systems.
2667 FreeType _is_ becoming a critical system component on Linux :-)
2669 - Fixed a memory leak in the CFF font driver.
2671 - Fixed a memory leak in the PCF font driver.
2673 - Fixed the Visual C++ project file
2674 `builds/win32/visualc/freetype.dsp' since it didn't include the
2675 Postscript hinter component, causing errors at build time.
2677 - Fixed a small rendering bug in the anti-aliased renderer that
2678 only occurred when trying to draw thin (less than 1 pixel)
2681 - Fixed `builds/unix/freetype2.a4' which is used to generate a
2682 valid `freetype2.m4' for use with autoconf.
2684 - Fixed the OpenVMS Makefiles.
2689 - Added `configure' and `install' scripts to the top-level
2690 directory. A GNU-style installation is thus now easily possible
2693 ./configure <options>
2698 ======================================================================
2700 CHANGES BETWEEN 2.0.6 and 2.0.5
2702 I. IMPORTANT BUG FIXES
2704 - It wasn't possible to load embedded bitmaps when the auto-hinter
2705 was used. This is now fixed.
2707 - The TrueType font driver didn't load some composites properly
2708 (the sub-glyphs were slightly shifted, and this was only
2709 noticeable when using monochrome rendering).
2711 - Various fixes to the auto-hinter. They merely improve the
2712 output of sans-serif fonts. Note that there are still problems
2713 with serifed fonts and composites (accented characters).
2715 - All scalable font drivers erroneously returned un-fitted glyph
2716 advances when hinting was requested. This created problems for
2717 a number of layout applications. This is a very old bug that
2718 got undetected mainly because most test/demo program perform
2719 rounding explicitly or implicitly (through the cache).
2721 - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
2724 - `glnames.py' still contained a bug that made FreeType return
2725 invalid names for certain glyphs.
2727 - The library crashed when loading certain Type 1 fonts like
2728 `sadn.pfb' (`Stalingrad Normal'), which appear to contain
2729 pathetic font info dictionaries.
2731 - The TrueType glyph loader is now much more paranoid and checks
2732 everything when loading a given glyph image. This was necessary
2733 to avoid problems (crashes and/or memory overwrites) with broken
2734 fonts that came from a really buggy automatic font converter.
2737 II. IMPORTANT UPDATES AND NEW FEATURES
2739 - Important updates to the Mac-specific parts of the library.
2741 - The caching sub-system has been completely re-designed, and its
2742 API has evolved (the old one is still supported for backward
2745 The documentation for it is not yet completed, sorry. For now,
2746 you are encouraged to continue using the old API. However, the
2747 ftview demo program in the ft2demos package has already been
2748 updated to use the new caching functions.
2750 - A new charmap cache is provided too. See `FTC_CMapCache'. This
2751 is useful to perform character code -> glyph index translations
2752 quickly, without the need for an opened FT_Face.
2754 - A NEW POSTSCRIPT HINTER module has been added to support native
2755 hints in the following formats: PostScript Type 1, PostScript
2758 Please test! Note that the auto-hinter produces better results
2759 for a number of badly-hinted fonts (mostly auto-generated ones)
2762 - A memory debugger is now part of the standard FreeType sources.
2763 To enable it, define FT_DEBUG_MEMORY in
2764 <freetype/config/ftoption.h>, and recompile the library.
2766 Additionally, define the _environment_ variable FT_DEBUG_MEMORY
2767 and run any program using FreeType. When the library is exited,
2768 a summary of memory footprints and possible leaks will be
2771 This works transparently with _any_ program that uses FreeType.
2772 However, you will need a lot of memory to use this (allocated
2773 blocks are never released to the heap to detect double deletes
2779 - We are aware of subtle differences between the output of
2780 FreeType versions 1 and 2 when it comes to monochrome
2781 TrueType-hinted glyphs. These are most probably due to small
2782 differences in the monochrome rasterizers and will be worked out
2783 in an upcoming release.
2785 - We have decided to fork the sources in a `stable' branch, and an
2786 `unstable' one, since FreeType is becoming a critical component
2787 of many Unix systems.
2789 The next bug-fix releases of the library will be named 2.0.7,
2790 2.0.8, etc., while the `2.1' branch will contain a version of
2791 the sources where we will start major reworking of the library's
2792 internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
2793 more distant future.
2795 We also hope that this scheme will allow much more frequent
2796 releases than in the past.
2799 ======================================================================
2801 CHANGES BETWEEN 2.0.5 and 2.0.4
2803 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
2804 WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
2806 - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
2807 `lslash' unavailable from Unicode charmaps of Postscript fonts.
2808 This prevented the correct display of Polish text, for example.
2810 - The kerning table of Type 1 fonts was loaded by FreeType, when its
2811 AFM file was attached to its face, but the
2812 FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
2813 preventing FT_Get_Kerning to return meaningful values.
2815 - Improved SFNT (TrueType & OpenType) charmap support. Slightly
2816 better performance, as well as support for the new formats defined
2817 by the OpenType 1.3 specification (8, 10, and 12)
2819 - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
2820 computations in certain rare cases, producing ugly artefacts.
2822 - The size of the EM square is computed with a more accurate
2823 algorithm for Postscript fonts. The old one caused slight errors
2824 with embedded fonts found in PDF documents.
2826 - Fixed a bug in the cache manager that prevented normal LRU
2827 behaviour within the cache manager, causing unnecessary reloads
2828 (for FT_Face and FT_Size objects only).
2830 - Added a new function named `FT_Get_Name_Index' to retrieve the
2831 glyph index of a given glyph name, when found in a face.
2833 - Added a new function named `FT_Get_Postscript_Name' to retrieve
2834 the `unique' Postscript font name of a given face.
2836 - Added a new public header size named FT_SIZES_H (or
2837 <freetype/ftsizes.h>) providing new FT_Size-management functions:
2838 FT_New_Size, FT_Activate_Size, FT_Done_Size.
2840 - Fixed a reallocation bug that generated a dangling pointer (and
2841 possibly memory leaks) with Postscript fonts (in
2842 src/psaux/psobjs.c).
2844 - Many fixes for 16-bit correctness.
2846 - Removed many pedantic compiler warnings from the sources.
2848 - Added an Amiga build directory in `builds/amiga'.
2851 ======================================================================
2853 CHANGES BETWEEN 2.0.4 and 2.0.3
2855 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
2856 the font transformation set through FT_Set_Transform was applied
2857 twice to auto-hinted glyphs, resulting in incorrectly rotated text
2860 - Fixed _many_ compiler warnings. FT2 should now compile cleanly
2861 with Visual C++'s most pedantic warning level (/W4). It already
2862 compiled fine with GCC and a few other compilers.
2864 - Fixed a bug that prevented the linear advance width of composite
2865 TrueType glyphs to be correctly returned.
2867 - Fixed the Visual C++ project files located in
2868 `builds/win32/visualc' (previous versions used older names of the
2871 - Many 32-bit constants have an `L' appended to their value, in
2872 order to improve the 16-bitness of the code. Someone is actually
2873 trying to use FT2 on an Atari ST machine!
2875 - Updated the `builds/detect.mk' file in order to automatically
2876 build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
2877 `/sbin/init' and wasn't previously detected as a Unix platform by
2878 the FreeType build system.
2880 - Updated the Unix-specific portions of the build system (new
2881 libtool version, etc.).
2883 - The SFNT kerning loader now ensures that the table is sorted
2884 (since some problem fonts do not meet this requirement).
2887 =======================================================================
2889 CHANGES BETWEEN 2.0.3 and 2.0.2
2891 I. CHANGES TO THE MODULES / FONT DRIVERS
2893 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
2894 several annoying artefacts, mainly:
2896 - Blue zone alignment of horizontal stems wasn't performed
2897 correctly, resulting in artefacts like the `d' being placed
2898 one pixel below the `b' in some fonts like Time New Roman.
2900 - Overshoot thresholding wasn't performed correctly, creating
2901 unpleasant artefacts at large character pixel sizes.
2903 - Composite glyph loading has been simplified. This gets rid
2904 of various artefacts where the components of a composite
2905 glyphs were not correctly spaced.
2907 These are the last changes to the current auto-hinting module.
2908 A new hinting sub-system is currently in the work in order to
2909 support native hints in Type 1 / CFF / OpenType fonts, as well
2910 as globally improve rendering.
2912 - The PCF driver has been fixed. It reported invalid glyph
2913 dimensions for the fonts available on Solaris.
2915 - The Type 1, CID and CFF drivers have been modified to fix the
2916 computation of the EM size.
2918 - The Type 1 driver has been fixed to avoid a dangerous bug that
2919 crashed the library with non-conforming fonts (i.e. ones that do
2920 not place the .notdef glyph at position 0).
2922 - The TrueType driver had a rather subtle bug (dangling pointer
2923 when loading composite glyphs) that could crash the library in
2927 II. HIGH-LEVEL API CHANGES
2929 - The error code enumeration values have been changed. An error
2930 value is decomposed in a generic error code, and a module
2931 number. see <freetype/fterrors.h> for details.
2933 - A new public header file has been introduced, named
2934 FT_TRIGONOMETRY_H (include/freetype/fttrigon.h), providing
2935 trigonometric functions to compute sines, cosines, arctangents,
2936 etc. with 16.16 fixed precision. The implementation is based on
2937 the CORDIC algorithm and is very fast while being sufficiently
2943 - Added BeOS-specific files in the old build sub-system. Note
2944 that no changes were required to compile the library with Jam.
2946 - The configuration is now capable of automatically detecting
2947 64-bit integers on a set of predefined compilers (GCC, Visual
2948 C++, Borland C++) and will use them by default. This provides a
2949 small performance boost.
2951 - A small memory leak that happened when opening 0-sized files
2952 (duh!) have been fixed.
2954 - Fixed bezier stack depth bug in the routines provided by the
2955 FT_BBOX_H header file. Also fixed similar bugs in the
2958 - The outline bounding box code has been rewritten to use direct
2959 computations, instead of bezier sub-division, to compute the
2960 exact bounding box of glyphs. This is slightly slower but more
2963 - The build system has been improved and fixed, mainly to support
2964 `make' on Windows 2000 correctly, avoid problems with `make
2965 distclean' on non Unix systems, etc.
2967 - Hexadecimal constants have been suffixed with `U' to avoid
2968 problems with certain compilers on 64-bit platforms.
2970 - A new directory named `src/tools' has been created. It contains
2971 Python scripts and simple unit test programs used to develop the
2974 - The DocMaker tool has been moved from `docs' to `src/tools' and
2975 has been updated with the following:
2977 - Now accepts the `--title=XXXX' or `-t XXXX' option from the
2978 command line to set the project's name in the generated API
2981 - Now accepts the `--output=DIR' or `-o DIR' option from the
2982 command line to set the output directory for all generated
2985 - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
2986 command line to set the file prefix to use for all
2987 generated HTML files.
2989 - Now generates the current time/data on each generated page
2990 in order to distinguish between versions.
2992 DocMaker can be used with other projects now, not only FT2
2993 (e.g. MLib, FTLayout, etc.).
2996 ======================================================================
2998 CHANGES BETWEEN 2.0.2 and 2.0.1
3000 I. CHANGES TO THE MODULES / FONT DRIVERS
3002 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
3003 avoid legal problems with the Apple patents. It seems that we
3004 mistakenly turned this option on in previous releases of the
3007 Note that if you want to use the bytecode interpreter in order
3008 to get high-quality TrueType rendering, you will need to toggle
3009 by hand the definition of the
3010 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
3011 `include/freetype/config/ftoption.h'.
3013 - The CFF driver has been improved by Tom Kacvinsky and Sander van
3016 * Support for `seac' emulation.
3017 * Support for `dotsection'.
3018 * Support for retrieving glyph names through
3019 `FT_Get_Glyph_Name'.
3021 The first two items are necessary to correctly a large number of
3022 Type 1 fonts converted to the CFF formats by Adobe Acrobat.
3024 - The Type 1 driver was also improved by Tom & others:
3026 * Better EM size computation.
3027 * Better support for synthetic (transformed) fonts.
3028 * The Type 1 driver returns the charstrings corresponding to
3029 each glyph in the `glyph->control_data' field after a call to
3030 `FT_Load_Glyph' (thanks Ha Shao).
3032 - Various other bugfixes, including the following:
3034 * Fixed a nasty memory leak in the Type 1 driver.
3035 * The autohinter and the pcf driver used static writable data
3036 when they shouldn't.
3037 * Many casts were added to make the code more 64-bits safe. It
3038 also now compiles on Windows XP 64-bits without warnings.
3039 * Some incorrect writable statics were removed in the `autohint'
3040 and `pcf' drivers. FreeType 2 now compiles on Epoc again.
3043 II. CHANGES TO THE HIGH-LEVEL API
3045 - The library header files inclusion scheme has been changed. The
3046 old scheme looked like:
3048 #include <freetype/freetype.h>
3049 #include <freetype/ftglyph.h>
3050 #include <freetype/ftcache.h>
3051 #include <freetype/cache/ftimage.h>
3055 #include <ft2build.h>
3056 #include FT_FREETYPE_H
3059 #include FT_CACHE_IMAGE_H
3061 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
3062 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
3063 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
3065 The file <ft2build.h> is used to define the header filename
3066 macros. The complete and commented list of macros is available
3067 in the API reference under the section name `Header File Macros'
3070 For more information, see section I of the following document:
3072 http://www.freetype.org/
3073 freetype2/docs/tutorial/step1.html
3077 http://freetype.sourceforge.net/
3078 freetype2/docs/tutorial/step1.html
3080 - Many, many comments have been added to the public source file in
3081 order to automatically generate the API Reference through the
3082 `docmaker.py' Python script.
3084 The latter has been updated to support the grouping of sections
3085 in chapters and better index sort. See:
3087 http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
3090 III. CHANGES TO THE BUILD PROCESS
3092 - If you are not building FreeType 2 with its own build system
3093 (but with your own Makefiles or project files), you will need to
3094 be aware that the build process has changed a little bit.
3096 You don't need to put the `src' directory in the include path
3097 when compiling any FT2 component. Instead, simply put the
3098 component's directory in the current include path.
3100 So, if you were doing something like:
3102 cc -c -Iinclude -Isrc src/base/ftbase.c
3106 cc -c -Iinclude -Isrc/base src/base/ftbase.c
3108 If you were doing something like:
3111 cc -c -I../../include -I.. ftbase.c
3116 cc -c -I../../include ftbase.c
3119 ======================================================================
3121 CHANGES BETWEEN 2.0.1 and 2.0
3123 2.0.1 introduces a few changes:
3125 - Fixed many bugs related to the support of CFF / OpenType fonts.
3126 These formats are now much better supported though there is
3127 still work planned to deal with charset tables and PDF-embedded
3128 CFF files that use the old `seac' command.
3130 - The library could not be compiled in debug mode with a very
3131 small number of C compilers whose pre-processors didn't
3132 implement the `##' directive correctly (i.e. per se the ANSI C
3133 specification!) An elegant fix was found.
3135 - Added support for the free Borland command-line C++ Builder
3136 compiler. Use `make setup bcc32'. Also fixed a few source
3137 lines that generated new warnings with BCC32.
3139 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
3142 - Updated the INSTALL file to add IDE compilation.
3144 - Other minor bug fixes, from invalid Type 1 style flags to
3145 correct support of synthetic (obliqued) fonts in the
3146 auto-hinter, better support for embedded bitmaps in a SFNT font.
3148 - Fixed some problems with `freetype-config'.
3150 Finally, the `standard' scheme for including FreeType headers is now
3151 gradually changing, but this will be explained in a later release
3154 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
3155 for their contributions!
3158 ======================================================================
3160 CHANGES BETWEEN beta8 and 2.0
3162 - Changed the default installation path for public headers from
3163 `include/freetype' to `include/freetype2'.
3165 Also added a new `freetype-config' that is automatically generated
3166 and installed on Unix and Cygwin systems. The script itself is
3167 used to retrieve the current install path, C compilation flags as
3168 well as linker flags.
3170 - Fixed several small bugs:
3172 * Incorrect max advance width for fixed-pitch Type 1 fonts.
3173 * Incorrect glyph names for certain TrueType fonts.
3174 * The glyph advance was not copied when FT_Glyph_To_Bitmap was
3176 * The linearHoriAdvance and linearVertAdvance fields were not
3177 correctly returned for glyphs processed by the auto-hinter.
3178 * `type1z' renamed back to `type1'; the old `type1' module has
3181 - Revamped the build system to make it a lot more generic. This
3182 will allow us to re-use nearly un-modified in lots of other
3183 projects (including FreeType Layout).
3185 - Changed `cid' to use `psaux' too.
3187 - Added the cache sub-system. See <freetype/ftcache.h> as well as
3188 the sources in `src/cache'. Note that it compiles but is still
3191 - Updated `docs/docmaker.py', a draft API reference is available at
3192 http://www.freetype.org/ft2api.html.
3194 - Changed `type1' to use `psaux'.
3196 - Created a new module named `psaux' to hold the Type 1 & Type 2
3197 parsing routines. It should be used by `type1', `cid', and `cff'
3200 - Fixed an important bug in `FT_Glyph_Get_CBox'.
3202 - Fixed some compiler warnings that happened since the TrueType
3203 bytecode decoder was deactivated by default.
3205 - Fixed two memory leaks:
3207 * The memory manager (16 bytes) isn't released in
3209 * Using custom input streams, the copy of the original stream was
3212 - Fixed the auto-hinter by performing automatic computation of the
3213 `filling direction' of each glyph. This is done through a simple
3214 and fast approximation, and seems to work (problems spotted by
3215 Werner though). The Arphic fonts are a lot nicer though there are
3216 still a lot of things to do to handle Asian fonts correctly.
3219 ======================================================================
3221 BETA-8 (RELEASE CANDIDATE) CHANGES
3223 - Deactivated the TrueType bytecode interpreter by default.
3225 - Deactivated the `src/type1' font driver. Now `src/type1z' is used
3228 - Updates to the build system. We now compile the library correctly
3229 under Unix system through `configure' which is automatically
3230 called on the first `make' invocation.
3232 - Added the auto-hinting module! Fixing some bugs here and there.
3234 - Found some bugs in the composite loader (seac) of the Type1-based
3237 - Renamed the directory `freetype2/config' to `freetype2/builds' and
3238 updated all relevant files.
3240 - Found a memory leak in the `type1' driver.
3242 - Incorporated Tom's patches to support flex operators correctly in
3243 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
3244 fonts to be done with this driver :-)
3246 - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
3247 always `simulates' a Unicode charmap, so it shouldn't be
3248 considered completed right now.
3250 It is there to be more a proof of concept than anything else
3251 anyway. The driver is a single C source file, that compiles to 3
3254 I'm still working on the PCF/BDF drivers, but I'm too lazy to
3257 - CHANGES TO THE HIGH-LEVEL API
3259 * FT_Get_Kerning has a new parameter that allows you to select the
3260 coordinates of the kerning vector (font units, scaled, scaled +
3262 * The outline functions are now in <freetype/ftoutln.h> and not
3263 part of <freetype/freetype.h> anymore.
3264 * <freetype/ftmodule.h> now contains declarations for
3265 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
3266 * The so-called convenience functions have moved from `ftoutln.c'
3267 to `ftglyph.c', and are thus available with this optional
3268 component of the library. They are declared in
3269 <freetype/ftglyph.h> now.
3270 * Anti-aliased rendering is now the default for FT_Render_Glyph
3271 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
3272 To generate a monochrome bitmap, use ft_render_mode_mono, or the
3273 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
3274 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
3275 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
3276 solving a few headaches :-)
3277 * The type FT_GlyphSlotRec has now a `library' field.
3279 - CHANGES TO THE `ftglyph.h' API
3281 This API has been severely modified in order to make it simpler,
3282 clearer, and more efficient. It certainly now looks like a real
3283 `glyph factory' object, and allows client applications to manage
3284 (i.e. transform, bbox and render) glyph images without ever
3285 knowing their original format.
3287 - Added support for CID-keyed fonts to the CFF driver. Maybe
3288 support for pure CFF + CEF fonts should come in?
3290 - Cleaned up source code in order to avoid two functions with the
3291 same name. Also changed the names of the files in `type1z' from
3292 `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
3294 `make multi' now works well :-)
3296 Also removed the use of `cidafm' for now, even if the source files
3297 are still there. This functionality will certainly go into a
3300 - ADDED SUPPORT FOR THE AUTO-HINTER
3302 It works :-) I have a demo program which simply is a copy of
3303 `ftview' that does a `FT_Add_Module(library,
3304 &autohinter_module_class)' after library initialization, and Type
3305 1 & OpenType/CFF fonts are now hinted.
3307 CID fonts are not hinted, as they include no charmap and the
3308 auto-hinter doesn't include `generic' global metrics computations
3311 Now, I need to release this thing to the FreeType 2 source.
3313 - CHANGES TO THE RENDERER MODULES
3315 The monochrome and smooth renderers are now in two distinct
3316 directories, namely `src/raster1' and `src/smooth'. Note that the
3317 old `src/renderer' is now gone.
3319 I ditched the 5-gray-levels renderers. Basically, it involved a
3320 simple #define toggle in 'src/raster1/ftraster.c'.
3322 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
3323 select the best renderer available, depending on render mode. If
3324 the current renderer for a given glyph image format isn't capable
3325 of supporting the render mode, another one will be found in the
3326 library's list. This means that client applications do not need
3327 to switch or set the renderers themselves (as in the latest
3328 change), they'll get what they want automatically. At last.
3330 Changed the demo programs accordingly.
3332 - MAJOR INTERNAL REDESIGN:
3334 A lot of internal modifications have been performed lately on the
3335 source in order to provide the following enhancements:
3337 * More generic module support:
3339 The FT_Module type is now defined to represent a handle to a
3340 given module. The file <freetype/ftmodule.h> contains the
3341 FT_Module_Class definition, as well as the module-loading public
3344 The FT_Driver type is still defined, and still represents a
3345 pointer to a font driver. Note that FT_Add_Driver is replaced
3346 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
3348 * Support for generic glyph image types:
3350 The FT_Renderer type is a pointer to a module used to perform
3351 various operations on glyph image.
3353 Each renderer is capable of handling images in a single format
3354 (e.g. ft_glyph_format_outline). Its functions are used to:
3356 - transform an glyph image
3357 - render a glyph image into a bitmap
3358 - return the control box (dimensions) of a given glyph image
3360 The scan converters `ftraster.c' and `ftgrays.c' have been moved
3361 to the new directory `src/renderer', and are used to provide two
3362 default renderer modules.
3364 One corresponds to the `standard' scan-converter, the other to
3367 he current renderer can be set through the new function
3370 The old raster-related function FT_Set_Raster, FT_Get_Raster and
3371 FT_Set_Raster_Mode have now disappeared, in favor of the new:
3376 See the file <freetype/ftrender.h> for more details.
3378 These changes were necessary to properly support different
3379 scalable formats in the future, like bi-color glyphs, etc.
3381 * Glyph loader object:
3383 A new internal object, called a 'glyph loader' has been
3384 introduced in the base layer. It is used by all scalable format
3385 font drivers to load glyphs and composites.
3387 This object has been created to reduce the code size of each
3388 driver, as each one of them basically re-implemented its
3391 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
3394 * FT_GlyphSlot has new fields:
3396 In order to support extended features (see below), the
3397 FT_GlyphSlot structure has a few new fields:
3401 This field gives the linearly scaled (i.e. scaled but
3402 unhinted) advance width for the glyph, expressed as a 16.16
3403 fixed pixel value. This is useful to perform WYSIWYG text.
3406 This field gives the linearly scaled advance height for the
3407 glyph (relevant in vertical glyph layouts only). This is
3408 useful to perform WYSIWYG text.
3410 Note that the two above field replace the removed `metrics2'
3411 field in the glyph slot.
3414 This field is a vector that gives the transformed advance for
3415 the glyph. By default, it corresponds to the advance width,
3416 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
3417 FT_Load_Glyph or FT_Load_Char.
3420 This field gives the distance in integer pixels from the
3421 current pen position to the left-most pixel of a glyph image
3422 IF IT IS A BITMAP. It is only valid when the `format' field
3423 is set to `ft_glyph_format_bitmap', for example, after calling
3424 the new function FT_Render_Glyph.
3427 This field gives the distance in integer pixels from the
3428 current pen position (located on the baseline) to the top-most
3429 pixel of the glyph image IF IT IS A BITMAP. Positive values
3430 correspond to upwards Y.
3433 This is a new private field for the glyph slot. Client
3434 applications should not touch it.
3437 * Support for transforms and direct rendering in FT_Load_Glyph:
3439 Most of the functionality found in <freetype/ftglyph.h> has been
3440 moved to the core library. Hence, the following:
3442 - A transform can be specified for a face through
3443 FT_Set_Transform. this transform is applied by FT_Load_Glyph
3444 to scalable glyph images (i.e. NOT TO BITMAPS) before the
3445 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
3446 was set in the load flags.
3448 - Once a glyph image has been loaded, it can be directly
3449 converted to a bitmap by using the new FT_Render_Glyph
3450 function. Note that this function takes the glyph image from
3451 the glyph slot, and converts it to a bitmap whose properties
3452 are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
3453 and `face.glyph.bitmap_top'. The original native image might
3454 be lost after the conversion.
3456 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
3457 and FT_Load_Char functions will call FT_Render_Glyph
3458 automatically when needed.
3460 - Reformatted all modules source code in order to get rid of the
3461 basic data types redifinitions (i.e. `TT_Int' instead of `FT_Int',
3462 `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
3463 prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
3464 relevant structures.
3467 ======================================================================
3469 OLD CHANGES FOR BETA 7
3471 - bug-fixed the OpenType/CFF parser. It now loads and displays my
3472 two fonts nicely, but I'm pretty certain that more testing is
3475 - fixed the crummy Type 1 hinter, it now handles accented characters
3476 correctly (well, the accent is not always well placed, but that's
3479 - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
3480 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
3481 really useful CMAP files..
3483 - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
3484 Thanks to Boris Letocha for spotting them and providing a fix.
3486 - fixed potential `divide by zero' bugs in ftcalc.c.
3488 - added source code for the OpenType/CFF driver (still incomplete
3491 - modified the SFNT driver slightly to perform more robust header
3492 checks in TT_Load_SFNT_Header. This prevents certain font files
3493 (e.g. some Type 1 Multiple Masters) from being incorrectly
3494 `recognized' as TrueType font files..
3496 - moved a lot of stuff from the TrueType driver to the SFNT module,
3497 this allows greater code re-use between font drivers
3498 (e.g. TrueType, OpenType, Compact-TrueType, etc..)
3500 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
3501 to minimally speed it up..
3503 - added support for Multiple Master fonts in `type1z'. There is
3504 also a new file named <freetype/ftmm.h> which defines functions to
3505 manage them from client applications.
3507 The new file `src/base/ftmm.c' is also optional to the engine..
3509 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
3510 small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
3512 - a minor fix to the Type 1 driver to let them apply the font matrix
3513 correctly (used for many oblique fonts..)
3515 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
3516 to use %p instead of %lx). Thanks to Karl Robillard.
3518 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
3519 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
3520 cropped when loaded from a file (maybe I should move the bitmap
3521 cropper to the base layer ??).
3523 - changed the default number of gray levels of the smooth renderer
3524 to 256 (instead of the previous 128). Of course, the human eye
3525 can't see any difference ;-)
3527 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
3528 of subglyphs in a TrueType font now..
3531 ======================================================================
3533 OLD CHANGES 16 May 2000
3535 - tagged `BETA-6' in the CVS tree. This one is a serious release
3536 candidate even though it doesn't incorporate the auto-hinter yet..
3538 - various obsolete files were removed, and copyright header updated
3540 - finally updated the standard raster to fix the monochrome
3541 rendering bug + re-enable support for 5-gray levels anti-aliasing
3544 - created new header files, and modified sources accordingly:
3546 <freetype/fttypes.h>
3547 - simple FreeType types, without the API
3548 <freetype/internal/ftmemory.h>
3549 - definition of memory-management macros
3551 - added the `DSIG' (OpenType Digital Signature) tag to
3554 - light update/cleaning of the build system + changes to the sources
3555 in order to get rid of _all_ compiler warnings with three
3558 gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
3561 IMPORTANT NOTE FOR WIN32-LCC USERS:
3563 | It seems the C pre-processor that comes with LCC is broken, it
3564 | doesn't recognize the ANSI standard directives # and ##
3565 | correctly when one of the argument is a macro. Also,
3568 | #define F(x) print##x
3572 | will get incorrectly translated to:
3576 | by its pre-processor. For this reason, you simply cannot build
3577 | FreeType 2 in debug mode with this compiler..
3579 - yet another massive grunt work. I've changed the definition of
3580 the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
3581 now take an argument, which is the function's return value type.
3583 This is necessary to compile FreeType as a DLL on Windows and
3584 OS/2. Depending on the compiler used, a compiler-specific keyword
3585 like __export or __system must be placed before (VisualC++) or
3586 after (BorlandC++) the type..
3588 Of course, this needed a lot of changes throughout the source code
3589 to make it compile again... All cleaned up now, apparently..
3591 Note also that there is a new EXPORT_VAR macro defined to allow
3592 the _declaration_ of an exportable public (constant)
3593 variable. This is the case of the raster interfaces (see
3594 ftraster.h and ftgrays.h), as well as each module's interface (see
3595 sfdriver.h, psdriver.h, etc..)
3597 - new feature: it is now possible to pass extra parameters to font
3598 drivers when creating a new face object. For now,
3599 this capability is unused. It could however prove to
3600 be useful in a near future..
3602 the FT_Open_Args structure was changes, as well as the internal
3603 driver interface (the specific `init_face' module function has
3604 now a different signature).
3606 - updated the tutorial (not finished though).
3608 - updated the top-level BUILD document
3610 - fixed a potential memory leak that could occur when loading
3613 - added the declaration of FT_New_Memory_Face in
3614 <freetype/freetype.h>, as it was missing from the public header
3615 (the implementation was already in `ftobjs.c').
3617 - the file <freetype/fterrors.h> has been seriously updated in order
3618 to allow the automatic generation of error message tables. See
3619 the comments within it for more information.
3621 - major directory hierarchy re-organisation. This was done for two
3624 * first, to ease the `manual' compilation of the library by
3625 requiring at lot less include paths :-)
3627 * second, to allow external programs to effectively access
3628 internal data fields. For example, this can be extremely
3629 useful if someone wants to write a font producer or a font
3630 manager on top of FreeType.
3632 Basically, you should now use the 'freetype/' prefix for header
3635 #include <freetype/freetype.h>
3636 #include <freetype/ftglyph.h>
3638 Some new include sub-directories are available:
3640 a. the `freetype/config' directory, contains two files used to
3641 configure the build of the library. Client applications
3642 should not need to look at these normally, but they can if
3645 #include <freetype/config/ftoption.h>
3646 #include <freetype/config/ftconfig.h>
3648 b. the `freetype/internal' directory, contains header files that
3649 describes library internals. These are the header files that
3650 were previously found in the `src/base' and `src/shared'
3654 As usual, the build system and the demos have been updated to
3655 reflect the change..
3657 Here's a layout of the new directory hierarchy:
3686 Compiling a module is now much easier, for example, the following
3687 should work when in the TOP_DIR directory on an ANSI build:
3689 gcc -c -I./include -I./src/base src/base/ftbase.c
3690 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
3693 (of course, using -Iconfig/<system> if you provide system-specific
3694 configuration files).
3696 - updated the structure of FT_Outline_Funcs in order to allow direct
3697 coordinate scaling within the outline decomposition routine (this
3698 is important for virtual `on' points with TrueType outlines) +
3699 updates to the rasters to support this..
3701 - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
3702 order to support version 2 of the table (see OpenType 1.2 spec)
3704 - created `include/tttables.h' and `include/t1tables.h' to allow
3705 client applications to access some of the SFNT and T1 tables of a
3706 face with a procedural interface (see `FT_Get_Sfnt_Table') +
3707 updates to internal source files to reflect the change..
3709 - some cleanups in the source code to get rid of warnings when
3710 compiling with the `-Wall -W -ansi -pedantic' options in gcc.
3712 - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
3713 its header to `include/ftgrays.h'
3715 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
3716 with up to 80 sub-glyphs !! Thanks to Werner
3719 ======================================================================
3721 OLD CHANGES - 14-apr-2000
3723 - fixed a bug in the TrueType glyph loader that prevented the
3724 correct loading of some CJK glyphs in mingli.ttf
3726 - improved the standard Type 1 hinter in `src/type1'
3728 - fixed two bugs in the experimental Type 1 driver in `src/type1z'
3729 to handle the new XFree86 4.0 fonts (and a few other ones..)
3731 - the smooth renderer is now complete and supports sub-banding to
3732 render large glyphs at high speed. However, it is still located
3733 in `demos/src/ftgrays.c' and should move to the library itself in
3734 the next beta. NOTE: The smooth renderer doesn't compile in
3735 stand-alone mode anymore, but this should be fixed RSN..
3737 - introduced convenience functions to more easily deal with glyph
3738 images, see `include/ftglyph.h' for more details, as well as the
3739 new demo program named `demos/src/ftstring.c' that demonstrates
3742 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
3743 drivers (this is required by the auto-hinter to improve its
3746 - changed the raster interface, in order to allow client
3747 applications to provide their own span-drawing callbacks.
3748 However, only the smooth renderer supports this. See
3749 `FT_Raster_Params' in the file `include/ftimage.h'.
3751 - fixed a small bug in FT_MulFix that caused incorrect transform
3754 - Note: The tutorial is out-of-date.
3757 ======================================================================
3759 OLD CHANGES - 12-mar-2000
3761 - changed the layout of configuration files : now, all ANSI
3762 configuration files are located in
3763 `freetype2/config'. System-specific over-rides can be placed in
3764 `freetype2/config/<system>'.
3766 - moved all configuration macros to `config/ftoption.h'
3768 - improvements in the Type 1 driver with AFM support
3770 - changed the fields in the FT_Outline structure : the old `flags'
3771 array is re-named `tags', while all ancient flags are encoded into
3772 a single unsigned int named `flags'.
3774 - introduced new flags in FT_Outline.flags (see
3775 ft_outline_.... enums in `ftimage.h').
3777 - changed outline functions to `FT_Outline_<action>' syntax
3779 - added a smooth anti-alias renderer to the demonstration programs
3781 - added Mac graphics driver (thanks Just)
3783 - FT_Open_Face changed in order to received a pointer to a
3784 FT_Open_Args descriptor..
3786 - various cleanups, a few more API functions implemented (see
3792 ======================================================================
3794 OLD CHANGES - 22-feb-2000
3796 - introduced the `psnames' module. It is used to:
3798 o convert a Postscript glyph name into the equivalent Unicode
3799 character code (used by the Type 1 driver(s) to synthesize on
3800 the fly a Unicode charmap).
3802 o provide an interface to retrieve the Postscript names of the
3803 Macintosh, Adobe Standard & Adobe Expert character codes.
3804 (the Macintosh names are used by the SFNT-module postscript
3805 names support routines, while the other two tables are used by
3806 the Type 1 driver(s)).
3808 - introduced the `type1z' alternate Type 1 driver. This is a (still
3809 experimental) driver for the Type 1 format that will ultimately
3810 replace the one in `src/type1'. It uses pattern matching to load
3811 data from the font, instead of a finite state analyzer. It works
3812 much better than the `old' driver with `broken' fonts. It is also
3813 much smaller (under 15 Kb).
3815 - the Type 1 drivers (both in `src/type1' and `src/type1z') are
3816 nearly complete. They both provide automatic Unicode charmap
3817 synthesis through the `psnames' module. No re-encoding vector is
3818 needed. (note that they still leak memory due to some code
3819 missing, and I'm getting lazy).
3821 Trivial AFM support has been added to read kerning information but
3822 wasn't exactly tested as it should ;-)
3824 - The TrueType glyph loader has been seriously rewritten (see the
3825 file `src/truetype/ttgload.c'. It is now much, much simpler as
3826 well as easier to read, maintain and understand :-) Preliminary
3827 versions introduced a memory leak that has been reported by Jack
3828 Davis, and is now fixed..
3830 - introduced the new `ft_glyph_format_plotter', used to represent
3831 stroked outlines like Windows `Vector' fonts, and certain Type 1
3832 fonts like `Hershey'. The corresponding raster will be written
3835 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
3836 interface that uses a structure to describe the input stream, the
3837 driver (if required), etc..
3842 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
3844 - Add a function like FT_Load_Character(face, char_code, load_flags)
3845 that would really embed a call to FT_Get_Char_Index then
3846 FT_Load_Glyph to ease developer's work.
3848 - Update the tutorial!
3850 - consider adding support for Multiple Master fonts in the Type 1
3853 - Test the AFM routines of the Type 1 drivers to check that kerning
3854 information is returned correctly.
3856 - write a decent auto-gridding component !! We need this to release
3862 - add a CFF/Type2 driver
3864 - add a FNT/PCF/HBF driver
3865 - add a Speedo driver from the X11 sources
3868 ======================================================================
3870 OLDER CHANGES - 27-jan-2000
3872 - updated the `sfnt' module interface to allow several SFNT-based
3873 drivers to co-exist peacefully
3875 - updated the `T1_Face' type to better separate Postscript font
3876 content from the rest of the FT_Face structure. Might be used
3877 later by the CFF/Type2 driver..
3879 - added an experimental replacement Type 1 driver featuring advanced
3880 (and speedy) pattern matching to retrieve the data from postscript
3883 - very minor changes in the implementation of FT_Set_Char_Size and
3884 FT_Set_Pixel_Sizes (they now implement default to lighten the font
3888 ======================================================================
3892 This file summarizes the changes that occurred since the last `beta'
3893 of FreeType 2. Because the list is important, it has been divided into
3898 I High-Level Interface (easier !)
3899 II Directory Structure
3900 III Glyph Image Formats
3906 ----------------------------------------------------------------------
3908 High-Level Interface:
3910 The high-level API has been considerably simplified. Here is how:
3912 - resource objects have disappeared. this means that face objects
3913 can now be created with a single function call (see FT_New_Face
3916 - when calling either FT_New_Face & FT_Open_Face, a size object
3917 and a glyph slot object are automatically created for the face,
3918 and can be accessed through `face->glyph' and `face->size' if
3919 one really needs to. In most cases, there's no need to call
3920 FT_New_Size or FT_New_Glyph.
3922 - similarly, FT_Load_Glyph now only takes a `face' argument
3923 (instead of a glyph slot and a size). Also, its `result'
3924 parameter is gone, as the glyph image type is returned in the
3925 field `face->glyph.format'
3927 - the list of available charmaps is directly accessible through
3928 `face->charmaps', counting `face->num_charmaps' elements. Each
3929 charmap has an 'encoding' field which specifies which known
3930 encoding it deals with. Valid values are, for example:
3932 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
3933 ft_encoding_apple_roman
3935 ft_encoding_adobe_standard
3936 ft_encoding_adobe_expert
3938 other values may be added in the future. Each charmap still
3939 holds its `platform_id' and `encoding_id' values in case the
3940 encoding is too exotic for the current library
3943 ----------------------------------------------------------------------
3945 Directory Structure:
3947 Should seem obvious to most of you:
3950 config/ -- configuration sub-makefiles
3952 unix/ -- platform-specific configuration files
3957 include/ -- public header files, those to be included
3958 directly by client apps
3960 src/ -- sources of the library
3961 base/ -- the base layer
3962 sfnt/ -- the sfnt `driver' (see the drivers section
3964 truetype/ -- the truetype driver
3965 type1/ -- the type1 driver
3966 shared/ -- some header files shared between drivers
3968 demos/ -- demos/tools
3970 docs/ -- documentation (a bit empty for now)
3973 ----------------------------------------------------------------------
3975 Glyph Image Formats:
3977 Drivers are now able to register new glyph image formats within the
3978 library. For now, the base layer supports of course bitmaps and
3979 vector outlines, but one could imagine something different like
3980 colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
3983 See the file `include/ftimage.h'. Note also that the type
3984 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
3985 should encompass all known bitmap types.
3987 Each new image format must provide at least one `raster', i.e. a
3988 module capable of transforming the glyph image into a bitmap. It's
3989 also possible to change the default raster used for a given glyph
3992 The default outline scan-converter now uses 128 levels of grays by
3993 default, which tends to smooth many things. Note that the demo
3994 programs have been updated significantly in order to display these..
3997 ----------------------------------------------------------------------
4001 You still need GNU Make to build the library. The build system has
4002 been very seriously re-vamped in order to provide things like :
4004 - automatic host platform detection (reverting to 'config/ansi' if
4005 it is not detected, with pseudo-standard compilation flags)
4007 - the ability to compile from the Makefiles with very different and
4008 exotic compilers. Note that linking the library can be difficult
4011 For example, the file `config/win32/lcclib.bat' is invoked by the
4012 build system to create the `.lib' file with LCC-Win32 because its
4013 librarian has too many flaws to be invoked directly from the
4016 Here's how it works:
4018 - the first time you type `make', the build system runs a series of
4019 sub-makefiles in order to detect your host platform. It then
4020 dumps what it found, and creates a file called `config.mk' in the
4021 current directory. This is a sub-Makefile used to define many
4022 important Make variables used to build the library.
4024 - the second time, the build system detects the `config.mk' then use
4025 it to build the library. All object files go into 'obj' by
4026 default, as well as the library file, but this can easily be
4029 Note that you can run `make setup' to force another host platform
4030 detection even if a `config.mk' is present in the current
4031 directory. Another solution is simply to delete the file, then
4034 Finally, the default compiler for all platforms is gcc (for now,
4035 this will hopefully changed in the future). You can however specify
4036 a different compiler by specifying it after the 'setup' target as
4039 gnumake setup lcc on Win32 to use the LCC compiler
4040 gnumake setup visualc on Win32 to use Visual C++
4042 See the file `config/<system>/detect.mk' for a list of supported
4043 compilers for your platforms.
4045 It should be relatively easy to write new detection rules files and
4048 Finally, to build the demo programs, go to `demos' and launch GNU
4049 Make, it will use the `config.mk' in the top directory to build the
4053 ----------------------------------------------------------------------
4057 In the previous beta, a single FT_System object was used to
4058 encompass all low-level operations like thread synchronisation,
4059 memory management and i/o access. This has been greatly simplified:
4061 - thread synchronisation has been dropped, for the simple reason
4062 that the library is already re-entrant, and that if you really
4063 need two threads accessing the same FT_Library, you should
4064 really synchronize access to it yourself with a simple mutex.
4066 - memory management is performed through a very simple object
4067 called `FT_Memory', which really is a table containing a table
4068 of pointers to functions like malloc, realloc and free as well
4069 as some user data (closure).
4071 - resources have disappeared (they created more problems than they
4072 solved), and i/o management have been simplified greatly as a
4073 result. Streams are defined through FT_Stream objects, which
4074 can be either memory-based or disk-based.
4076 Note that each face has its own stream, which is closed only
4077 when the face object is destroyed. Hence, a function like
4078 TT_Flush_Face in 1.x cannot be directly supported. However, if
4079 you really need something like this, you can easily tailor your
4080 own streams to achieve the same feature at a lower level (and
4081 use FT_Open_Face instead of FT_New_Face to create the face).
4083 See the file `include/ftsystem.h' for more details, as well as the
4084 implementations found in `config/unix' and `config/ansi'.
4087 ----------------------------------------------------------------------
4091 The Font Driver interface has been modified in order to support
4092 extensions & versioning.
4095 The list of the font drivers that are statically linked to the
4096 library at compile time is managed through a new configuration file
4097 called `config/<platform>/ftmodule.h'.
4099 This file is autogenerated when invoking `make modules'. This
4100 target will parse all sub-directories of 'src', looking for a
4101 `module.mk' rules file, used to describe the driver to the build
4104 Hence, one should call `make modules' each time a font driver is
4105 added or removed from the `src' directory.
4107 Finally, this version provides a `pseudo-driver' in `src/sfnt'.
4108 This driver doesn't support font files directly, but provides
4109 services used by all TrueType-like font drivers. Hence, its code is
4110 shared between the TrueType & OpenType font formats, and possibly
4111 more formats to come if we're lucky..
4114 ----------------------------------------------------------------------
4118 The extensions support is inspired by the one found in 1.x.
4120 Now, each font driver has its own `extension registry', which lists
4121 which extensions are available for the font faces managed by the
4124 Extension ids are now strings, rather than 4-byte tags, as this is
4125 usually more readable.
4128 - some data, associated to each face object
4129 - an interface (table of function pointers)
4131 An extension that is format-specific should simply register itself
4132 to the correct font driver. Here is some example code:
4134 // Registering an extensions
4136 FT_Error FT_Init_XXXX_Extension( FT_Library library )
4138 FT_DriverInterface* tt_driver;
4140 driver = FT_Get_Driver( library, "truetype" );
4141 if (!driver) return FT_Err_Unimplemented_Feature;
4143 return FT_Register_Extension( driver, &extension_class );
4147 // Implementing the extensions
4149 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
4151 FT_XXX_Extension ext;
4152 FT_XXX_Extension_Interface ext_interface;
4154 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
4155 if (!ext) return error;
4157 return ext_interface->do_it(ext);
4160 ------------------------------------------------------------------------
4162 Copyright 2000-2013 by
4163 David Turner, Robert Wilhelm, and Werner Lemberg.
4165 This file is part of the FreeType project, and may only be used,
4166 modified, and distributed under the terms of the FreeType project
4167 license, LICENSE.TXT. By continuing to use, modify, or distribute this
4168 file you indicate that you have read the license and understand and
4173 version-control: never
4177 --- end of CHANGES ---