2 CHANGES BETWEEN 2.4.7 and 2.4.8
6 - Some vulnerabilities in handling CID-keyed PostScript fonts have
7 been fixed; see CVE-2011-3439.
12 - Chris Liddell contributed a new API, `FT_Get_PS_Font_Value', to
13 retrieve most of the dictionary keys in Type 1 fonts.
16 ======================================================================
18 CHANGES BETWEEN 2.4.6 and 2.4.7
20 I. IMPORTANT BUG FIXES
22 - Some vulnerabilities in handling Type 1 fonts have been fixed;
28 - FreeType now properly handles ZapfDingbats glyph names while
29 constructing a Unicode character map (for fonts which don't have
33 ======================================================================
35 CHANGES BETWEEN 2.4.5 and 2.4.6
37 I. IMPORTANT BUG FIXES
39 - For TrueType based fonts, the ascender and descender values were
40 incorrect sometimes (off by a pixel if the ppem value was not a
41 multiple of 5). Depending on the use you might now experience
42 a different layout; the change should result in better, more
43 consistent line spacing.
45 - Fix CVE-2011-0226 which causes a vulnerability while handling
48 - BDF fonts containing glyphs with negative values for ENCODING
49 were incorrectly rejected. This bug has been introduced in
50 FreeType version 2.2.0.
52 - David Bevan contributed a major revision of the FreeType stroker
55 . The behaviour of FT_STROKER_LINEJOIN_BEVEL has been corrected.
57 . A new line join style, FT_STROKER_LINEJOIN_MITER_FIXED, has
58 been introduced to support PostScript and PDF miter joins.
60 . FT_STROKER_LINEJOIN_MITER_VARIABLE has been introduced as an
61 alias for FT_STROKER_LINEJOIN_MITER.
63 . Various stroking glitches has been fixed.
68 - SFNT bitmap fonts which contain an outline glyph for `.notdef'
69 only no longer set the FT_FACE_FLAG_SCALABLE flag.
72 ======================================================================
74 CHANGES BETWEEN 2.4.4 and 2.4.5
76 I. IMPORTANT BUG FIXES
78 - A rendering regression for second-order Bézier curves has been
79 fixed, introduced in 2.4.3.
84 - If autohinting is not explicitly disabled, FreeType now uses
85 the autohinter if a TrueType based font doesn't contain native
88 - The load flag FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH has been made
89 redundant and is simply ignored; this means that FreeType now
90 ignores the global advance width value in TrueType fonts.
95 - `FT_Sfnt_Table_Info' can now return the number of SFNT tables of
98 - Support for PCF files compressed with bzip2 has been contributed
99 by Joel Klinghed. To make this work, the OS must provide a
102 - Bradley Grainger contributed project and solution files in
103 Visual Studio 2010 format.
105 - Again some fixes to better handle broken fonts.
107 - Some improvements to the B/W rasterizer.
109 - Fixes to the cache module to improve robustness.
111 - Just Fill Bugs contributed (experimental) code to compute blue
112 zones for CJK Ideographs, improving the alignment of horizontal
113 stems at the top or bottom edges.
115 - The `ftgrid' demo program can now display autohinter segments,
116 to be toggled on and off with key `s'.
119 ======================================================================
121 CHANGES BETWEEN 2.4.3 and 2.4.4
123 I. IMPORTANT BUG FIXES
125 - UVS support (TrueType/OpenType cmap format 14) support is fixed.
126 This regression has been introduced in version 2.4.0.
131 - Detect tricky fonts (e.g. MingLiU) by the lengths and checksums
132 of Type42-persistent subtables (`cvt ', `fpgm', and `prep') when
133 a TrueType font without family name is given. The previous fix,
134 introduced in 2.4.3, was too rigorous, causing many subsetted
135 fonts (mainly from PDF files) displayed badly because FreeType
136 forced rendering with the TrueType bytecode engine instead of
139 - Better support for 64bit platforms.
141 - More fixes to improve handling of broken fonts.
144 ======================================================================
146 CHANGES BETWEEN 2.4.2 and 2.4.3
148 I. IMPORTANT BUG FIXES
150 - Fix rendering of certain cubic, S-shaped arcs. This regression
151 has been introduced in version 2.4.0.
156 - To fix the above mentioned rendering issue, a new spline
157 flattening algorithm has been introduced which speeds up both
158 conic and cubic arcs.
160 - Handling of broken fonts has been further improved.
163 ======================================================================
165 CHANGES BETWEEN 2.4.1 and 2.4.2
167 I. IMPORTANT BUG FIXES
169 - A stack overflow in CFF Type2 CharStrings interpreter is fixed.
171 - Handling Type 42 font deallocation was broken; additionally, the
172 library is now more robust against malformed Type 42 fonts.
177 - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and
178 `FT_Reference_Face' (in FT_FREETYPE_H), have been added to
179 simplify life-cycle management. A counter gets initialized to 1
180 at the time an FT_Library (or FT_Face) structure is created.
181 The two new functions increment the respective counter.
182 `FT_Done_Library' and `FT_Done_Face' then only destroy a library
183 or face if the counter is 1, otherwise they simply decrement the
187 ======================================================================
189 CHANGES BETWEEN 2.4.0 and 2.4.1
193 - A serious bug in the CFF font module prevented display of many
194 glyphs in CFF fonts like `MinionPro-Regular.otf'.
197 ======================================================================
199 CHANGES BETWEEN 2.3.12 and 2.4.0
203 - Since May 2010, all patents regarding the TrueType bytecode
204 interpreter have expired worldwide. Consequently, we now define
205 TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
206 TT_CONFIG_OPTION_UNPATENTED_HINTING).
208 - A new function `FT_Library_SetLcdFilterWeights' is available to
209 adjust the filter weights set by `FT_Library_SetLcdFilter'.
214 - Thanks to many reports from Robert Święcki, FreeType's stability
215 in handling broken or damaged fonts is much improved.
217 - Support for LCD filter control has been added to the demo
218 programs `ftdiff' and `ftview'.
221 ======================================================================
223 CHANGES BETWEEN 2.3.11 and 2.3.12
227 - For `FT_Open_Face', new parameters are available to ignore
228 preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
229 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
234 - Support for incremental font loading (controlled with the
235 FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default.
237 - Better support for vertical metrics.
239 - Various minor bug fixes.
242 ======================================================================
244 CHANGES BETWEEN 2.3.10 and 2.3.11
246 I. IMPORTANT BUG FIXES
248 - Version 2.3.10 broke PCF support.
251 ======================================================================
253 CHANGES BETWEEN 2.3.10 and 2.3.9
255 I. IMPORTANT BUG FIXES
257 - If all ASCII digits in a font have the same (unscaled) width,
258 the autohinter respects this and won't change it.
260 - TrueType fonts are now rasterized correctly if the horizontal
261 and vertical resolution differ.
263 - Type 1 fonts are now handled with increased precision internally
264 to avoid serious rounding issues if non-integral coordinates are
267 - Horizontally condensed CFF fonts (using the font matrix) were
268 rendered incorrectly. This bug has been introduced after
272 II. IMPORTANT CHANGES
274 - Support for the SFNT cmap 13 table format (as defined by the new
275 OpenType 1.6 specification) has been added.
277 - B/W rasterization of well-hinted TrueType fonts at small sizes
278 has been greatly improved.
280 - Calculation of vertical metrics in OpenType fonts has been
286 - It is now possible to change the emboldening factor in the
287 `ftview' demo program with keys `e' and `E'.
289 - It is now possible to change the slant value in the `ftview'
290 demo program with keys `s' and `S'.
292 - The 5-levels grayscale mode of the `ftraster' module (which
293 FreeType doesn't use by default) was broken since version 2.3.0.
295 - Compilation of the `ftgrays' and `ftraster' modules was broken
298 - Various fixes for compilation on 64bit and 16bit architectures.
301 ======================================================================
303 CHANGES BETWEEN 2.3.9 and 2.3.8
305 I. IMPORTANT BUG FIXES
307 - Very unfortunately, FreeType 2.3.8 contained a change that broke
308 its official ABI. The end result is that programs compiled
309 against previous versions of the library, but dynamically linked
310 to 2.3.8 can experience memory corruption if they call the
311 `FT_Get_PS_Font_Info' function.
313 We recommend all users to upgrade to 2.3.9 as soon as possible,
314 or to downgrade to a previous release of the library if this is
317 The origin of the bug is that a new field was added to the
318 publicly defined `PS_FontInfoRec' structure. Unfortunately,
319 objects of this type can be stack or heap allocated by callers
320 of `FT_Get_PS_Font_Info', resulting in a memory buffer
321 overwrite with its implementation in 2.3.8.
323 If you want to know whether your code is vulnerable to this
324 issue, simply search for the substrings `PS_FontInfo' and
325 `PS_Font_Info' in your source code. If none is found, your code
326 is safe and is not affected.
328 The FreeType team apologizes for the problem.
330 - The POSIX support of MacOS resource-fork fonts (Suitcase fonts
331 and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If
332 FreeType2 is built without Carbon framework, these fonts are not
333 handled correctly. Version 2.3.7 didn't have this bug.
335 - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for
336 almost all font formats except TrueType fonts.
338 - Fix a bug in the SFNT kerning table loader/parser which could
339 crash the engine if certain malformed tables were encountered.
341 - Composite SFNT bitmaps are now handled correctly.
344 II. IMPORTANT CHANGES
346 - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and
347 `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed
348 CFF fonts via CID values. This code has been contributed by
354 - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT
355 for empty outlines. This was incorrectly documented.
357 - The `ftview' demo program now supports UTF-8 encoded strings.
360 ======================================================================
362 CHANGES BETWEEN 2.3.8 and 2.3.7
364 I. IMPORTANT BUG FIXES
366 - CID-keyed fonts in an SFNT wrapper were not handled correctly.
368 - The smooth renderer produced truncated images (on the right) for
369 outline parts with negative horizontal values. Most fonts don't
370 contain outlines left to the y coordinate axis, but the effect
371 was very noticeable for outlines processed with FT_Glyph_Stroke,
374 - `FT_Get_TrueType_Engine_Type' returned a wrong value if both
375 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and
376 TT_CONFIG_OPTION_UNPATENTED_HINTING were defined.
378 - The `face_index' field in the `FT_Face' structure wasn't
379 initialized properly after calling FT_Open_Face and friends with
380 a positive face index for CFFs, WinFNTs, and, most importantly,
381 for TrueType Collections (TTCs).
384 II. IMPORTANT CHANGES
386 - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts
387 in an SFNT wrapper has been added -- such fonts are used on the
388 Mac. The core SFNT tables `TYP1' and `CID ' are passed to the
389 PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX',
390 `BBOX', etc.) are not supported yet.
392 - A new interface to extract advance values of glyphs without
393 loading their outlines has been added. The functions are called
394 `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file
395 `ftadvanc.h' (to be accessed as FT_ADVANCES_H).
397 - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been
398 contributed by David Bevan to access the embedding and
399 subsetting restriction information of fonts.
404 - FT_MulFix is now an inlined function; by default, assembler code
405 is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX
406 and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more.
408 - The handling of `tricky' fonts (this is, fonts which don't work
409 with the autohinter, needing the font format's hinting engine)
410 has been generalized and changed slightly:
412 . A new face flag FT_FACE_FLAG_TRICKY indicates that the font
413 format's hinting engine is necessary for correct rendering.
414 The macro FT_IS_TRICKY can be used to check this flag.
416 . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really
417 force raw loading of such fonts (without hinting), both
418 FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used --
419 this is something which you probably never want to do.
421 . Tricky TrueType fonts always use the bytecode interpreter,
422 either the patented or unpatented version.
424 - The function `FT_GlyphSlot_Own_Bitmap' has been moved from
425 FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official'
426 API. (The functions in FT_SYNTHESIS_H are still subject to
429 - In the `ftdiff' demo program you can now toggle the use of
430 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'.
433 ======================================================================
435 CHANGES BETWEEN 2.3.7 and 2.3.6
437 I. IMPORTANT BUG FIXES
439 - If the library was compiled on an i386 platform using gcc, and
440 compiler option -O3 was given, `FT_MulFix' sometimes returned
441 incorrect results which could have caused problems with
442 `FT_Request_Metrics' and `FT_Select_Metrics', returning an
443 incorrect descender size.
445 - Pure CFFs without subfonts were scaled incorrectly if the font
446 matrix was non-standard. This bug has been introduced in
449 - The `style_name' field in the `FT_FaceRec' structure often
450 contained a wrong value for Type 1 fonts. This misbehaviour
451 has been introduced in version 2.3.6 while trying to fix
452 another problem. [Note, however, that this value is
453 informative only since the used algorithm to extract it is
457 II. IMPORTANT CHANGES
459 - Two new macros, FT_OUTLINE_SMART_DROPOUTS and
460 FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with
461 FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is
462 now possible to control the dropout mode of the `raster' module
463 (for B&W rasterization), using the `flags' field in the
464 `FT_Outline' structure.
466 - The TrueType bytecode interpreter now passes the dropout mode to
467 the B&W rasterizer. This greatly increases the output for small
468 ppem values of many fonts like `pala.ttf'.
471 ======================================================================
473 CHANGES BETWEEN 2.3.6 and 2.3.5
475 I. IMPORTANT BUG FIXES
477 - A bunch of potential security problems have been found. All
480 - Microsoft Unicode cmaps in TrueType fonts are now always
481 preferred over Apple cmaps. This is not a bug per se, but there
482 exist some buggy fonts created for MS which have broken Apple
483 cmaps. This affects only the automatic selection of FreeType;
484 it's always possible to manually select an Apple Unicode cmap if
487 - Many bug fixes to the TrueType bytecode interpreter.
489 - Improved Mac support.
491 - Subsetted CID-keyed CFFs are now supported correctly.
493 - CID-keyed CFFs with subfonts which are scaled in a non-standard
494 way are now handled correctly.
496 - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
497 the font was a Windows (bitmap) FNT/FON.
500 II. IMPORTANT CHANGES
502 - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
503 access to those fields in a CID-keyed font. The code has been
504 contributed by Derek Clegg.
506 - George Williams contributed code to validate the new `MATH'
507 OpenType table (within the `otvalid' module). The `ftvalid'
508 demo program has been extended accordingly.
510 - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
511 has been contributed by George Williams.
513 - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
514 with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
520 - Build support for symbian has been contributed.
522 - Better WGL4 glyph name support, contributed by Sergey Tolstov.
524 - Debugging output of the various FT_TRACEX macros is now sent to
527 - The `ftview' demo program now provides artificial slanting too.
529 - The `ftvalid' demo program has a new option `-f' to select the
533 ======================================================================
535 CHANGES BETWEEN 2.3.5 and 2.3.4
537 I. IMPORTANT BUG FIXES
539 - Some subglyphs in TrueType fonts were handled incorrectly due to
540 a missing graphics state reinitialization.
542 - Large .Z files (as distributed with some X11 packages) weren't
543 handled correctly, making FreeType increase the heap stack in an
546 - A large number of bugs have been fixed to avoid crashes and
547 endless loops with invalid fonts.
550 II. IMPORTANT CHANGES
552 - The two new cache functions `FTC_ImageCache_LookupScaler' and
553 `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
554 glyphs using an `FTC_Scaler' object; this makes it possible to
555 use fractional pixel sizes in the cache. The demo programs have
556 been updated accordingly to use this feature.
558 - A new API `FT_Get_CMap_Format' has been added to get the cmap
559 format of a TrueType font. This is useful in handling PDF
560 files. The code has been contributed by Derek Clegg.
562 - The auto-hinter now produces better output by default for
563 non-Latin scripts like Indic. This was done by using the CJK
564 hinting module as the default instead of the Latin one. Thanks
565 to Rahul Bhalerao for this suggestion.
567 - A new API `FT_Face_CheckTrueTypePatents' has been added to find
568 out whether a given TrueType font uses patented bytecode
569 instructions. The `ft2demos' bundle contains a new program
570 called `ftpatchk' which demonstrates its usage.
572 - A new API `FT_Face_SetUnpatentedHinting' has been added to
573 enable or disable the unpatented hinter.
575 - Support for Windows FON files in PE format has been contributed
581 - Vincent Richomme contributed Visual C++ project files for Pocket
585 ======================================================================
587 CHANGES BETWEEN 2.3.4 and 2.3.3
589 I. IMPORTANT BUG FIXES
591 - A serious bug in the handling of bitmap fonts (and bitmap
592 strikes of outline fonts) has been introduced in 2.3.3.
595 ======================================================================
597 CHANGES BETWEEN 2.3.3 and 2.3.2
599 I. IMPORTANT BUG FIXES
601 - Remove a serious regression in the TrueType bytecode interpreter
602 that was introduced in version 2.3.2. Note that this does not
603 disable the improvements introduced to the interpreter in
604 version 2.3.2, only some ill cases that occurred with certain
605 fonts (though a few popular ones).
607 - The auto-hinter now ignores single-point contours for computing
608 blue zones. This bug created `wavy' baselines when rendering
609 text with various fonts that use these contours to model
610 mark-attach points (these are points that are never rasterized
611 and are placed outside of the glyph's real outline).
613 - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
614 zero for mono-spaced fonts. Otherwise code that uses them would
615 essentially ruin the fixed-advance property.
617 - Fix CVE-2007-1351 which can cause an integer overflow while
618 parsing BDF fonts, leading to a potentially exploitable heap
624 - Fixed compilation issues on some 64-bit platforms (see ChangeLog
627 - A new demo program `ftdiff' has been added to compare TrueType
628 hinting, FreeType's auto hinting, and rendering without hinting
632 ======================================================================
634 CHANGES BETWEEN 2.3.2 and 2.3.1
636 I. IMPORTANT BUG FIXES
638 - FreeType returned incorrect kerning information from TrueType
639 fonts when the bytecode interpreter was enabled. This happened
640 due to a typo introduced in version 2.3.0.
642 - Negative kerning values from PFM files are now reported
643 correctly (they were read as 16-bit unsigned values from the
646 - Fixed a small memory leak when `FT_Init_FreeType' failed for
649 - The Postscript hinter placed and sized very thin and ghost stems
652 - The TrueType bytecode interpreter has been fixed to get rid of
653 most of the rare differences seen in comparison to the Windows
657 II. IMPORTANT CHANGES
659 - The auto-hinter now better deals with serifs and corner cases
660 (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
661 spacing adjustments and doesn't change widths for non-spacing
664 - Many Mac-specific functions are deprecated (but still
665 available); modern replacements have been provided for them.
666 See the documentation in file `ftmac.h'.
669 ======================================================================
671 CHANGES BETWEEN 2.3.1 and 2.3.0
673 I. IMPORTANT BUG FIXES
675 - The TrueType interpreter sometimes returned incorrect horizontal
676 metrics due to a bug in the handling of the SHZ instruction.
678 - A typo in a security check introduced after version 2.2.1
679 prevented FreeType to render some glyphs in CFF fonts.
682 ======================================================================
684 CHANGES BETWEEN 2.3.0 and 2.2.1
686 I. IMPORTANT BUG FIXES
688 - The PCF font loader is now much more robust while loading
689 malformed font files.
691 - Various memory leaks have been found and fixed.
693 - The TrueType name loader now deals properly with some fonts that
694 encode their names in UTF-16 (the specification was vague, and
695 the code incorrectly assumed UCS-4).
697 - Fixed the TrueType bytecode loader to deal properly with subtle
698 monochrome/gray issues when scaling the CVT. Some fonts
699 exhibited bad rendering artifacts otherwise.
701 - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
702 (it mangled the vertical advance height).
704 - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
707 - The PFR font loader no longer erroneously tags font files
708 without any outlines as FT_FACE_FLAG_SCALABLE.
711 II. NEW API FUNCTIONS
713 - `FT_Library_SetLcdFilter' allows you to select a special filter
714 to be applied to the bitmaps generated by `FT_Render_Glyph' if
715 one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
716 been selected. This filter is used to reduce color fringes;
717 several settings are available through the FT_LCD_FILTER_XXX
720 Its declaration and documentation can be found in file
721 `include/freetype/ftlcdfil.h' (to be accessed with macro
724 *IMPORTANT*: This function returns an error
725 (FT_Err_Unimplemented_Feature) in default builds of the library
726 for patent reasons. See below.
728 - `FT_Get_Gasp' allows you to query the flags of the TrueType
729 `gasp' table for a given character pixel size. This is useful
730 to duplicate the text rendering of MS Windows when the native
731 bytecode interpreter is enabled (which isn't the default for
732 other patent reasons).
734 Its declaration and documentation can be found in file
735 `include/freetype/ftgasp.h' (to be accessed with macro
739 III. IMPORTANT CHANGES
741 - The auto-hinter has been tuned a lot to improve its results with
742 serif fonts, resulting in much better font rendering of many web
745 - The unpatented hinter is now part of the default build of the
746 library; we have added code to automatically support `tricky'
749 This means that FreeType should `just work' with certain Asian
750 fonts, like MingLiU, which cannot properly be loaded without a
751 bytecode interpreter, but which fortunately do not use any of
752 the patented bytecode opcodes. We detect these fonts by name,
753 so please report any font file that doesn't seem to work with
754 FreeType, and we shall do what we can to support it in a next
757 Note that the API hasn't changed, so you can still force
758 unpatented hinting with a special parameter to `FT_Open_Face' as
759 well. This might be useful in same cases; for example, a PDF
760 reader might present a user option to activate it to deal with
761 certain `tricky' embedded fonts which cannot be clearly
764 If you are a developer for embedded systems, you might want to
765 *disable* the feature to save code space by undefining
766 TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
768 - LCD-optimized rendering is now *disabled* in all default builds
769 of the library, mainly due to patent issues. For more
772 http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
774 A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
775 has been introduced in `ftoption.h'; manually define it in this
776 file if you want to re-enable the feature.
778 The change only affects the implementation, not the FreeType
779 API. This means that clients don't need to be modified, because
780 the library still generates LCD decimated bitmaps, but with the
781 added constraint that R=G=B on each triplet.
783 The displayed result should be equal to normal anti-aliased
786 Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
787 defined, the new `FT_Library_SetLcdFilter' function returns the
788 FT_Err_Unimplemented_Feature error code.
790 - Some computation bugs in the TrueType bytecode interpreter were
791 found, which allow us to get rid of very subtle and rare
792 differences we had experienced with the Windows renderer.
794 - It is now possible to cross-compile the library easily. See the
795 file `docs/INSTALL.CROSS' for details.
797 - The file `src/base/ftmac.c' now contains code for Mac OS X only;
798 its deprecated function `FT_GetFile_From_Mac_Font_Name' always
799 returns an error even if the QuickDraw framework is available.
800 The previous version has been moved to `builds/mac/ftmac.c'.
802 Selecting configure option `--with-quickdraw-carbon' makes the
803 build process use the original `ftmac.c' file instead of the Mac
809 - Various performance and memory footprint optimizations have been
810 performed on the TrueType and CFF font loaders, sometimes with
811 very drastic benefits (e.g., the TrueType loader is now about
812 25% faster; FreeType should use less heap memory under nearly
815 - The anti-aliased rasterizer has been optimized and is now 15% to
816 25% percent faster than in previous versions, depending on
819 - The Type 1 loader has been improved; as an example, it now skips
820 top-level dictionaries properly.
822 - Better support for Mac fonts on POSIX systems, plus compilation
823 fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
825 - Configuration without `--with-old-mac-fonts' does not include
826 `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
828 - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
832 ======================================================================
834 CHANGES BETWEEN 2.2.1 and 2.2
836 I. IMPORTANT BUG FIXES
838 - Various integer overflows have been fixed.
840 - PFB fonts with MacOS resource fork weren't handled correctly on
844 ======================================================================
846 CHANGES BETWEEN 2.2 and 2.1.10
848 (not released officially)
850 I. IMPORTANT BUG FIXES
852 - Vertical metrics for SFNT fonts were incorrect sometimes.
854 - The FT_HAS_KERNING macro always returned 0.
856 - CFF OpenType fonts didn't return correct vertical metrics for
857 glyphs with outlines.
859 - If FreeType was compiled without hinters, all font formats based
860 on PS outlines weren't scaled correctly.
863 II. IMPORTANT CHANGES
865 - Version 2.2 no longer exposes its internals, this is, the header
866 files located in the `include/freetype/internal' directory of
867 the source package are not copied anymore by the `make install'
868 command. Consequently, a number of rogue clients which directly
869 access FreeType's internal functions and structures won't
870 compile without modification.
872 We provide patches for most of those rogue clients. See the
873 following page for more information:
875 http://www.freetype.org/freetype2/patches/rogue-patches.html
877 Note that, as a convenience to our Unix desktop users, version
878 2.2 is *binary* compatible with FreeType 2.1.7, which means that
879 installing this release on an existing distribution shall not
880 break any working desktop.
882 - FreeType's build mechanism has been redesigned. With GNU make
883 it is now sufficient in most cases to edit two files:
884 `modules.cfg', to select the library components, and the
885 configuration file `include/freetype/config/ftoption.h' (which
886 can be copied to the objects directory). Removing unused module
887 directories to prevent its compilation and editing
888 `include/freetype/config/ftmodule.h' is no longer necessary.
890 - The LIGHT hinting algorithm produces more pleasant results.
891 Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
892 always forces auto-hinting, as a special exception. This allows
893 you to experiment with it even if you have enabled the TrueType
894 bytecode interpreter in your build.
896 - The auto hinter now employs a new algorithm for CJK fonts, based
897 on Akito Hirai's patch. Note that this only works for fonts
898 with a Unicode charmap at the moment.
900 - The following callback function types have changed slightly (by
901 adding the `const' keyword where appropriate):
903 FT_Outline_MoveToFunc
904 FT_Outline_LineToFunc
905 FT_Outline_ConicToFunc
906 FT_Outline_CubicToFunc
910 FT_Glyph_TransformFunc
911 FT_Renderer_RenderFunc
912 FT_Renderer_TransformFunc
914 Note that this doesn't affect binary backward compatibility.
916 - On MacOS, new APIs have been added as replacements for legacy
917 APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
918 and `FT_GetFile_From_Mac_ATS_Name' for
919 `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
920 FreeType is built without disabling them.
922 - A new API `FT_Select_Size' has been added to select a bitmap
923 strike by its index. Code using other functions to select
924 bitmap strikes should be updated to use this function.
926 - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
927 subglyph data. This can be used by rogue clients which used to
928 access the internal headers to get the corresponding data.
930 - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
931 BDF/PCF fonts, and only for them. This causes inconsistency.
932 In this release, we undo the change. The intent of the change
933 in 2.1.10 is to allow size selection through real dimensions,
934 which can now be done through `FT_Request_Size'.
936 - Some security issues were discovered and fixed in the CFF and
937 Type 1 loader, causing crashes of FreeType by malformed font
943 - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
944 values now better reflects its usage and differences: One set is
945 used to specify the hinting algorithm, the other to specify the
946 pixel rendering mode.
948 - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
949 changed to count supported scalable faces (sfnt, LWFN) only, and
950 to return the number of available faces via face->num_faces.
951 Unsupported bitmap faces (fbit, NFNT) are ignored.
953 - builds/unix/configure has been improved for MacOS X. It now
954 automatically checks available functions in Carbon library, and
955 prepare to use newest functions by default. Options to specify
956 the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
957 QuickDraw, ATS) are available too. By manual disabling of all
958 QuickDraw functionality, FreeType can be built without
959 `deprecated function' warnings on MacOS 10.4.x, but
960 FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
961 function, and returns an `unimplemented' error. For details see
964 - SFNT cmap handling has been improved, mainly to run much faster
967 - A new function `FT_Get_TrueType_Engine_Type (declared in
968 `FT_MODULE_H') is provided to determine the status of the
969 TrueType bytecode interpreter compiled into the library
970 (patented, unpatented, unimplemented).
972 - Vertical metrics of glyphs are synthesized if the font does not
973 provide such information. You can tell whether the metrics are
974 synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
977 - The demo programs `ftview' and `ftstring' have been rewritten
978 for better readability. `ftview' has a new switch `-p' to test
979 FT_New_Memory_Face (instead of FT_New_Face).
981 - FreeType now honours bit 1 in the `head' table of TrueType fonts
982 (meaning `left sidebearing point at x=0'). This helps with some
985 - Rudimentary support for Adobe's new `SING Glyphlet' format. See
987 http://www.adobe.com/products/indesign/sing_gaiji.html
989 for more information.
991 - The `ftdump' program from the `ft2demos' bundle now shows some
992 information about charmaps. It also supports a new switch `-v'
993 to increase verbosity.
995 - Better AFM support. This includes track kerning support.
998 ======================================================================
1000 CHANGES BETWEEN 2.1.10 and 2.1.9
1002 I. IMPORTANT BUG FIXES
1004 - The size comparison for BDF and PCF files could fail sometimes.
1006 - Some CFF files were still not loaded correctly. Patch from
1009 - The stroker still had some serious bugs.
1011 - Boris Letocha fixed a bug in the TrueType interpreter: The
1012 NPUSHW instruction wasn't skipped correctly in IF clauses. Some
1013 fonts like `Helvetica 75 Bold' failed.
1015 - Another serious bug in handling TrueType hints caused many
1016 distortions. It has been introduced in version 2.1.8, and it is
1017 highly recommended to upgrade.
1019 - FreeType didn't properly parse empty Type 1 glyphs.
1021 - An unbound dynamic buffer growth was fixed in the PFR loader.
1023 - Several bugs have been fixed in the cache sub-system.
1025 - FreeType behaved incorrectly when resizing two distinct but very
1026 close character pixel sizes through `FT_Set_Char_Size' (Savannah
1029 - The auto-hinter didn't work properly for fonts without a Unicode
1030 charmap -- it even refused to load the glyphs.
1033 II. IMPORTANT CHANGES
1035 - Many fixes have been applied to drastically reduce the amount of
1036 heap memory used by FreeType, especially when using
1037 memory-mapped font files (which is the default on Unix systems
1038 which support them).
1040 - The auto-hinter has been replaced with a new module, called the
1041 `auto-fitter'. It consumes less memory than its predecessor,
1042 and it is prepared to support non-latin scripts better in next
1045 - George Williams contributed code to read kerning data from PFM
1048 - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
1049 TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
1050 setting family and style in SFNT fonts (patch from Kornfeld
1053 - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
1054 been added to retrieve name and size information of SFNT tables.
1056 - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
1057 been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
1058 JSTF). After validation it is no longer necessary to check
1059 for errors in those tables while accessing them.
1061 Note that this module might be moved to another library in the
1062 future to avoid a tight dependency between FreeType and the
1063 OpenType specification.
1065 - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
1066 `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
1067 been added. Its use is to convert an FT_Bitmap structure in
1068 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
1069 probably using a different pitch, and to further manipulate it.
1071 - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
1072 control how outlines are embolded.
1074 - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
1075 also (code contributed by Chia I Wu). Note that this function
1076 is still experimental and may be replaced with a better API.
1078 - The method how BDF and PCF bitmap fonts are accessed has been
1079 refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
1080 were synonyms in FreeType's BDF and PCF interface. This has
1081 changed now. FT_Set_Pixel_Sizes should be used to select the
1082 actual font dimensions (the `strike', which is the sum of the
1083 `FONT_ASCENT' and `FONT_DESCENT' properties), while
1084 FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
1085 property). In both functions, the width parameter is ignored.
1090 - The BDF driver no longer converts all returned bitmaps with a
1091 depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
1092 not mentioned this explicitly, but implementors might have
1093 relied on this after looking into the source files.
1095 - A new option `--ftversion' has been added to freetype-config to
1096 return the FreeType version.
1098 - The memory debugger has been updated to dump allocation
1099 statistics on all allocation sources in the library. This is
1100 useful to spot greedy allocations when loading and processing
1103 - We removed a huge array of constant pointers to constant strings
1104 in the `psnames' module. The problem was that compilations in
1105 PIC mode (i.e., when generating a Unix shared object/dll) put
1106 the array into the non-shared writable section of the library
1107 since absolute pointers are not relocatable by nature.
1109 This reduces the memory consumption by approximately 16KByte per
1110 process linked to FreeType. We now also store the array in a
1111 compressed form (as a trie) which saves about 20KByte of code as
1114 - Kirill Smelkov provided patches to make src/raster/ftraster.c
1115 compile stand-alone again.
1118 ======================================================================
1120 CHANGES BETWEEN 2.1.9 and 2.1.8
1122 I. IMPORTANT BUG FIXES
1124 - The function `FT_Get_CharMap_Index' was only declared, without
1125 any real code. For consistency, it has been renamed to
1126 `FT_Get_Charmap_Index'. (This function is needed to implement
1129 - `FT_Outline_Get_BBox' sometimes returned incorrect values for
1130 conic outlines (e.g., for TrueType fonts).
1132 - Handling of `bhed' table has been fixed.
1134 - The TrueType driver with enabled byte code interpreter sometimes
1135 returned artifacts due to incorrect rounding. This bug has been
1136 introduced after version 2.1.4.
1138 - The BDF driver dropped the last glyph in the font.
1140 - The BDF driver now uses the DEFAULT_CHAR property (if available)
1141 to select a glyph shape for the undefined glyph.
1143 - The stroker failed for closed outlines and single points.
1146 II. IMPORTANT CHANGES
1148 - George Williams contributed code to handle Apple's font
1149 distortion technology found in GX fonts (`avar', `cvar', `fvar',
1150 and `gvar' tables; the Multiple Masters API has been slightly
1151 extended to cope with the new functionality).
1153 - The `FT_GlyphSlotRec' structure has been extended: The elements
1154 `lsb_delta' and `rsb_delta' give the difference between hinted
1155 and unhinted left and right side bearings if autohinting is
1156 active. Using those values can improve the inter-letter spacing
1157 considerably. See the documentation of `FT_GlyphSlotRec' and
1158 the `ftstring' demo program how to use it.
1160 - Loading TrueType and Type 1 fonts has been made much faster.
1162 - The stroker is no longer experimental (but the cache subsystem
1168 - A new documentation file `formats.txt' describes various font
1169 formats supported (and not supported) by FreeType.
1172 ======================================================================
1174 CHANGES BETWEEN 2.1.8 and 2.1.7
1176 I. IMPORTANT BUG FIXES
1178 - The native TrueType hinter contained some bugs which prevented
1179 some fonts to be rendered correctly, most notably Legendum.otf.
1181 - The PostScript hinter now produces improved results.
1183 - The linear advance width and height values were incorrectly
1184 rounded, making them virtually unusable if not loaded with
1185 FT_LOAD_LINEAR_DESIGN.
1187 - Indexing CID-keyed CFF fonts is now working: The glyph index is
1188 correctly treated as a CID, similar to FreeType's CID driver
1189 module. Note that CID CMap support is still missing.
1191 - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
1194 - Some subsetted Type 1 fonts weren't parsed correctly. This bug
1195 has been introduced in 2.1.7. In summary, the Type 1 parser has
1198 - Non-decimal numbers weren't parsed correctly in PS fonts.
1200 - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
1201 but one encoding. Use the new FT_WinFNT_ID_XXX values together
1202 with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
1204 - The descender metrics (face->size->metrics.descender) for WinFNT
1205 bitmap fonts had the wrong sign.
1207 - The (emulated) `seac' support for CFF fonts was broken.
1209 - The `flex' operator didn't work for CFF fonts.
1211 - PS glyphs which use the `hintmask' operator haven't been
1212 rendered correctly in some cases.
1214 - Metrics for BDF and PCF bitmap font formats have been fixed.
1216 - Autohinting is now disabled for glyphs which are vertically
1217 distorted or mirrored (using a transformation matrix). This
1218 fixes a bug which produced zero-height glyphs.
1220 - The `freetype-config' script now handles --prefix and
1221 --exec-prefix correctly; it also returns the proper --rpath (or
1222 -R) value if FreeType has been built as a shared library.
1225 II. IMPORTANT CHANGES
1227 - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
1228 ADD_STYLE_NAME properties. Values are appended to
1229 face->style_name; example: `Bold SemiCondensed'.
1231 - The PCF driver now handles bitmap fonts compressed with the LZW
1232 algorithm (extension .pcf.Z, compressed with `compress').
1234 - A new API function `FT_Get_CMap_Language_ID' (declared in
1235 `tttables.h') is available to get the language ID of a
1238 - The hexadecimal format of data after the `StartData' command in
1239 CID-keyed Type 1 fonts is now supported. While this can't occur
1240 in file-based fonts, it can happen in document-embedded
1241 resources of PostScript documents.
1243 - Embedded bitmaps in SFNT-based CFF fonts are now supported.
1245 - A simple API is now available to control FreeType's tracing
1246 mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
1247 `ftdebug.h' for more details.
1249 - YAMATO Masatake contributed improved handling of MacOS resource
1250 forks on non-MacOS platforms (for example, Linux can mount MacOS
1253 - Support for MacOS has been improved; there is now a new function
1254 `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
1255 it accepts an FSSpec instead of a path.
1257 - The cache sub-system has been rewritten.
1259 - There is now support for deinstallation of faces.
1261 - A new API function `FTC_Manager_RemoveFaceID' has been added
1262 to delete all `idle' nodes that correspond to a given
1263 FTC_FaceID. All `locked' nodes (i.e., those with a reference
1264 count > 0), will be modified to prevent them from appearing in
1265 further lookups (they will be cleaned normally when their
1266 reference count reaches 0).
1268 - There is now support for point scaling (i.e., providing
1269 character sizes in points + dpis, instead of pixels).
1271 - Three abstract cache classes are now available:
1273 FTC_GCache: Used to store one glyph item per cache node,
1274 with the ability to group common attributes into
1275 `families'. This replaces the old
1276 FTC_GlyphCache class.
1278 FTC_ICache: Used to store one FT_Glyph per cache node. This
1279 extends FTC_GCache. Family definition, family
1280 comparison, and glyph loading are however left
1283 FTC_SCache: Used to store up to 16 small bitmaps per cache
1284 node. This extends FTC_GCache. Family
1285 definition, family comparison and glyph loading
1286 are however left to sub-classes.
1288 - The file `src/cache/ftcbasic.c' implements:
1290 FTC_ImageCache: Extends FTC_ICache; implements family
1291 definitions and glyph loading similar to the
1294 FTC_SBitCache: Extends FTC_SCache, implements family
1295 definitions and glyph loading similar to the
1298 Client applications should be able to extend FTC_GCache,
1299 FTC_ICache, or FTC_SCache much more easily (i.e., less code to
1300 write, and less callbacks). For example, one could envision
1301 caches that are capable of storing transformed (obliqued),
1302 stroked, emboldened, or colored glyph images. Use
1303 `ftcbasic.c' as an example.
1305 - All public APIs are now in `include/freetype/ftcache.h', (to
1306 be accessed as `FT_CACHE_H'). The contents of
1307 `include/freetype/cache/' is only needed by applications that
1308 wish to implement their own caches.
1310 - There were some major performance improvements through the use
1311 of various programming tricks. Cache hits are up to 70%
1312 faster than in the old code.
1314 - The FTC_CMapCache has been simplified. Charmaps can only be
1315 accessed by index right now. There is also a new API named
1316 `FT_Charmap_GetIndex' for this purpose.
1318 - The demo programs have been updated to the new code. The
1319 previous versions will not work with the current one.
1321 - Using an invalid face index in FT_Open_Face and friends now
1322 causes an error even if the font contains a single face only.
1327 - Wolfgang Domröse contributed support files for building FreeType
1328 on the Atari using the PureC compiler. Note that the Atari is a
1331 - Vitaliy Pasternak contributed project files for VS.NET 2003.
1334 ======================================================================
1336 CHANGES BETWEEN 2.1.7 and 2.1.6
1338 I. IMPORTANT BUG FIXES
1340 - Updated to newest libtool version, fixing build problems on
1343 - On Unix platforms, `make install' didn't copy the correct
1346 Note that version 2.1.7 contains the same library C source code as
1350 ======================================================================
1352 CHANGES BETWEEN 2.1.6 and 2.1.5
1354 I. IMPORTANT BUG FIXES
1356 - The PFR font driver didn't load kerning tables correctly, and
1357 the functions in FT_PFR_H didn't work at all.
1359 - Type 1 font files in binary format (PFB) with an end-of-file
1360 indicator weren't accepted by the FreeType engine.
1362 - Fonts which contain /PaintType and /StrokeWidth no longer cause
1363 a segfault. This bug has been introduced in version 2.1.5.
1365 - Fonts loaded with FT_LOAD_RENDER no longer cause strange
1366 results. This bug has been introduced in version 2.1.5.
1368 - Some Windows (bitmap) FNT/FON files couldn't be handled
1372 II. IMPORTANT CHANGES
1374 - The internal module API has been heavily changed in favor of
1375 massive simplifications within the font engine. This also means
1376 that authors of third-party modules must adapt their code to the
1379 NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
1382 - The PostScript parser has been enhanced to handle comments and
1383 strings correctly. Additionally, more syntax forms are
1386 - Added the optional unpatented hinting system for TrueType. It
1387 allows typefaces which need hinting to produce correct glyph
1388 forms (e.g., Chinese typefaces from Dynalab) to work acceptably
1389 without infringing Apple patents. This system is compiled only
1390 if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
1391 ftoption.h (activated by default).
1396 - There is now a guard in the public header files to protect
1397 against inclusion of freetype.h from FreeType 1.
1399 - Direct inclusion of freetype.h and other public header files no
1400 longer works. You have to use the documented scheme
1402 #include <ft2build.h>
1403 #include FT_FREETYPE_H
1405 to load freetype.h with a symbolic name. This protects against
1406 renaming of public header files (which shouldn't happen but
1407 actually has, avoiding two public header files with the same
1411 ======================================================================
1413 CHANGES BETWEEN 2.1.5 and 2.1.4
1415 I. IMPORTANT BUG FIXES
1417 - Parsing the /CIDFontName field now removes the leading slash to
1418 be in sync with other font drivers.
1420 - gzip support was buggy. Some fonts could not be read.
1422 - Fonts which have nested subglyphs more than one level deep no
1423 longer cause a segfault.
1425 - Creation of synthetic cmaps for fonts in CFF format was broken
1428 - Numeric font dictionary entries for synthetic fonts are no
1431 - The font matrix wasn't applied to the advance width for Type1,
1432 CID, and CFF fonts. This caused problems when loading certain
1433 synthetic Type 1 fonts like `Helvetica Narrow'.
1435 - The test for the charset registry in BDF and PCF fonts is now
1438 - FT_Vector_Rotate sometimes returned strange values due to
1441 - The PCF driver now returns the correct number of glyphs
1442 (including an artificial `notdef' glyph at index 0).
1444 - FreeType now supports buggy CMaps which are contained in many
1445 CJK fonts from Dynalab.
1447 - Opening an invalid font on a Mac caused a segfault due to
1448 double-freeing memory.
1450 - BDF fonts with more than 32768 glyphs weren't supported
1454 II. IMPORTANT CHANGES
1456 - Accessing bitmap font formats has been synchronized. To do that
1457 the FT_Bitmap_Size structure has been extended to contain new
1458 fields `size', `x_ppem', and `y_ppem'.
1460 - The FNT driver now returns multiple faces, not multiple strikes.
1462 - The `psnames' module has been updated to the Adobe Glyph List
1465 - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
1467 - The algorithm for guessing the font style has been improved.
1469 - For fonts in SFNT format, root->height is no longer increased if
1470 the line gap is zero. There exist fonts (containing e.g. form
1471 drawing characters) which intentionally have a zero line gap
1474 - ft_glyph_bbox_xxx flags are now deprecated in favour of
1477 - ft_module_xxx flags are now deprecated in favour of
1480 - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
1481 deprecated in favour of
1482 FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
1483 are not specific to Microsoft.
1488 - The autohinter has been further improved; for example, `m'
1489 glyphs now retain its vertical symmetry.
1491 - Partial support of Mac fonts on non-Mac platforms.
1493 - `make refdoc' (after first `make') builds the HTML
1494 documentation. You need Python for this.
1496 - The make build system should now work more reliably on DOS-like
1499 - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
1502 - Better VMS build support.
1504 - Support for the pkg-config package by providing a `freetype.pc'
1507 - New configure option --with-old-mac-fonts for Darwin.
1509 - Some source files have been renamed (mainly to fit into the 8.3
1513 ======================================================================
1515 CHANGES BETWEEN 2.1.4 and 2.1.3
1517 I. IMPORTANT BUG FIXES
1519 - Updated to newest libtool version, fixing build problems on
1522 - A fix in the Gzip stream reader: It couldn't read certain .gz
1523 files properly due to a small typo. In certain cases, FreeType
1524 could also loop endlessly when trying to load tiny gzipped
1527 - The configure script now tries to use the system-wide zlib when
1528 it finds one (instead of the copy found in src/gzip). And
1529 `freetype-config' has been updated to return relevant flags in
1530 this case when invoked with `--libs' (e.g. `-lzlib').
1532 - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
1533 Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
1536 - The CFF loader was modified to accept fonts which only contain a
1537 subset of their reference charset. This prevented the correct
1538 use of PDF-embedded fonts.
1540 - The logic to detect Unicode charmaps has been modified. This is
1541 required to support fonts which include both 16-bit and 32-bit
1542 charmaps (like very recent asian ones) using the new 10 and 12
1545 - The TrueType loader now limits the depth of composite glyphs.
1546 This is necessary to prevent broken fonts to break the engine by
1547 blowing the stack with recursive glyph definitions.
1549 - The CMap cache is now capable of managing UCS-4 character codes
1550 that are mapped through extended charmaps in recent
1551 TrueType/OpenType fonts.
1553 - The cache sub-system now properly manages out-of-memory
1554 conditions instead of blindly reporting them to the caller.
1555 This means that it will try to empty the cache before restarting
1556 its allocations to see if that can help.
1558 - The PFR driver didn't return the list of available embedded
1561 - There was a nasty memory leak when using embedded bitmaps in
1562 certain font formats.
1565 II. IMPORTANT CHANGES
1567 - David Chester contributed some enhancements to the auto-hinter
1568 that significantly increase the quality of its output. The
1569 Postscript hinter was also improved in several ways.
1571 - The FT_RENDER_MODE_LIGHT render mode was implemented.
1573 - A new API function called `FT_Get_BDF_Property' has been added
1574 to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
1575 files. THIS IS STILL EXPERIMENTAL, since it hasn't been
1576 properly tested yet.
1578 - A Windows FNT specific API has been added, mostly to access font
1579 headers. This is used by Wine.
1581 - TrueType tables without an `hmtx' table are now tolerated when
1582 an incremental interface is used. This happens for certain
1583 Type42 fonts passed from Ghostscript to FreeType.
1585 - The PFR font driver is now capable of returning the font family
1586 and style names when they are available (instead of the sole
1587 `FontID'). This is performed by parsing an *undocumented*
1588 portion of the font file!
1593 - The path stroker in FT_STROKER_H has entered beta stage. It now
1594 works very well, but its interface might change a bit in the
1595 future. More on this in later releases.
1597 - The documentation for FT_Size_Metrics didn't appear properly in
1600 - The file docs/VERSION.DLL has been updated to explain versioning
1601 with FreeType (i.e., comparing release/libtool/so numbers, and
1602 how to use them in autoconf scripts).
1604 - The installation documentation has been seriously revamped.
1605 Everything is now in the `docs' directory.
1608 ======================================================================
1610 CHANGES BETWEEN 2.1.3 and 2.1.2
1612 I. IMPORTANT BUG FIXES
1614 - FT_Vector_Transform had been incorrectly modified in 2.1.2,
1615 resulting in incorrect transformations being applied (for
1616 example, rotations were processed in opposite angles).
1618 - The format 8 and 12 TrueType charmap enumeration routines have
1619 been fixed (FT_Get_Next_Char returned invalid values).
1621 - The PFR font driver returned incorrect advance widths if the
1622 outline and metrics resolution defined in the font file were
1625 - FT_Glyph_To_Bitmap now returns successfully when called with an
1626 FT_BitmapGlyph argument (it previously returned an error).
1628 - A bug in the Type 1 loader that prevented valid font bounding
1629 boxes to be loaded from multiple master fonts.
1631 - The SFNT validation code has been rewritten. FreeType can now
1632 load `broken' fonts that were usable on Windows, but not with
1633 previous versions of the library.
1635 - The computation of bearings in the BDF driver has been fixed.
1637 - The Postscript hinter crashed when trying to hint certain glyphs
1638 (more precisely, when trying to apply hints to an empty glyph
1641 - The TrueType glyph loader now supports composites in `Apple
1642 format' (they differ slightly from Microsoft/OpenType ones in
1643 the way transformation offsets are computed).
1645 - FreeType was very slow at opening certain asian CID/CFF fonts,
1646 due to fixed increment in dynamic array re-allocations. This
1647 has been changed to exponential behaviour to get acceptable
1652 II. IMPORTANT CHANGES
1654 - The PCF driver now supports gzip-compressed font files natively.
1655 This means that you will be able to use all these bitmap fonts
1656 that come with XFree86 with FreeType (and libXft/libXft2, by
1659 - The automatic and postscript hinters have both been updated.
1660 This results in a relatively important increase of rendering
1661 quality since many nasty defaults have been suppressed. Please
1664 http://www.freetype.org/hinting/smooth-hinting.html
1666 for additional details on this topic.
1668 - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
1669 (instead of just being an FT_Int). This breaks source and
1670 binary compatibility for 16bit systems only, while retaining
1671 both of them for 32 and 64 bit ones.
1673 Some new flags have been added consequently:
1675 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
1676 (but not native format hinters).
1678 FT_LOAD_TARGET_NORMAL :: Hint and render for normal
1679 anti-aliased displays.
1681 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
1683 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
1684 BGR sub-pixel displays (like LCD
1685 screens). THIS IS STILL
1688 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
1689 vertical sub-pixel displays (like
1690 rotated LCD screens). THIS IS STILL
1693 FT_LOAD_MONOCHROME is still supported, but only affects
1694 rendering, not the hinting.
1696 Note that the `ftview' demo program available in the `ft2demos'
1697 package has been updated to support LCD-optimized display on
1698 non-paletted displays (under Win32 and X11).
1700 - The PFR driver now supports embedded bitmaps (all formats
1701 supported), and returns correct kerning metrics for all glyphs.
1703 - The TrueType charmap loader now supports certain `broken' fonts
1704 that load under Windows without problems.
1706 - The cache API has been slightly modified (it's still a beta!):
1708 - The type FTC_ImageDesc has been removed; it is now replaced
1709 by FTC_ImageTypeRec. Note that one of its fields is a
1710 `load_flag' parameter for FT_Load_Glyph.
1712 - The field `num_grays' of FT_SBitRec has been changed to
1713 `max_grays' in order to fit within a single byte. Its
1714 maximum value is thus 255 (instead of 256 as previously).
1719 - Added support for the DESTDIR variable during `make install'.
1720 This simplifies packaging of FreeType.
1722 - Included modified copies of the ZLib sources in `src/gzip' in
1723 order to support gzip-compressed PCF fonts. We do not use the
1724 system-provided zlib for now, though this is a probable
1725 enhancement for future releases.
1727 - The DocMaker tool used to generate the on-line API reference has
1728 been completely rewritten. It is now located in
1729 `src/tools/docmaker/docmaker.py'. Features:
1731 - better cross-referenced output
1732 - more polished output
1733 - uses Python regular expressions (though it didn't speed the
1735 - much more modular structure, which allows for different
1736 `backends' in order to generate HTML, XML, or whatever
1739 One can regenerate the API reference by calling:
1741 python src/tools/docmaker/docmaker.py \
1743 --title=FreeType-2.1.3 \
1744 --output=<outputdirectory>
1745 include/freetype/*.h \
1746 include/freetype/config/*.h \
1747 include/freetype/cache/*.h
1749 - A new, experimental, support for incremental font loading (i.e.,
1750 loading of fonts where the glyphs are not in the font file
1751 itself, but provided by an external component, like a Postscript
1752 interpreter) has been added by Graham Asher. This is still work
1753 in progress, however.
1755 - A new, EXPERIMENTAL, path stroker has been added. It doesn't
1756 suffer from severe rounding errors and treat bezier arcs
1757 directly. Still work in progress (i.e. not part of the official
1758 API). See the file <freetype/ftstroker.h> for some of the
1761 - The massive re-formatting of sources and internal re-design is
1762 still under-way. Many internal functions, constants, and types
1766 ======================================================================
1768 CHANGES BETWEEN 2.1.2 and 2.1.1
1770 I. IMPORTANT BUG FIXES
1772 - Many font drivers didn't select a Unicode charmap by default
1773 when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
1774 options enabled), causing many applications to not be able to
1775 display text correctly with the 2.1.x releases.
1777 - The PFR driver had a bug in its composite loading code that
1778 produces incorrectly placed accents with many fonts.
1780 - The Type42 driver crashed sometimes due to a nasty bug.
1782 - The Type 1 custom encoding charmap didn't handle the case where
1783 the first glyph index wasn't 0.
1785 - A serious typo in the TrueType composite loader produced
1786 incorrectly placed glyphs in fonts like `Wingdings' and a few
1792 - The Win32 Visual C++ project file has been updated to include
1793 the PFR driver as well.
1795 - `freetype.m4' is now installed by default by `make install' on
1798 - The function FT_Get_PS_Font_Info now works with CID and Type42
1802 ======================================================================
1804 CHANGES BETWEEN 2.1.1 and 2.1.0
1806 I. IMPORTANT BUG FIXES
1808 - The `version_info' returned by `freetype-config' in 2.1.0
1809 returned an invalid value. It now returns 9:1:3 (2.0.9 returned
1812 - Version 2.1.0 couldn't be linked against applications on Win32
1813 and Amiga systems due to a new debug function that wasn't
1814 properly propagated to the system-specific directory in
1817 - Various MacOS and Mac OS X specific fixes.
1819 - Fixed a bug in the TrueType charmap validation routines that
1820 made version 2.1.0 too restrictive -- many popular fonts have
1823 - There was still a very small difference between the monochrome
1824 glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
1825 bytecode interpreter enabled. This was caused by an invalid
1826 flag setting in the TrueType glyph loader, making the rasterizer
1827 change its drop-out control mode. Now the results should
1828 _really_ be completely identical.
1830 - The TrueType name table loader has been improved to support many
1831 popular though buggy Asian fonts. It now ignores empty name
1832 entries, invalid pointer offsets and a few other incorrect
1833 subtleties. Moreover, name strings are now loaded on demand,
1834 which reduces the memory load of many faces (e.g. the ARIAL.TTF
1835 font file contains a 10kByte name table with 70 names).
1837 - Fixed a bug in the Postscript hinter that prevented family blues
1838 substitution to happen correctly.
1843 - Three new font drivers in this release:
1845 * A BDF font driver, contributed by Franco Zappa Nardelli,
1846 heavily modified by Werner Lemberg. It also supports
1847 anti-aliased bitmaps (using a slightly extended BDF format).
1849 * A Type42 font driver, contributed by Roberto Alameda. It is
1850 still experimental but seems to work relatively well.
1852 * A PFR font driver, contributed by David Turner himself. It
1853 doesn't support PFR hinting -- note that BitStream has at
1854 least two patents on this format!
1859 - The cache sub-system has been optimized in important ways.
1860 Cache hits are now significantly faster. For example, using the
1861 CMap cache is about twice faster than calling FT_Get_Char_Index
1862 on most platforms. Similarly, using an SBit cache is about five
1863 times faster than loading the bitmaps from a bitmap file, and
1864 300 to 500 times faster than generating them from a scalable
1867 Note that you should recompile your sources if you designed a
1868 custom cache class for the FT2 Cache subsystem, since the
1869 changes performed are source, but not binary, compatible.
1872 ======================================================================
1874 CHANGES BETWEEN 2.1.0 and 2.0.9
1876 I. IMPORTANT BUG FIXES
1878 - The TrueType bytecode interpreter has been fixed to produce
1879 _exactly_ the same output as FreeType 1.x. Previous differences
1880 were due to slightly distinct fixed-point computation routines
1881 used to perform dot products and vector length measurements.
1883 It seems that native TrueType hinting is _extremely_ sensitive
1884 to rounding errors. The required vector computation routines
1885 have been optimized and placed within the `ttinterp.c' file.
1887 - Fixed the parsing of accelerator tables in the PCF font driver.
1889 - Fixed the Type1 glyph loader routine used to compute the font's
1890 maximum advance width.
1895 - The `configure' script used on Unix systems has been modified to
1896 check that GNU Make is being used to build the library.
1897 Otherwise, it will display a message proposing to use the
1898 GNUMAKE environment variable to name it.
1900 The Unix-specific file README.UNX has been modified accordingly.
1905 - The FreeType License in `docs/FTL.TXT' has been updated to
1906 include a proposed preferred disclaimer. If you are using
1907 FreeType in your products, you are encouraged (but not mandated)
1908 to use the following text in your documentation:
1911 Portions of this software are copyright © 1996-2002 The
1912 FreeType Project (www.freetype.org). All rights reserved.
1915 - The default size of the render pool has been reduced to 16kByte.
1916 This shouldn't result in any noticeable performance penalty,
1917 unless you are using the engine as-is to render very large and
1920 - The FreeType 2 redesign has begun. More information can be
1923 http://www.freetype.org/freetype2/redesign.html
1925 The following internal changes have been performed within the
1926 sources of this release:
1928 - Many internal types have been renamed to increase
1929 consistency. The following should be true, except for
1932 * All structure types have a name ending in `Rec' (short
1935 * A pointer-to-structure type has the same name as the
1936 structure, _without_ the `Rec' suffix.
1940 typedef struct FooRec_
1946 - Many internal macros have been renamed to increase
1947 consistency. The following should be true:
1949 * All macros have a name beginning with `FT_'. This
1950 required a few changes like
1954 REALLOC => FT_REALLOC
1956 * All macros are completely UPPERCASE. This required a
1959 READ_Short => FT_READ_SHORT
1960 NEXT_Short => FT_NEXT_SHORT
1961 GET_ULongLE => FT_GET_ULONG_LE
1962 MEM_Set => FT_MEM_SET
1963 MEM_Copy => FT_MEM_COPY
1966 * Whenever possible, all macro names follow the
1967 FT_<OBJECT>_<METHOD> pattern. For example
1969 ACCESS_Frame => FT_FRAME_ENTER
1970 FORGET_Frame => FT_FRAME_EXIT
1971 EXTRACT_Frame => FT_FRAME_EXTRACT
1972 RELEASE_Frame => FT_FRAME_RELEASE
1974 FILE_Pos => FT_STREAM_POS
1975 FILE_Seek => FT_STREAM_SEEK
1976 FILE_Read => FT_STREAM_READ
1977 FILE_ReadAt => FT_STREAM_READ_AT
1978 READ_Fields => FT_STREAM_READ_FIELDS
1980 - Many internal functions have been renamed to follow the
1981 FT_<Object>_<Method> pattern. For example:
1983 FT_Seek_Stream => FT_Stream_Seek
1984 FT_Read_Stream_At => FT_Stream_ReadAt
1985 FT_Done_Stream => FT_Stream_Close
1986 FT_New_Stream => FT_Stream_Open
1987 FT_New_Memory_Stream => FT_Stream_OpenMemory
1988 FT_Extract_Frame => FT_Stream_ExtractFrame
1990 Note that method names do not contain `_'.
1992 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
1993 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
1994 type as the fourth argument. Instead, the array element
1995 type size is computed automatically from the type of the
1996 target pointer used.
1998 - A new object class, FT_CMap, has been introduced. These
1999 internal objects are used to model character maps. This
2000 eases the support of additional charmap types within the
2003 - A new configuration file named `ftstdlib.h' has been added
2004 to `include/freetype/config'. It is used to define aliases
2005 for _every_ routine of the ISO C library that the font
2006 engine uses. Each aliases has a `ft_' prefix
2007 (e.g. `ft_strlen' is an alias for `strlen').
2009 This is used to ease the porting of FreeType 2 to exotic
2010 runtime environments where the ISO C Library isn't available
2011 (e.g. XFree86 extension modules).
2013 More details are available in the `ChangeLog' file.
2016 ======================================================================
2018 CHANGES BETWEEN 2.0.9 and 2.0.8
2020 I. IMPORTANT BUG FIXES
2022 - Certain fonts like `foxjump.ttf' contain broken name tables with
2023 invalid entries and wild offsets. This caused FreeType to crash
2024 when trying to load them.
2026 The SFNT `name' table loader has been fixed to be able to
2027 support these strange fonts.
2029 Moreover, the code in charge of processing this table has been
2030 changed to always favour Windows-formatted entries over other
2031 ones. Hence, a font that works on Windows but not on the Mac
2032 will load cleanly in FreeType and report accurate values for
2033 Family & PostScript names.
2035 - The CID font driver has been fixed. It unfortunately returned a
2036 Postscript Font name with a leading slash, as in
2037 `/MunhwaGothic-Regular'.
2039 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
2042 - A bug in the Postscript hinter has been found and fixed,
2043 removing un-even stem widths at small pixel sizes (like 14-17).
2045 This improves the quality of a certain number of Postscript
2051 - A new function named `FT_Library_Version' has been added to
2052 return the current library's major, minor, and patch version
2053 numbers. This is important since the macros FREETYPE_MAJOR,
2054 FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
2055 library is dynamically linked by a program.
2057 - Two new APIs have been added: `FT_Get_First_Char' and
2060 Together, these can be used to iterate efficiently over the
2061 currently selected charmap of a given face. Read the API
2062 reference for more details.
2067 - The FreeType sources are under heavy internal re-factoring. As
2068 a consequence, we have created a branch named `STABLE' on the
2069 CVS to hold all future releases/fixes in the 2.0.x family.
2071 The HEAD branch now contains the re-factored sources and
2072 shouldn't be used for testing or packaging new releases. In
2073 case you would like to access the 2.0.9 sources from our CVS
2074 repository, use the tag `VER-2-0-9'.
2077 ======================================================================
2079 CHANGES BETWEEN 2.0.8 and 2.0.7
2081 I. IMPORTANT BUG FIXES
2083 - There was a small but nasty bug in `freetype-config.in' which
2084 caused the `freetype-config' script to fail on Unix.
2086 This didn't prevent the installation of the library or even its
2087 execution, but caused problems when trying to compile many Unix
2088 packages that depend on it.
2090 - Some TrueType or OpenType fonts embedded in PDF documents do not
2091 have a 'cmap', 'post' and 'name' as is required by the
2092 specification. FreeType no longer refuses to load such fonts.
2094 - Various fixes to the PCF font driver.
2097 ======================================================================
2099 CHANGES BETWEEN 2.0.7 and 2.0.6
2101 I. IMPORTANT BUG FIXES
2103 - Fixed two bugs in the Type 1 font driver. The first one
2104 resulted in a memory leak in subtle cases. The other one caused
2105 FreeType to crash when trying to load `.gsf' files (Ghostscript
2106 so-called Postscript fonts).
2108 (This made _many_ KDE applications crash on certain systems.
2109 FreeType _is_ becoming a critical system component on Linux :-)
2111 - Fixed a memory leak in the CFF font driver.
2113 - Fixed a memory leak in the PCF font driver.
2115 - Fixed the Visual C++ project file
2116 `builds/win32/visualc/freetype.dsp' since it didn't include the
2117 Postscript hinter component, causing errors at build time.
2119 - Fixed a small rendering bug in the anti-aliased renderer that
2120 only occurred when trying to draw thin (less than 1 pixel)
2123 - Fixed `builds/unix/freetype2.a4' which is used to generate a
2124 valid `freetype2.m4' for use with autoconf.
2126 - Fixed the OpenVMS Makefiles.
2131 - Added `configure' and `install' scripts to the top-level
2132 directory. A GNU-style installation is thus now easily possible
2135 ./configure <options>
2140 ======================================================================
2142 CHANGES BETWEEN 2.0.6 and 2.0.5
2144 I. IMPORTANT BUG FIXES
2146 - It wasn't possible to load embedded bitmaps when the auto-hinter
2147 was used. This is now fixed.
2149 - The TrueType font driver didn't load some composites properly
2150 (the sub-glyphs were slightly shifted, and this was only
2151 noticeable when using monochrome rendering).
2153 - Various fixes to the auto-hinter. They merely improve the
2154 output of sans-serif fonts. Note that there are still problems
2155 with serifed fonts and composites (accented characters).
2157 - All scalable font drivers erroneously returned un-fitted glyph
2158 advances when hinting was requested. This created problems for
2159 a number of layout applications. This is a very old bug that
2160 got undetected mainly because most test/demo program perform
2161 rounding explicitly or implicitly (through the cache).
2163 - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
2166 - `glnames.py' still contained a bug that made FreeType return
2167 invalid names for certain glyphs.
2169 - The library crashed when loading certain Type 1 fonts like
2170 `sadn.pfb' (`Stalingrad Normal'), which appear to contain
2171 pathetic font info dictionaries.
2173 - The TrueType glyph loader is now much more paranoid and checks
2174 everything when loading a given glyph image. This was necessary
2175 to avoid problems (crashes and/or memory overwrites) with broken
2176 fonts that came from a really buggy automatic font converter.
2179 II. IMPORTANT UPDATES AND NEW FEATURES
2181 - Important updates to the Mac-specific parts of the library.
2183 - The caching sub-system has been completely re-designed, and its
2184 API has evolved (the old one is still supported for backward
2187 The documentation for it is not yet completed, sorry. For now,
2188 you are encouraged to continue using the old API. However, the
2189 ftview demo program in the ft2demos package has already been
2190 updated to use the new caching functions.
2192 - A new charmap cache is provided too. See `FTC_CMapCache'. This
2193 is useful to perform character code -> glyph index translations
2194 quickly, without the need for an opened FT_Face.
2196 - A NEW POSTSCRIPT HINTER module has been added to support native
2197 hints in the following formats: PostScript Type 1, PostScript
2200 Please test! Note that the auto-hinter produces better results
2201 for a number of badly-hinted fonts (mostly auto-generated ones)
2204 - A memory debugger is now part of the standard FreeType sources.
2205 To enable it, define FT_DEBUG_MEMORY in
2206 <freetype/config/ftoption.h>, and recompile the library.
2208 Additionally, define the _environment_ variable FT_DEBUG_MEMORY
2209 and run any program using FreeType. When the library is exited,
2210 a summary of memory footprints and possible leaks will be
2213 This works transparently with _any_ program that uses FreeType.
2214 However, you will need a lot of memory to use this (allocated
2215 blocks are never released to the heap to detect double deletes
2221 - We are aware of subtle differences between the output of
2222 FreeType versions 1 and 2 when it comes to monochrome
2223 TrueType-hinted glyphs. These are most probably due to small
2224 differences in the monochrome rasterizers and will be worked out
2225 in an upcoming release.
2227 - We have decided to fork the sources in a `stable' branch, and an
2228 `unstable' one, since FreeType is becoming a critical component
2229 of many Unix systems.
2231 The next bug-fix releases of the library will be named 2.0.7,
2232 2.0.8, etc., while the `2.1' branch will contain a version of
2233 the sources where we will start major reworking of the library's
2234 internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
2235 more distant future.
2237 We also hope that this scheme will allow much more frequent
2238 releases than in the past.
2241 ======================================================================
2243 CHANGES BETWEEN 2.0.5 and 2.0.4
2245 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
2246 WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
2248 - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
2249 `lslash' unavailable from Unicode charmaps of Postscript fonts.
2250 This prevented the correct display of Polish text, for example.
2252 - The kerning table of Type 1 fonts was loaded by FreeType, when its
2253 AFM file was attached to its face, but the
2254 FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
2255 preventing FT_Get_Kerning to return meaningful values.
2257 - Improved SFNT (TrueType & OpenType) charmap support. Slightly
2258 better performance, as well as support for the new formats defined
2259 by the OpenType 1.3 specification (8, 10, and 12)
2261 - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
2262 computations in certain rare cases, producing ugly artefacts.
2264 - The size of the EM square is computed with a more accurate
2265 algorithm for Postscript fonts. The old one caused slight errors
2266 with embedded fonts found in PDF documents.
2268 - Fixed a bug in the cache manager that prevented normal LRU
2269 behaviour within the cache manager, causing unnecessary reloads
2270 (for FT_Face and FT_Size objects only).
2272 - Added a new function named `FT_Get_Name_Index' to retrieve the
2273 glyph index of a given glyph name, when found in a face.
2275 - Added a new function named `FT_Get_Postscript_Name' to retrieve
2276 the `unique' Postscript font name of a given face.
2278 - Added a new public header size named FT_SIZES_H (or
2279 <freetype/ftsizes.h>) providing new FT_Size-management functions:
2280 FT_New_Size, FT_Activate_Size, FT_Done_Size.
2282 - Fixed a reallocation bug that generated a dangling pointer (and
2283 possibly memory leaks) with Postscript fonts (in
2284 src/psaux/psobjs.c).
2286 - Many fixes for 16-bit correctness.
2288 - Removed many pedantic compiler warnings from the sources.
2290 - Added an Amiga build directory in `builds/amiga'.
2293 ======================================================================
2295 CHANGES BETWEEN 2.0.4 and 2.0.3
2297 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
2298 the font transformation set through FT_Set_Transform was applied
2299 twice to auto-hinted glyphs, resulting in incorrectly rotated text
2302 - Fixed _many_ compiler warnings. FT2 should now compile cleanly
2303 with Visual C++'s most pedantic warning level (/W4). It already
2304 compiled fine with GCC and a few other compilers.
2306 - Fixed a bug that prevented the linear advance width of composite
2307 TrueType glyphs to be correctly returned.
2309 - Fixed the Visual C++ project files located in
2310 `builds/win32/visualc' (previous versions used older names of the
2313 - Many 32-bit constants have an `L' appended to their value, in
2314 order to improve the 16-bitness of the code. Someone is actually
2315 trying to use FT2 on an Atari ST machine!
2317 - Updated the `builds/detect.mk' file in order to automatically
2318 build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
2319 `/sbin/init' and wasn't previously detected as a Unix platform by
2320 the FreeType build system.
2322 - Updated the Unix-specific portions of the build system (new
2323 libtool version, etc.).
2325 - The SFNT kerning loader now ensures that the table is sorted
2326 (since some problem fonts do not meet this requirement).
2329 =======================================================================
2331 CHANGES BETWEEN 2.0.3 and 2.0.2
2333 I. CHANGES TO THE MODULES / FONT DRIVERS
2335 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
2336 several annoying artefacts, mainly:
2338 - Blue zone alignment of horizontal stems wasn't performed
2339 correctly, resulting in artefacts like the `d' being placed
2340 one pixel below the `b' in some fonts like Time New Roman.
2342 - Overshoot thresholding wasn't performed correctly, creating
2343 unpleasant artefacts at large character pixel sizes.
2345 - Composite glyph loading has been simplified. This gets rid
2346 of various artefacts where the components of a composite
2347 glyphs were not correctly spaced.
2349 These are the last changes to the current auto-hinting module.
2350 A new hinting sub-system is currently in the work in order to
2351 support native hints in Type 1 / CFF / OpenType fonts, as well
2352 as globally improve rendering.
2354 - The PCF driver has been fixed. It reported invalid glyph
2355 dimensions for the fonts available on Solaris.
2357 - The Type 1, CID and CFF drivers have been modified to fix the
2358 computation of the EM size.
2360 - The Type 1 driver has been fixed to avoid a dangerous bug that
2361 crashed the library with non-conforming fonts (i.e. ones that do
2362 not place the .notdef glyph at position 0).
2364 - The TrueType driver had a rather subtle bug (dangling pointer
2365 when loading composite glyphs) that could crash the library in
2369 II. HIGH-LEVEL API CHANGES
2371 - The error code enumeration values have been changed. An error
2372 value is decomposed in a generic error code, and a module
2373 number. see <freetype/fterrors.h> for details.
2375 - A new public header file has been introduced, named
2376 FT_TRIGONOMETRY_H (include/freetype/fttrig.h), providing
2377 trigonometric functions to compute sines, cosines, arctangents,
2378 etc. with 16.16 fixed precision. The implementation is based on
2379 the CORDIC algorithm and is very fast while being sufficiently
2385 - Added BeOS-specific files in the old build sub-system. Note
2386 that no changes were required to compile the library with Jam.
2388 - The configuration is now capable of automatically detecting
2389 64-bit integers on a set of predefined compilers (GCC, Visual
2390 C++, Borland C++) and will use them by default. This provides a
2391 small performance boost.
2393 - A small memory leak that happened when opening 0-sized files
2394 (duh!) have been fixed.
2396 - Fixed bezier stack depth bug in the routines provided by the
2397 FT_BBOX_H header file. Also fixed similar bugs in the
2400 - The outline bounding box code has been rewritten to use direct
2401 computations, instead of bezier sub-division, to compute the
2402 exact bounding box of glyphs. This is slightly slower but more
2405 - The build system has been improved and fixed, mainly to support
2406 `make' on Windows 2000 correctly, avoid problems with `make
2407 distclean' on non Unix systems, etc.
2409 - Hexadecimal constants have been suffixed with `U' to avoid
2410 problems with certain compilers on 64-bit platforms.
2412 - A new directory named `src/tools' has been created. It contains
2413 Python scripts and simple unit test programs used to develop the
2416 - The DocMaker tool has been moved from `docs' to `src/tools' and
2417 has been updated with the following:
2419 - Now accepts the `--title=XXXX' or `-t XXXX' option from the
2420 command line to set the project's name in the generated API
2423 - Now accepts the `--output=DIR' or `-o DIR' option from the
2424 command line to set the output directory for all generated
2427 - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
2428 command line to set the file prefix to use for all
2429 generated HTML files.
2431 - Now generates the current time/data on each generated page
2432 in order to distinguish between versions.
2434 DocMaker can be used with other projects now, not only FT2
2435 (e.g. MLib, FTLayout, etc.).
2438 ======================================================================
2440 CHANGES BETWEEN 2.0.2 and 2.0.1
2442 I. CHANGES TO THE MODULES / FONT DRIVERS
2444 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
2445 avoid legal problems with the Apple patents. It seems that we
2446 mistakenly turned this option on in previous releases of the
2449 Note that if you want to use the bytecode interpreter in order
2450 to get high-quality TrueType rendering, you will need to toggle
2451 by hand the definition of the
2452 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
2453 `include/freetype/config/ftoption.h'.
2455 - The CFF driver has been improved by Tom Kacvinsky and Sander van
2458 * Support for `seac' emulation.
2459 * Support for `dotsection'.
2460 * Support for retrieving glyph names through
2461 `FT_Get_Glyph_Name'.
2463 The first two items are necessary to correctly a large number of
2464 Type 1 fonts converted to the CFF formats by Adobe Acrobat.
2466 - The Type 1 driver was also improved by Tom & others:
2468 * Better EM size computation.
2469 * Better support for synthetic (transformed) fonts.
2470 * The Type 1 driver returns the charstrings corresponding to
2471 each glyph in the `glyph->control_data' field after a call to
2472 `FT_Load_Glyph' (thanks Ha Shao).
2474 - Various other bugfixes, including the following:
2476 * Fixed a nasty memory leak in the Type 1 driver.
2477 * The autohinter and the pcf driver used static writable data
2478 when they shouldn't.
2479 * Many casts were added to make the code more 64-bits safe. It
2480 also now compiles on Windows XP 64-bits without warnings.
2481 * Some incorrect writable statics were removed in the `autohint'
2482 and `pcf' drivers. FreeType 2 now compiles on Epoc again.
2485 II. CHANGES TO THE HIGH-LEVEL API
2487 - The library header files inclusion scheme has been changed. The
2488 old scheme looked like:
2490 #include <freetype/freetype.h>
2491 #include <freetype/ftglyph.h>
2492 #include <freetype/ftcache.h>
2493 #include <freetype/cache/ftimage.h>
2497 #include <ft2build.h>
2498 #include FT_FREETYPE_H
2501 #include FT_CACHE_IMAGE_H
2503 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
2504 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
2505 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
2507 The file <ft2build.h> is used to define the header filename
2508 macros. The complete and commented list of macros is available
2509 in the API reference under the section name `Header File Macros'
2512 For more information, see section I of the following document:
2514 http://www.freetype.org/
2515 freetype2/docs/tutorial/step1.html
2519 http://freetype.sourceforge.net/
2520 freetype2/docs/tutorial/step1.html
2522 - Many, many comments have been added to the public source file in
2523 order to automatically generate the API Reference through the
2524 `docmaker.py' Python script.
2526 The latter has been updated to support the grouping of sections
2527 in chapters and better index sort. See:
2529 http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
2532 III. CHANGES TO THE BUILD PROCESS
2534 - If you are not building FreeType 2 with its own build system
2535 (but with your own Makefiles or project files), you will need to
2536 be aware that the build process has changed a little bit.
2538 You don't need to put the `src' directory in the include path
2539 when compiling any FT2 component. Instead, simply put the
2540 component's directory in the current include path.
2542 So, if you were doing something like:
2544 cc -c -Iinclude -Isrc src/base/ftbase.c
2548 cc -c -Iinclude -Isrc/base src/base/ftbase.c
2550 If you were doing something like:
2553 cc -c -I../../include -I.. ftbase.c
2558 cc -c -I../../include ftbase.c
2561 ======================================================================
2563 CHANGES BETWEEN 2.0.1 and 2.0
2565 2.0.1 introduces a few changes:
2567 - Fixed many bugs related to the support of CFF / OpenType fonts.
2568 These formats are now much better supported though there is
2569 still work planned to deal with charset tables and PDF-embedded
2570 CFF files that use the old `seac' command.
2572 - The library could not be compiled in debug mode with a very
2573 small number of C compilers whose pre-processors didn't
2574 implement the `##' directive correctly (i.e. per se the ANSI C
2575 specification!) An elegant fix was found.
2577 - Added support for the free Borland command-line C++ Builder
2578 compiler. Use `make setup bcc32'. Also fixed a few source
2579 lines that generated new warnings with BCC32.
2581 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
2584 - Updated the INSTALL file to add IDE compilation.
2586 - Other minor bug fixes, from invalid Type 1 style flags to
2587 correct support of synthetic (obliqued) fonts in the
2588 auto-hinter, better support for embedded bitmaps in a SFNT font.
2590 - Fixed some problems with `freetype-config'.
2592 Finally, the `standard' scheme for including FreeType headers is now
2593 gradually changing, but this will be explained in a later release
2596 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
2597 for their contributions!
2600 ======================================================================
2602 CHANGES BETWEEN beta8 and 2.0
2604 - Changed the default installation path for public headers from
2605 `include/freetype' to `include/freetype2'.
2607 Also added a new `freetype-config' that is automatically generated
2608 and installed on Unix and Cygwin systems. The script itself is
2609 used to retrieve the current install path, C compilation flags as
2610 well as linker flags.
2612 - Fixed several small bugs:
2614 * Incorrect max advance width for fixed-pitch Type 1 fonts.
2615 * Incorrect glyph names for certain TrueType fonts.
2616 * The glyph advance was not copied when FT_Glyph_To_Bitmap was
2618 * The linearHoriAdvance and linearVertAdvance fields were not
2619 correctly returned for glyphs processed by the auto-hinter.
2620 * `type1z' renamed back to `type1'; the old `type1' module has
2623 - Revamped the build system to make it a lot more generic. This
2624 will allow us to re-use nearly un-modified in lots of other
2625 projects (including FreeType Layout).
2627 - Changed `cid' to use `psaux' too.
2629 - Added the cache sub-system. See <freetype/ftcache.h> as well as
2630 the sources in `src/cache'. Note that it compiles but is still
2633 - Updated `docs/docmaker.py', a draft API reference is available at
2634 http://www.freetype.org/ft2api.html.
2636 - Changed `type1' to use `psaux'.
2638 - Created a new module named `psaux' to hold the Type 1 & Type 2
2639 parsing routines. It should be used by `type1', `cid', and `cff'
2642 - Fixed an important bug in `FT_Glyph_Get_CBox'.
2644 - Fixed some compiler warnings that happened since the TrueType
2645 bytecode decoder was deactivated by default.
2647 - Fixed two memory leaks:
2649 * The memory manager (16 bytes) isn't released in
2651 * Using custom input streams, the copy of the original stream was
2654 - Fixed the auto-hinter by performing automatic computation of the
2655 `filling direction' of each glyph. This is done through a simple
2656 and fast approximation, and seems to work (problems spotted by
2657 Werner though). The Arphic fonts are a lot nicer though there are
2658 still a lot of things to do to handle Asian fonts correctly.
2661 ======================================================================
2663 BETA-8 (RELEASE CANDIDATE) CHANGES
2665 - Deactivated the TrueType bytecode interpreter by default.
2667 - Deactivated the `src/type1' font driver. Now `src/type1z' is used
2670 - Updates to the build system. We now compile the library correctly
2671 under Unix system through `configure' which is automatically
2672 called on the first `make' invocation.
2674 - Added the auto-hinting module! Fixing some bugs here and there.
2676 - Found some bugs in the composite loader (seac) of the Type1-based
2679 - Renamed the directory `freetype2/config' to `freetype2/builds' and
2680 updated all relevant files.
2682 - Found a memory leak in the `type1' driver.
2684 - Incorporated Tom's patches to support flex operators correctly in
2685 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
2686 fonts to be done with this driver :-)
2688 - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
2689 always `simulates' a Unicode charmap, so it shouldn't be
2690 considered completed right now.
2692 It is there to be more a proof of concept than anything else
2693 anyway. The driver is a single C source file, that compiles to 3
2696 I'm still working on the PCF/BDF drivers, but I'm too lazy to
2699 - CHANGES TO THE HIGH-LEVEL API
2701 * FT_Get_Kerning has a new parameter that allows you to select the
2702 coordinates of the kerning vector (font units, scaled, scaled +
2704 * The outline functions are now in <freetype/ftoutln.h> and not
2705 part of <freetype/freetype.h> anymore.
2706 * <freetype/ftmodule.h> now contains declarations for
2707 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
2708 * The so-called convenience functions have moved from `ftoutln.c'
2709 to `ftglyph.c', and are thus available with this optional
2710 component of the library. They are declared in
2711 <freetype/ftglyph.h> now.
2712 * Anti-aliased rendering is now the default for FT_Render_Glyph
2713 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
2714 To generate a monochrome bitmap, use ft_render_mode_mono, or the
2715 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
2716 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
2717 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
2718 solving a few headaches :-)
2719 * The type FT_GlyphSlotRec has now a `library' field.
2721 - CHANGES TO THE `ftglyph.h' API
2723 This API has been severely modified in order to make it simpler,
2724 clearer, and more efficient. It certainly now looks like a real
2725 `glyph factory' object, and allows client applications to manage
2726 (i.e. transform, bbox and render) glyph images without ever
2727 knowing their original format.
2729 - Added support for CID-keyed fonts to the CFF driver. Maybe
2730 support for pure CFF + CEF fonts should come in?
2732 - Cleaned up source code in order to avoid two functions with the
2733 same name. Also changed the names of the files in `type1z' from
2734 `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
2736 `make multi' now works well :-)
2738 Also removed the use of `cidafm' for now, even if the source files
2739 are still there. This functionality will certainly go into a
2742 - ADDED SUPPORT FOR THE AUTO-HINTER
2744 It works :-) I have a demo program which simply is a copy of
2745 `ftview' that does a `FT_Add_Module(library,
2746 &autohinter_module_class)' after library initialization, and Type
2747 1 & OpenType/CFF fonts are now hinted.
2749 CID fonts are not hinted, as they include no charmap and the
2750 auto-hinter doesn't include `generic' global metrics computations
2753 Now, I need to release this thing to the FreeType 2 source.
2755 - CHANGES TO THE RENDERER MODULES
2757 The monochrome and smooth renderers are now in two distinct
2758 directories, namely `src/raster1' and `src/smooth'. Note that the
2759 old `src/renderer' is now gone.
2761 I ditched the 5-gray-levels renderers. Basically, it involved a
2762 simple #define toggle in 'src/raster1/ftraster.c'.
2764 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
2765 select the best renderer available, depending on render mode. If
2766 the current renderer for a given glyph image format isn't capable
2767 of supporting the render mode, another one will be found in the
2768 library's list. This means that client applications do not need
2769 to switch or set the renderers themselves (as in the latest
2770 change), they'll get what they want automatically. At last.
2772 Changed the demo programs accordingly.
2774 - MAJOR INTERNAL REDESIGN:
2776 A lot of internal modifications have been performed lately on the
2777 source in order to provide the following enhancements:
2779 * More generic module support:
2781 The FT_Module type is now defined to represent a handle to a
2782 given module. The file <freetype/ftmodule.h> contains the
2783 FT_Module_Class definition, as well as the module-loading public
2786 The FT_Driver type is still defined, and still represents a
2787 pointer to a font driver. Note that FT_Add_Driver is replaced
2788 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
2790 * Support for generic glyph image types:
2792 The FT_Renderer type is a pointer to a module used to perform
2793 various operations on glyph image.
2795 Each renderer is capable of handling images in a single format
2796 (e.g. ft_glyph_format_outline). Its functions are used to:
2798 - transform an glyph image
2799 - render a glyph image into a bitmap
2800 - return the control box (dimensions) of a given glyph image
2802 The scan converters `ftraster.c' and `ftgrays.c' have been moved
2803 to the new directory `src/renderer', and are used to provide two
2804 default renderer modules.
2806 One corresponds to the `standard' scan-converter, the other to
2809 he current renderer can be set through the new function
2812 The old raster-related function FT_Set_Raster, FT_Get_Raster and
2813 FT_Set_Raster_Mode have now disappeared, in favor of the new:
2818 See the file <freetype/ftrender.h> for more details.
2820 These changes were necessary to properly support different
2821 scalable formats in the future, like bi-color glyphs, etc.
2823 * Glyph loader object:
2825 A new internal object, called a 'glyph loader' has been
2826 introduced in the base layer. It is used by all scalable format
2827 font drivers to load glyphs and composites.
2829 This object has been created to reduce the code size of each
2830 driver, as each one of them basically re-implemented its
2833 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
2836 * FT_GlyphSlot has new fields:
2838 In order to support extended features (see below), the
2839 FT_GlyphSlot structure has a few new fields:
2843 This field gives the linearly scaled (i.e. scaled but
2844 unhinted) advance width for the glyph, expressed as a 16.16
2845 fixed pixel value. This is useful to perform WYSIWYG text.
2848 This field gives the linearly scaled advance height for the
2849 glyph (relevant in vertical glyph layouts only). This is
2850 useful to perform WYSIWYG text.
2852 Note that the two above field replace the removed `metrics2'
2853 field in the glyph slot.
2856 This field is a vector that gives the transformed advance for
2857 the glyph. By default, it corresponds to the advance width,
2858 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
2859 FT_Load_Glyph or FT_Load_Char.
2862 This field gives the distance in integer pixels from the
2863 current pen position to the left-most pixel of a glyph image
2864 IF IT IS A BITMAP. It is only valid when the `format' field
2865 is set to `ft_glyph_format_bitmap', for example, after calling
2866 the new function FT_Render_Glyph.
2869 This field gives the distance in integer pixels from the
2870 current pen position (located on the baseline) to the top-most
2871 pixel of the glyph image IF IT IS A BITMAP. Positive values
2872 correspond to upwards Y.
2875 This is a new private field for the glyph slot. Client
2876 applications should not touch it.
2879 * Support for transforms and direct rendering in FT_Load_Glyph:
2881 Most of the functionality found in <freetype/ftglyph.h> has been
2882 moved to the core library. Hence, the following:
2884 - A transform can be specified for a face through
2885 FT_Set_Transform. this transform is applied by FT_Load_Glyph
2886 to scalable glyph images (i.e. NOT TO BITMAPS) before the
2887 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
2888 was set in the load flags.
2890 - Once a glyph image has been loaded, it can be directly
2891 converted to a bitmap by using the new FT_Render_Glyph
2892 function. Note that this function takes the glyph image from
2893 the glyph slot, and converts it to a bitmap whose properties
2894 are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
2895 and `face.glyph.bitmap_top'. The original native image might
2896 be lost after the conversion.
2898 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
2899 and FT_Load_Char functions will call FT_Render_Glyph
2900 automatically when needed.
2902 - Reformatted all modules source code in order to get rid of the
2903 basic data types redifinitions (i.e. `TT_Int' instead of `FT_Int',
2904 `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
2905 prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
2906 relevant structures.
2909 ======================================================================
2911 OLD CHANGES FOR BETA 7
2913 - bug-fixed the OpenType/CFF parser. It now loads and displays my
2914 two fonts nicely, but I'm pretty certain that more testing is
2917 - fixed the crummy Type 1 hinter, it now handles accented characters
2918 correctly (well, the accent is not always well placed, but that's
2921 - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
2922 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
2923 really useful CMAP files..
2925 - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
2926 Thanks to Boris Letocha for spotting them and providing a fix.
2928 - fixed potential `divide by zero' bugs in ftcalc.c.
2930 - added source code for the OpenType/CFF driver (still incomplete
2933 - modified the SFNT driver slightly to perform more robust header
2934 checks in TT_Load_SFNT_Header. This prevents certain font files
2935 (e.g. some Type 1 Multiple Masters) from being incorrectly
2936 `recognized' as TrueType font files..
2938 - moved a lot of stuff from the TrueType driver to the SFNT module,
2939 this allows greater code re-use between font drivers
2940 (e.g. TrueType, OpenType, Compact-TrueType, etc..)
2942 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
2943 to minimally speed it up..
2945 - added support for Multiple Master fonts in `type1z'. There is
2946 also a new file named <freetype/ftmm.h> which defines functions to
2947 manage them from client applications.
2949 The new file `src/base/ftmm.c' is also optional to the engine..
2951 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
2952 small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
2954 - a minor fix to the Type 1 driver to let them apply the font matrix
2955 correctly (used for many oblique fonts..)
2957 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
2958 to use %p instead of %lx). Thanks to Karl Robillard.
2960 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
2961 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
2962 cropped when loaded from a file (maybe I should move the bitmap
2963 cropper to the base layer ??).
2965 - changed the default number of gray levels of the smooth renderer
2966 to 256 (instead of the previous 128). Of course, the human eye
2967 can't see any difference ;-)
2969 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
2970 of subglyphs in a TrueType font now..
2973 ======================================================================
2975 OLD CHANGES 16 May 2000
2977 - tagged `BETA-6' in the CVS tree. This one is a serious release
2978 candidate even though it doesn't incorporate the auto-hinter yet..
2980 - various obsolete files were removed, and copyright header updated
2982 - finally updated the standard raster to fix the monochrome
2983 rendering bug + re-enable support for 5-gray levels anti-aliasing
2986 - created new header files, and modified sources accordingly:
2988 <freetype/fttypes.h>
2989 - simple FreeType types, without the API
2990 <freetype/internal/ftmemory.h>
2991 - definition of memory-management macros
2993 - added the `DSIG' (OpenType Digital Signature) tag to
2996 - light update/cleaning of the build system + changes to the sources
2997 in order to get rid of _all_ compiler warnings with three
3000 gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
3003 IMPORTANT NOTE FOR WIN32-LCC USERS:
3005 | It seems the C pre-processor that comes with LCC is broken, it
3006 | doesn't recognize the ANSI standard directives # and ##
3007 | correctly when one of the argument is a macro. Also,
3010 | #define F(x) print##x
3014 | will get incorrectly translated to:
3018 | by its pre-processor. For this reason, you simply cannot build
3019 | FreeType 2 in debug mode with this compiler..
3021 - yet another massive grunt work. I've changed the definition of
3022 the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
3023 now take an argument, which is the function's return value type.
3025 This is necessary to compile FreeType as a DLL on Windows and
3026 OS/2. Depending on the compiler used, a compiler-specific keyword
3027 like __export or __system must be placed before (VisualC++) or
3028 after (BorlandC++) the type..
3030 Of course, this needed a lot of changes throughout the source code
3031 to make it compile again... All cleaned up now, apparently..
3033 Note also that there is a new EXPORT_VAR macro defined to allow
3034 the _declaration_ of an exportable public (constant)
3035 variable. This is the case of the raster interfaces (see
3036 ftraster.h and ftgrays.h), as well as each module's interface (see
3037 sfdriver.h, psdriver.h, etc..)
3039 - new feature: it is now possible to pass extra parameters to font
3040 drivers when creating a new face object. For now,
3041 this capability is unused. It could however prove to
3042 be useful in a near future..
3044 the FT_Open_Args structure was changes, as well as the internal
3045 driver interface (the specific `init_face' module function has
3046 now a different signature).
3048 - updated the tutorial (not finished though).
3050 - updated the top-level BUILD document
3052 - fixed a potential memory leak that could occur when loading
3055 - added the declaration of FT_New_Memory_Face in
3056 <freetype/freetype.h>, as it was missing from the public header
3057 (the implementation was already in `ftobjs.c').
3059 - the file <freetype/fterrors.h> has been seriously updated in order
3060 to allow the automatic generation of error message tables. See
3061 the comments within it for more information.
3063 - major directory hierarchy re-organisation. This was done for two
3066 * first, to ease the `manual' compilation of the library by
3067 requiring at lot less include paths :-)
3069 * second, to allow external programs to effectively access
3070 internal data fields. For example, this can be extremely
3071 useful if someone wants to write a font producer or a font
3072 manager on top of FreeType.
3074 Basically, you should now use the 'freetype/' prefix for header
3077 #include <freetype/freetype.h>
3078 #include <freetype/ftglyph.h>
3080 Some new include sub-directories are available:
3082 a. the `freetype/config' directory, contains two files used to
3083 configure the build of the library. Client applications
3084 should not need to look at these normally, but they can if
3087 #include <freetype/config/ftoption.h>
3088 #include <freetype/config/ftconfig.h>
3090 b. the `freetype/internal' directory, contains header files that
3091 describes library internals. These are the header files that
3092 were previously found in the `src/base' and `src/shared'
3096 As usual, the build system and the demos have been updated to
3097 reflect the change..
3099 Here's a layout of the new directory hierarchy:
3128 Compiling a module is now much easier, for example, the following
3129 should work when in the TOP_DIR directory on an ANSI build:
3131 gcc -c -I./include -I./src/base src/base/ftbase.c
3132 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
3135 (of course, using -Iconfig/<system> if you provide system-specific
3136 configuration files).
3138 - updated the structure of FT_Outline_Funcs in order to allow direct
3139 coordinate scaling within the outline decomposition routine (this
3140 is important for virtual `on' points with TrueType outlines) +
3141 updates to the rasters to support this..
3143 - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
3144 order to support version 2 of the table (see OpenType 1.2 spec)
3146 - created `include/tttables.h' and `include/t1tables.h' to allow
3147 client applications to access some of the SFNT and T1 tables of a
3148 face with a procedural interface (see `FT_Get_Sfnt_Table') +
3149 updates to internal source files to reflect the change..
3151 - some cleanups in the source code to get rid of warnings when
3152 compiling with the `-Wall -W -ansi -pedantic' options in gcc.
3154 - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
3155 its header to `include/ftgrays.h'
3157 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
3158 with up to 80 sub-glyphs !! Thanks to Werner
3161 ======================================================================
3163 OLD CHANGES - 14-apr-2000
3165 - fixed a bug in the TrueType glyph loader that prevented the
3166 correct loading of some CJK glyphs in mingli.ttf
3168 - improved the standard Type 1 hinter in `src/type1'
3170 - fixed two bugs in the experimental Type 1 driver in `src/type1z'
3171 to handle the new XFree86 4.0 fonts (and a few other ones..)
3173 - the smooth renderer is now complete and supports sub-banding to
3174 render large glyphs at high speed. However, it is still located
3175 in `demos/src/ftgrays.c' and should move to the library itself in
3176 the next beta. NOTE: The smooth renderer doesn't compile in
3177 stand-alone mode anymore, but this should be fixed RSN..
3179 - introduced convenience functions to more easily deal with glyph
3180 images, see `include/ftglyph.h' for more details, as well as the
3181 new demo program named `demos/src/ftstring.c' that demonstrates
3184 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
3185 drivers (this is required by the auto-hinter to improve its
3188 - changed the raster interface, in order to allow client
3189 applications to provide their own span-drawing callbacks.
3190 However, only the smooth renderer supports this. See
3191 `FT_Raster_Params' in the file `include/ftimage.h'.
3193 - fixed a small bug in FT_MulFix that caused incorrect transform
3196 - Note: The tutorial is out-of-date.
3199 ======================================================================
3201 OLD CHANGES - 12-mar-2000
3203 - changed the layout of configuration files : now, all ANSI
3204 configuration files are located in
3205 `freetype2/config'. System-specific over-rides can be placed in
3206 `freetype2/config/<system>'.
3208 - moved all configuration macros to `config/ftoption.h'
3210 - improvements in the Type 1 driver with AFM support
3212 - changed the fields in the FT_Outline structure : the old `flags'
3213 array is re-named `tags', while all ancient flags are encoded into
3214 a single unsigned int named `flags'.
3216 - introduced new flags in FT_Outline.flags (see
3217 ft_outline_.... enums in `ftimage.h').
3219 - changed outline functions to `FT_Outline_<action>' syntax
3221 - added a smooth anti-alias renderer to the demonstration programs
3223 - added Mac graphics driver (thanks Just)
3225 - FT_Open_Face changed in order to received a pointer to a
3226 FT_Open_Args descriptor..
3228 - various cleanups, a few more API functions implemented (see
3234 ======================================================================
3236 OLD CHANGES - 22-feb-2000
3238 - introduced the `psnames' module. It is used to:
3240 o convert a Postscript glyph name into the equivalent Unicode
3241 character code (used by the Type 1 driver(s) to synthesize on
3242 the fly a Unicode charmap).
3244 o provide an interface to retrieve the Postscript names of the
3245 Macintosh, Adobe Standard & Adobe Expert character codes.
3246 (the Macintosh names are used by the SFNT-module postscript
3247 names support routines, while the other two tables are used by
3248 the Type 1 driver(s)).
3250 - introduced the `type1z' alternate Type 1 driver. This is a (still
3251 experimental) driver for the Type 1 format that will ultimately
3252 replace the one in `src/type1'. It uses pattern matching to load
3253 data from the font, instead of a finite state analyzer. It works
3254 much better than the `old' driver with `broken' fonts. It is also
3255 much smaller (under 15 Kb).
3257 - the Type 1 drivers (both in `src/type1' and `src/type1z') are
3258 nearly complete. They both provide automatic Unicode charmap
3259 synthesis through the `psnames' module. No re-encoding vector is
3260 needed. (note that they still leak memory due to some code
3261 missing, and I'm getting lazy).
3263 Trivial AFM support has been added to read kerning information but
3264 wasn't exactly tested as it should ;-)
3266 - The TrueType glyph loader has been seriously rewritten (see the
3267 file `src/truetype/ttgload.c'. It is now much, much simpler as
3268 well as easier to read, maintain and understand :-) Preliminary
3269 versions introduced a memory leak that has been reported by Jack
3270 Davis, and is now fixed..
3272 - introduced the new `ft_glyph_format_plotter', used to represent
3273 stroked outlines like Windows `Vector' fonts, and certain Type 1
3274 fonts like `Hershey'. The corresponding raster will be written
3277 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
3278 interface that uses a structure to describe the input stream, the
3279 driver (if required), etc..
3284 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
3286 - Add a function like FT_Load_Character(face, char_code, load_flags)
3287 that would really embed a call to FT_Get_Char_Index then
3288 FT_Load_Glyph to ease developer's work.
3290 - Update the tutorial!
3292 - consider adding support for Multiple Master fonts in the Type 1
3295 - Test the AFM routines of the Type 1 drivers to check that kerning
3296 information is returned correctly.
3298 - write a decent auto-gridding component !! We need this to release
3304 - add a CFF/Type2 driver
3306 - add a FNT/PCF/HBF driver
3307 - add a Speedo driver from the X11 sources
3310 ======================================================================
3312 OLDER CHANGES - 27-jan-2000
3314 - updated the `sfnt' module interface to allow several SFNT-based
3315 drivers to co-exist peacefully
3317 - updated the `T1_Face' type to better separate Postscript font
3318 content from the rest of the FT_Face structure. Might be used
3319 later by the CFF/Type2 driver..
3321 - added an experimental replacement Type 1 driver featuring advanced
3322 (and speedy) pattern matching to retrieve the data from postscript
3325 - very minor changes in the implementation of FT_Set_Char_Size and
3326 FT_Set_Pixel_Sizes (they now implement default to lighten the font
3330 ======================================================================
3334 This file summarizes the changes that occurred since the last `beta'
3335 of FreeType 2. Because the list is important, it has been divided into
3340 I High-Level Interface (easier !)
3341 II Directory Structure
3342 III Glyph Image Formats
3348 ----------------------------------------------------------------------
3350 High-Level Interface:
3352 The high-level API has been considerably simplified. Here is how:
3354 - resource objects have disappeared. this means that face objects
3355 can now be created with a single function call (see FT_New_Face
3358 - when calling either FT_New_Face & FT_Open_Face, a size object
3359 and a glyph slot object are automatically created for the face,
3360 and can be accessed through `face->glyph' and `face->size' if
3361 one really needs to. In most cases, there's no need to call
3362 FT_New_Size or FT_New_Glyph.
3364 - similarly, FT_Load_Glyph now only takes a `face' argument
3365 (instead of a glyph slot and a size). Also, its `result'
3366 parameter is gone, as the glyph image type is returned in the
3367 field `face->glyph.format'
3369 - the list of available charmaps is directly accessible through
3370 `face->charmaps', counting `face->num_charmaps' elements. Each
3371 charmap has an 'encoding' field which specifies which known
3372 encoding it deals with. Valid values are, for example:
3374 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
3375 ft_encoding_apple_roman
3377 ft_encoding_adobe_standard
3378 ft_encoding_adobe_expert
3380 other values may be added in the future. Each charmap still
3381 holds its `platform_id' and `encoding_id' values in case the
3382 encoding is too exotic for the current library
3385 ----------------------------------------------------------------------
3387 Directory Structure:
3389 Should seem obvious to most of you:
3392 config/ -- configuration sub-makefiles
3394 unix/ -- platform-specific configuration files
3399 include/ -- public header files, those to be included
3400 directly by client apps
3402 src/ -- sources of the library
3403 base/ -- the base layer
3404 sfnt/ -- the sfnt `driver' (see the drivers section
3406 truetype/ -- the truetype driver
3407 type1/ -- the type1 driver
3408 shared/ -- some header files shared between drivers
3410 demos/ -- demos/tools
3412 docs/ -- documentation (a bit empty for now)
3415 ----------------------------------------------------------------------
3417 Glyph Image Formats:
3419 Drivers are now able to register new glyph image formats within the
3420 library. For now, the base layer supports of course bitmaps and
3421 vector outlines, but one could imagine something different like
3422 colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
3425 See the file `include/ftimage.h'. Note also that the type
3426 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
3427 should encompass all known bitmap types.
3429 Each new image format must provide at least one `raster', i.e. a
3430 module capable of transforming the glyph image into a bitmap. It's
3431 also possible to change the default raster used for a given glyph
3434 The default outline scan-converter now uses 128 levels of grays by
3435 default, which tends to smooth many things. Note that the demo
3436 programs have been updated significantly in order to display these..
3439 ----------------------------------------------------------------------
3443 You still need GNU Make to build the library. The build system has
3444 been very seriously re-vamped in order to provide things like :
3446 - automatic host platform detection (reverting to 'config/ansi' if
3447 it is not detected, with pseudo-standard compilation flags)
3449 - the ability to compile from the Makefiles with very different and
3450 exotic compilers. Note that linking the library can be difficult
3453 For example, the file `config/win32/lcclib.bat' is invoked by the
3454 build system to create the `.lib' file with LCC-Win32 because its
3455 librarian has too many flaws to be invoked directly from the
3458 Here's how it works:
3460 - the first time you type `make', the build system runs a series of
3461 sub-makefiles in order to detect your host platform. It then
3462 dumps what it found, and creates a file called `config.mk' in the
3463 current directory. This is a sub-Makefile used to define many
3464 important Make variables used to build the library.
3466 - the second time, the build system detects the `config.mk' then use
3467 it to build the library. All object files go into 'obj' by
3468 default, as well as the library file, but this can easily be
3471 Note that you can run `make setup' to force another host platform
3472 detection even if a `config.mk' is present in the current
3473 directory. Another solution is simply to delete the file, then
3476 Finally, the default compiler for all platforms is gcc (for now,
3477 this will hopefully changed in the future). You can however specify
3478 a different compiler by specifying it after the 'setup' target as
3481 gnumake setup lcc on Win32 to use the LCC compiler
3482 gnumake setup visualc on Win32 to use Visual C++
3484 See the file `config/<system>/detect.mk' for a list of supported
3485 compilers for your platforms.
3487 It should be relatively easy to write new detection rules files and
3490 Finally, to build the demo programs, go to `demos' and launch GNU
3491 Make, it will use the `config.mk' in the top directory to build the
3495 ----------------------------------------------------------------------
3499 In the previous beta, a single FT_System object was used to
3500 encompass all low-level operations like thread synchronisation,
3501 memory management and i/o access. This has been greatly simplified:
3503 - thread synchronisation has been dropped, for the simple reason
3504 that the library is already re-entrant, and that if you really
3505 need two threads accessing the same FT_Library, you should
3506 really synchronize access to it yourself with a simple mutex.
3508 - memory management is performed through a very simple object
3509 called `FT_Memory', which really is a table containing a table
3510 of pointers to functions like malloc, realloc and free as well
3511 as some user data (closure).
3513 - resources have disappeared (they created more problems than they
3514 solved), and i/o management have been simplified greatly as a
3515 result. Streams are defined through FT_Stream objects, which
3516 can be either memory-based or disk-based.
3518 Note that each face has its own stream, which is closed only
3519 when the face object is destroyed. Hence, a function like
3520 TT_Flush_Face in 1.x cannot be directly supported. However, if
3521 you really need something like this, you can easily tailor your
3522 own streams to achieve the same feature at a lower level (and
3523 use FT_Open_Face instead of FT_New_Face to create the face).
3525 See the file `include/ftsystem.h' for more details, as well as the
3526 implementations found in `config/unix' and `config/ansi'.
3529 ----------------------------------------------------------------------
3533 The Font Driver interface has been modified in order to support
3534 extensions & versioning.
3537 The list of the font drivers that are statically linked to the
3538 library at compile time is managed through a new configuration file
3539 called `config/<platform>/ftmodule.h'.
3541 This file is autogenerated when invoking `make modules'. This
3542 target will parse all sub-directories of 'src', looking for a
3543 `module.mk' rules file, used to describe the driver to the build
3546 Hence, one should call `make modules' each time a font driver is
3547 added or removed from the `src' directory.
3549 Finally, this version provides a `pseudo-driver' in `src/sfnt'.
3550 This driver doesn't support font files directly, but provides
3551 services used by all TrueType-like font drivers. Hence, its code is
3552 shared between the TrueType & OpenType font formats, and possibly
3553 more formats to come if we're lucky..
3556 ----------------------------------------------------------------------
3560 The extensions support is inspired by the one found in 1.x.
3562 Now, each font driver has its own `extension registry', which lists
3563 which extensions are available for the font faces managed by the
3566 Extension ids are now strings, rather than 4-byte tags, as this is
3567 usually more readable.
3570 - some data, associated to each face object
3571 - an interface (table of function pointers)
3573 An extension that is format-specific should simply register itself
3574 to the correct font driver. Here is some example code:
3576 // Registering an extensions
3578 FT_Error FT_Init_XXXX_Extension( FT_Library library )
3580 FT_DriverInterface* tt_driver;
3582 driver = FT_Get_Driver( library, "truetype" );
3583 if (!driver) return FT_Err_Unimplemented_Feature;
3585 return FT_Register_Extension( driver, &extension_class );
3589 // Implementing the extensions
3591 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
3593 FT_XXX_Extension ext;
3594 FT_XXX_Extension_Interface ext_interface;
3596 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
3597 if (!ext) return error;
3599 return ext_interface->do_it(ext);
3602 ------------------------------------------------------------------------
3604 Copyright 2000-2011 by
3605 David Turner, Robert Wilhelm, and Werner Lemberg.
3607 This file is part of the FreeType project, and may only be used,
3608 modified, and distributed under the terms of the FreeType project
3609 license, LICENSE.TXT. By continuing to use, modify, or distribute this
3610 file you indicate that you have read the license and understand and
3615 version-control: never
3619 --- end of CHANGES ---