2 CHANGES BETWEEN 2.4.2 and 2.4.3
6 - Fix rendering of certain cubic, S-shaped arcs. This regression
7 has been introduced in version 2.4.0.
12 - To fix the above mentioned rendering issue, a new spline
13 flattening algorithm has been introduced which speeds up both
16 - Handling of broken fonts has been further improved.
19 ======================================================================
21 CHANGES BETWEEN 2.4.1 and 2.4.2
23 I. IMPORTANT BUG FIXES
25 - A stack overflow in CFF Type2 CharStrings interpreter is fixed.
27 - Handling Type 42 font deallocation was broken; additionally, the
28 library is now more robust against malformed Type 42 fonts.
33 - Two new functions, `FT_Reference_Library' (in FT_MODULE_H) and
34 `FT_Reference_Face' (in FT_FREETYPE_H), have been added to
35 simplify life-cycle management. A counter gets initialized to 1
36 at the time an FT_Library (or FT_Face) structure is created.
37 The two new functions increment the respective counter.
38 `FT_Done_Library' and `FT_Done_Face' then only destroy a library
39 or face if the counter is 1, otherwise they simply decrement the
43 ======================================================================
45 CHANGES BETWEEN 2.4.0 and 2.4.1
49 - A serious bug in the CFF font module prevented display of many
50 glyphs in CFF fonts like `MinionPro-Regular.otf'.
53 ======================================================================
55 CHANGES BETWEEN 2.3.12 and 2.4.0
59 - Since May 2010, all patents regarding the TrueType bytecode
60 interpreter have expired worldwide. Consequently, we now define
61 TT_CONFIG_OPTION_BYTECODE_INTERPRETER by default (and undefine
62 TT_CONFIG_OPTION_UNPATENTED_HINTING).
64 - A new function `FT_Library_SetLcdFilterWeights' is available to
65 adjust the filter weights set by `FT_Library_SetLcdFilter'.
70 - Thanks to many reports from Robert Święcki, FreeType's stability
71 in handling broken or damaged fonts is much improved.
73 - Support for LCD filter control has been added to the demo
74 programs `ftdiff' and `ftview'.
77 ======================================================================
79 CHANGES BETWEEN 2.3.11 and 2.3.12
83 - For `FT_Open_Face', new parameters are available to ignore
84 preferred family names: FT_PARAM_TAG_IGNORE_PREFERRED_FAMILY and
85 FT_PARAM_TAG_IGNORE_PREFERRED_SUBFAMILY.
90 - Support for incremental font loading (controlled with the
91 FT_CONFIG_OPTION_INCREMENTAL macro) is now active by default.
93 - Better support for vertical metrics.
95 - Various minor bug fixes.
98 ======================================================================
100 CHANGES BETWEEN 2.3.10 and 2.3.11
102 I. IMPORTANT BUG FIXES
104 - Version 2.3.10 broke PCF support.
107 ======================================================================
109 CHANGES BETWEEN 2.3.10 and 2.3.9
111 I. IMPORTANT BUG FIXES
113 - If all ASCII digits in a font have the same (unscaled) width,
114 the autohinter respects this and won't change it.
116 - TrueType fonts are now rasterized correctly if the horizontal
117 and vertical resolution differ.
119 - Type 1 fonts are now handled with increased precision internally
120 to avoid serious rounding issues if non-integral coordinates are
123 - Horizontally condensed CFF fonts (using the font matrix) were
124 rendered incorrectly. This bug has been introduced after
128 II. IMPORTANT CHANGES
130 - Support for the SFNT cmap 13 table format (as defined by the new
131 OpenType 1.6 specification) has been added.
133 - B/W rasterization of well-hinted TrueType fonts at small sizes
134 has been greatly improved.
136 - Calculation of vertical metrics in OpenType fonts has been
142 - It is now possible to change the emboldening factor in the
143 `ftview' demo program with keys `e' and `E'.
145 - It is now possible to change the slant value in the `ftview'
146 demo program with keys `s' and `S'.
148 - The 5-levels grayscale mode of the `ftraster' module (which
149 FreeType doesn't use by default) was broken since version 2.3.0.
151 - Compilation of the `ftgrays' and `ftraster' modules was broken
154 - Various fixes for compilation on 64bit and 16bit architectures.
157 ======================================================================
159 CHANGES BETWEEN 2.3.9 and 2.3.8
161 I. IMPORTANT BUG FIXES
163 - Very unfortunately, FreeType 2.3.8 contained a change that broke
164 its official ABI. The end result is that programs compiled
165 against previous versions of the library, but dynamically linked
166 to 2.3.8 can experience memory corruption if they call the
167 `FT_Get_PS_Font_Info' function.
169 We recommend all users to upgrade to 2.3.9 as soon as possible,
170 or to downgrade to a previous release of the library if this is
173 The origin of the bug is that a new field was added to the
174 publicly defined `PS_FontInfoRec' structure. Unfortunately,
175 objects of this type can be stack or heap allocated by callers
176 of `FT_Get_PS_Font_Info', resulting in a memory buffer
177 overwrite with its implementation in 2.3.8.
179 If you want to know whether your code is vulnerable to this
180 issue, simply search for the substrings `PS_FontInfo' and
181 `PS_Font_Info' in your source code. If none is found, your code
182 is safe and is not affected.
184 The FreeType team apologizes for the problem.
186 - The POSIX support of MacOS resource-fork fonts (Suitcase fonts
187 and LaserWriter Type1 PostScript fonts) was broken in 2.3.8. If
188 FreeType2 is built without Carbon framework, these fonts are not
189 handled correctly. Version 2.3.7 didn't have this bug.
191 - `FT_Get_Advance' (and `FT_Get_Advances') returned bad values for
192 almost all font formats except TrueType fonts.
194 - Fix a bug in the SFNT kerning table loader/parser which could
195 crash the engine if certain malformed tables were encountered.
197 - Composite SFNT bitmaps are now handled correctly.
200 II. IMPORTANT CHANGES
202 - The new functions `FT_Get_CID_Is_Internally_CID_keyed' and
203 `FT_Get_CID_From_Glyph_Index' can be used to access CID-keyed
204 CFF fonts via CID values. This code has been contributed by
210 - `FT_Outline_Get_InsideBorder' returns FT_STROKER_BORDER_RIGHT
211 for empty outlines. This was incorrectly documented.
213 - The `ftview' demo program now supports UTF-8 encoded strings.
216 ======================================================================
218 CHANGES BETWEEN 2.3.8 and 2.3.7
220 I. IMPORTANT BUG FIXES
222 - CID-keyed fonts in an SFNT wrapper were not handled correctly.
224 - The smooth renderer produced truncated images (on the right) for
225 outline parts with negative horizontal values. Most fonts don't
226 contain outlines left to the y coordinate axis, but the effect
227 was very noticeable for outlines processed with FT_Glyph_Stroke,
230 - `FT_Get_TrueType_Engine_Type' returned a wrong value if both
231 configuration macros TT_CONFIG_OPTION_BYTECODE_INTERPRETER and
232 TT_CONFIG_OPTION_UNPATENTED_HINTING were defined.
234 - The `face_index' field in the `FT_Face' structure wasn't
235 initialized properly after calling FT_Open_Face and friends with
236 a positive face index for CFFs, WinFNTs, and, most importantly,
237 for TrueType Collections (TTCs).
240 II. IMPORTANT CHANGES
242 - Rudimentary support for Type 1 fonts and CID-keyed Type 1 fonts
243 in an SFNT wrapper has been added -- such fonts are used on the
244 Mac. The core SFNT tables `TYP1' and `CID ' are passed to the
245 PS Type 1 and CID-keyed PS font drivers; other tables (`ALMX',
246 `BBOX', etc.) are not supported yet.
248 - A new interface to extract advance values of glyphs without
249 loading their outlines has been added. The functions are called
250 `FT_Get_Advance' and `FT_Get_Advances'; they are defined in file
251 `ftadvanc.h' (to be accessed as FT_ADVANCES_H).
253 - A new function `FT_Get_FSType_Flags' (in FT_FREETYPE_H) has been
254 contributed by David Bevan to access the embedding and
255 subsetting restriction information of fonts.
260 - FT_MulFix is now an inlined function; by default, assembler code
261 is provided for x86 and ARM. See FT_CONFIG_OPTION_INLINE_MULFIX
262 and FT_CONFIG_OPTION_NO_ASSEMBLER (in ftoption.h) for more.
264 - The handling of `tricky' fonts (this is, fonts which don't work
265 with the autohinter, needing the font format's hinting engine)
266 has been generalized and changed slightly:
268 . A new face flag FT_FACE_FLAG_TRICKY indicates that the font
269 format's hinting engine is necessary for correct rendering.
270 The macro FT_IS_TRICKY can be used to check this flag.
272 . FT_LOAD_NO_HINTING is now ignored for tricky fonts. To really
273 force raw loading of such fonts (without hinting), both
274 FT_LOAD_NO_HINTING and FT_LOAD_NO_AUTOHINT must be used --
275 this is something which you probably never want to do.
277 . Tricky TrueType fonts always use the bytecode interpreter,
278 either the patented or unpatented version.
280 - The function `FT_GlyphSlot_Own_Bitmap' has been moved from
281 FT_SYNTHESIS_H to FT_BITMAP_H; it is now part of the `official'
282 API. (The functions in FT_SYNTHESIS_H are still subject to
285 - In the `ftdiff' demo program you can now toggle the use of
286 FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH with key `a'.
289 ======================================================================
291 CHANGES BETWEEN 2.3.7 and 2.3.6
293 I. IMPORTANT BUG FIXES
295 - If the library was compiled on an i386 platform using gcc, and
296 compiler option -O3 was given, `FT_MulFix' sometimes returned
297 incorrect results which could have caused problems with
298 `FT_Request_Metrics' and `FT_Select_Metrics', returning an
299 incorrect descender size.
301 - Pure CFFs without subfonts were scaled incorrectly if the font
302 matrix was non-standard. This bug has been introduced in
305 - The `style_name' field in the `FT_FaceRec' structure often
306 contained a wrong value for Type 1 fonts. This misbehaviour
307 has been introduced in version 2.3.6 while trying to fix
308 another problem. [Note, however, that this value is
309 informative only since the used algorithm to extract it is
313 II. IMPORTANT CHANGES
315 - Two new macros, FT_OUTLINE_SMART_DROPOUTS and
316 FT_OUTLINE_EXCLUDE_STUBS, have been introduced. Together with
317 FT_OUTLINE_IGNORE_DROPOUTS (which was ignored previously) it is
318 now possible to control the dropout mode of the `raster' module
319 (for B&W rasterization), using the `flags' field in the
320 `FT_Outline' structure.
322 - The TrueType bytecode interpreter now passes the dropout mode to
323 the B&W rasterizer. This greatly increases the output for small
324 ppem values of many fonts like `pala.ttf'.
327 ======================================================================
329 CHANGES BETWEEN 2.3.6 and 2.3.5
331 I. IMPORTANT BUG FIXES
333 - A bunch of potential security problems have been found. All
336 - Microsoft Unicode cmaps in TrueType fonts are now always
337 preferred over Apple cmaps. This is not a bug per se, but there
338 exist some buggy fonts created for MS which have broken Apple
339 cmaps. This affects only the automatic selection of FreeType;
340 it's always possible to manually select an Apple Unicode cmap if
343 - Many bug fixes to the TrueType bytecode interpreter.
345 - Improved Mac support.
347 - Subsetted CID-keyed CFFs are now supported correctly.
349 - CID-keyed CFFs with subfonts which are scaled in a non-standard
350 way are now handled correctly.
352 - A call to FT_Open_Face with `face_index' < 0 crashed FreeType if
353 the font was a Windows (bitmap) FNT/FON.
356 II. IMPORTANT CHANGES
358 - The new function `FT_Get_CID_Registry_Ordering_Supplement' gives
359 access to those fields in a CID-keyed font. The code has been
360 contributed by Derek Clegg.
362 - George Williams contributed code to validate the new `MATH'
363 OpenType table (within the `otvalid' module). The `ftvalid'
364 demo program has been extended accordingly.
366 - An API for cmap 14 support (for Unicode Variant Selectors, UVS)
367 has been contributed by George Williams.
369 - A new face flag FT_FACE_FLAG_CID_KEYED has been added, together
370 with a macro FT_IS_CID_KEYED which evaluates to 1 if the font is
376 - Build support for symbian has been contributed.
378 - Better WGL4 glyph name support, contributed by Sergey Tolstov.
380 - Debugging output of the various FT_TRACEX macros is now sent to
383 - The `ftview' demo program now provides artificial slanting too.
385 - The `ftvalid' demo program has a new option `-f' to select the
389 ======================================================================
391 CHANGES BETWEEN 2.3.5 and 2.3.4
393 I. IMPORTANT BUG FIXES
395 - Some subglyphs in TrueType fonts were handled incorrectly due to
396 a missing graphics state reinitialization.
398 - Large .Z files (as distributed with some X11 packages) weren't
399 handled correctly, making FreeType increase the heap stack in an
402 - A large number of bugs have been fixed to avoid crashes and
403 endless loops with invalid fonts.
406 II. IMPORTANT CHANGES
408 - The two new cache functions `FTC_ImageCache_LookupScaler' and
409 `FTC_SBit_Cache_LookupScaler' have been added to allow lookup of
410 glyphs using an `FTC_Scaler' object; this makes it possible to
411 use fractional pixel sizes in the cache. The demo programs have
412 been updated accordingly to use this feature.
414 - A new API `FT_Get_CMap_Format' has been added to get the cmap
415 format of a TrueType font. This is useful in handling PDF
416 files. The code has been contributed by Derek Clegg.
418 - The auto-hinter now produces better output by default for
419 non-Latin scripts like Indic. This was done by using the CJK
420 hinting module as the default instead of the Latin one. Thanks
421 to Rahul Bhalerao for this suggestion.
423 - A new API `FT_Face_CheckTrueTypePatents' has been added to find
424 out whether a given TrueType font uses patented bytecode
425 instructions. The `ft2demos' bundle contains a new program
426 called `ftpatchk' which demonstrates its usage.
428 - A new API `FT_Face_SetUnpatentedHinting' has been added to
429 enable or disable the unpatented hinter.
431 - Support for Windows FON files in PE format has been contributed
437 - Vincent Richomme contributed Visual C++ project files for Pocket
441 ======================================================================
443 CHANGES BETWEEN 2.3.4 and 2.3.3
445 I. IMPORTANT BUG FIXES
447 - A serious bug in the handling of bitmap fonts (and bitmap
448 strikes of outline fonts) has been introduced in 2.3.3.
451 ======================================================================
453 CHANGES BETWEEN 2.3.3 and 2.3.2
455 I. IMPORTANT BUG FIXES
457 - Remove a serious regression in the TrueType bytecode interpreter
458 that was introduced in version 2.3.2. Note that this does not
459 disable the improvements introduced to the interpreter in
460 version 2.3.2, only some ill cases that occurred with certain
461 fonts (though a few popular ones).
463 - The auto-hinter now ignores single-point contours for computing
464 blue zones. This bug created `wavy' baselines when rendering
465 text with various fonts that use these contours to model
466 mark-attach points (these are points that are never rasterized
467 and are placed outside of the glyph's real outline).
469 - The `rsb_delta' and `lsb_delta' glyph slot fields are now set to
470 zero for mono-spaced fonts. Otherwise code that uses them would
471 essentially ruin the fixed-advance property.
473 - Fix CVE-2007-1351 which can cause an integer overflow while
474 parsing BDF fonts, leading to a potentially exploitable heap
480 - Fixed compilation issues on some 64-bit platforms (see ChangeLog
483 - A new demo program `ftdiff' has been added to compare TrueType
484 hinting, FreeType's auto hinting, and rendering without hinting
488 ======================================================================
490 CHANGES BETWEEN 2.3.2 and 2.3.1
492 I. IMPORTANT BUG FIXES
494 - FreeType returned incorrect kerning information from TrueType
495 fonts when the bytecode interpreter was enabled. This happened
496 due to a typo introduced in version 2.3.0.
498 - Negative kerning values from PFM files are now reported
499 correctly (they were read as 16-bit unsigned values from the
502 - Fixed a small memory leak when `FT_Init_FreeType' failed for
505 - The Postscript hinter placed and sized very thin and ghost stems
508 - The TrueType bytecode interpreter has been fixed to get rid of
509 most of the rare differences seen in comparison to the Windows
513 II. IMPORTANT CHANGES
515 - The auto-hinter now better deals with serifs and corner cases
516 (e.g., glyph '9' in Arial at 9pt, 96dpi). It also improves
517 spacing adjustments and doesn't change widths for non-spacing
520 - Many Mac-specific functions are deprecated (but still
521 available); modern replacements have been provided for them.
522 See the documentation in file `ftmac.h'.
525 ======================================================================
527 CHANGES BETWEEN 2.3.1 and 2.3.0
529 I. IMPORTANT BUG FIXES
531 - The TrueType interpreter sometimes returned incorrect horizontal
532 metrics due to a bug in the handling of the SHZ instruction.
534 - A typo in a security check introduced after version 2.2.1
535 prevented FreeType to render some glyphs in CFF fonts.
538 ======================================================================
540 CHANGES BETWEEN 2.3.0 and 2.2.1
542 I. IMPORTANT BUG FIXES
544 - The PCF font loader is now much more robust while loading
545 malformed font files.
547 - Various memory leaks have been found and fixed.
549 - The TrueType name loader now deals properly with some fonts that
550 encode their names in UTF-16 (the specification was vague, and
551 the code incorrectly assumed UCS-4).
553 - Fixed the TrueType bytecode loader to deal properly with subtle
554 monochrome/gray issues when scaling the CVT. Some fonts
555 exhibited bad rendering artifacts otherwise.
557 - `FT_GlyphSlot_Embolden' now supports vertical layouts correctly
558 (it mangled the vertical advance height).
560 - Fixed byte endian issues of `ftmac.c' to support Mac OS X on
563 - The PFR font loader no longer erroneously tags font files
564 without any outlines as FT_FACE_FLAG_SCALABLE.
567 II. NEW API FUNCTIONS
569 - `FT_Library_SetLcdFilter' allows you to select a special filter
570 to be applied to the bitmaps generated by `FT_Render_Glyph' if
571 one of the FT_RENDER_MODE_LCD and FT_RENDER_MODE_LCD_V modes has
572 been selected. This filter is used to reduce color fringes;
573 several settings are available through the FT_LCD_FILTER_XXX
576 Its declaration and documentation can be found in file
577 `include/freetype/ftlcdfil.h' (to be accessed with macro
580 *IMPORTANT*: This function returns an error
581 (FT_Err_Unimplemented_Feature) in default builds of the library
582 for patent reasons. See below.
584 - `FT_Get_Gasp' allows you to query the flags of the TrueType
585 `gasp' table for a given character pixel size. This is useful
586 to duplicate the text rendering of MS Windows when the native
587 bytecode interpreter is enabled (which isn't the default for
588 other patent reasons).
590 Its declaration and documentation can be found in file
591 `include/freetype/ftgasp.h' (to be accessed with macro
595 III. IMPORTANT CHANGES
597 - The auto-hinter has been tuned a lot to improve its results with
598 serif fonts, resulting in much better font rendering of many web
601 - The unpatented hinter is now part of the default build of the
602 library; we have added code to automatically support `tricky'
605 This means that FreeType should `just work' with certain Asian
606 fonts, like MingLiU, which cannot properly be loaded without a
607 bytecode interpreter, but which fortunately do not use any of
608 the patented bytecode opcodes. We detect these fonts by name,
609 so please report any font file that doesn't seem to work with
610 FreeType, and we shall do what we can to support it in a next
613 Note that the API hasn't changed, so you can still force
614 unpatented hinting with a special parameter to `FT_Open_Face' as
615 well. This might be useful in same cases; for example, a PDF
616 reader might present a user option to activate it to deal with
617 certain `tricky' embedded fonts which cannot be clearly
620 If you are a developer for embedded systems, you might want to
621 *disable* the feature to save code space by undefining
622 TT_CONFIG_OPTION_UNPATENTED_HINTING in file `ftoption.h'.
624 - LCD-optimized rendering is now *disabled* in all default builds
625 of the library, mainly due to patent issues. For more
628 http://lists.gnu.org/archive/html/freetype/2006-09/msg00064.html
630 A new configuration macro FT_CONFIG_OPTION_SUBPIXEL_RENDERING
631 has been introduced in `ftoption.h'; manually define it in this
632 file if you want to re-enable the feature.
634 The change only affects the implementation, not the FreeType
635 API. This means that clients don't need to be modified, because
636 the library still generates LCD decimated bitmaps, but with the
637 added constraint that R=G=B on each triplet.
639 The displayed result should be equal to normal anti-aliased
642 Additionally, if FT_CONFIG_OPTION_SUBPIXEL_RENDERING is not
643 defined, the new `FT_Library_SetLcdFilter' function returns the
644 FT_Err_Unimplemented_Feature error code.
646 - Some computation bugs in the TrueType bytecode interpreter were
647 found, which allow us to get rid of very subtle and rare
648 differences we had experienced with the Windows renderer.
650 - It is now possible to cross-compile the library easily. See the
651 file `docs/INSTALL.CROSS' for details.
653 - The file `src/base/ftmac.c' now contains code for Mac OS X only;
654 its deprecated function `FT_GetFile_From_Mac_Font_Name' always
655 returns an error even if the QuickDraw framework is available.
656 The previous version has been moved to `builds/mac/ftmac.c'.
658 Selecting configure option `--with-quickdraw-carbon' makes the
659 build process use the original `ftmac.c' file instead of the Mac
665 - Various performance and memory footprint optimizations have been
666 performed on the TrueType and CFF font loaders, sometimes with
667 very drastic benefits (e.g., the TrueType loader is now about
668 25% faster; FreeType should use less heap memory under nearly
671 - The anti-aliased rasterizer has been optimized and is now 15% to
672 25% percent faster than in previous versions, depending on
675 - The Type 1 loader has been improved; as an example, it now skips
676 top-level dictionaries properly.
678 - Better support for Mac fonts on POSIX systems, plus compilation
679 fixes for Mac OS X on ppc64 where `ftmac.c' cannot be built.
681 - Configuration without `--with-old-mac-fonts' does not include
682 `ftmac.c' (this was the behaviour in FreeType version 2.1.10).
684 - The TrueTypeGX validator (gxvalid) checks the order of glyph IDs
688 ======================================================================
690 CHANGES BETWEEN 2.2.1 and 2.2
692 I. IMPORTANT BUG FIXES
694 - Various integer overflows have been fixed.
696 - PFB fonts with MacOS resource fork weren't handled correctly on
700 ======================================================================
702 CHANGES BETWEEN 2.2 and 2.1.10
704 (not released officially)
706 I. IMPORTANT BUG FIXES
708 - Vertical metrics for SFNT fonts were incorrect sometimes.
710 - The FT_HAS_KERNING macro always returned 0.
712 - CFF OpenType fonts didn't return correct vertical metrics for
713 glyphs with outlines.
715 - If FreeType was compiled without hinters, all font formats based
716 on PS outlines weren't scaled correctly.
719 II. IMPORTANT CHANGES
721 - Version 2.2 no longer exposes its internals, this is, the header
722 files located in the `include/freetype/internal' directory of
723 the source package are not copied anymore by the `make install'
724 command. Consequently, a number of rogue clients which directly
725 access FreeType's internal functions and structures won't
726 compile without modification.
728 We provide patches for most of those rogue clients. See the
729 following page for more information:
731 http://www.freetype.org/freetype2/patches/rogue-patches.html
733 Note that, as a convenience to our Unix desktop users, version
734 2.2 is *binary* compatible with FreeType 2.1.7, which means that
735 installing this release on an existing distribution shall not
736 break any working desktop.
738 - FreeType's build mechanism has been redesigned. With GNU make
739 it is now sufficient in most cases to edit two files:
740 `modules.cfg', to select the library components, and the
741 configuration file `include/freetype/config/ftoption.h' (which
742 can be copied to the objects directory). Removing unused module
743 directories to prevent its compilation and editing
744 `include/freetype/config/ftmodule.h' is no longer necessary.
746 - The LIGHT hinting algorithm produces more pleasant results.
747 Also, using the FT_LOAD_TARGET_LIGHT flags within FT_Load_Glyph
748 always forces auto-hinting, as a special exception. This allows
749 you to experiment with it even if you have enabled the TrueType
750 bytecode interpreter in your build.
752 - The auto hinter now employs a new algorithm for CJK fonts, based
753 on Akito Hirai's patch. Note that this only works for fonts
754 with a Unicode charmap at the moment.
756 - The following callback function types have changed slightly (by
757 adding the `const' keyword where appropriate):
759 FT_Outline_MoveToFunc
760 FT_Outline_LineToFunc
761 FT_Outline_ConicToFunc
762 FT_Outline_CubicToFunc
766 FT_Glyph_TransformFunc
767 FT_Renderer_RenderFunc
768 FT_Renderer_TransformFunc
770 Note that this doesn't affect binary backward compatibility.
772 - On MacOS, new APIs have been added as replacements for legacy
773 APIs: `FT_New_Face_From_FSRef' for `FT_New_Face_From_FSSpec',
774 and `FT_GetFile_From_Mac_ATS_Name' for
775 `FT_GetFile_From_Mac_Name'. Legacy APIs are still available, if
776 FreeType is built without disabling them.
778 - A new API `FT_Select_Size' has been added to select a bitmap
779 strike by its index. Code using other functions to select
780 bitmap strikes should be updated to use this function.
782 - A new API `FT_Get_SubGlyph_Info' has been added to retrieve
783 subglyph data. This can be used by rogue clients which used to
784 access the internal headers to get the corresponding data.
786 - In 2.1.10, the behaviour of `FT_Set_Pixel_Sizes' was changed for
787 BDF/PCF fonts, and only for them. This causes inconsistency.
788 In this release, we undo the change. The intent of the change
789 in 2.1.10 is to allow size selection through real dimensions,
790 which can now be done through `FT_Request_Size'.
792 - Some security issues were discovered and fixed in the CFF and
793 Type 1 loader, causing crashes of FreeType by malformed font
799 - The documentation for FT_LOAD_TARGET_XXX and FT_RENDER_MODE_XXX
800 values now better reflects its usage and differences: One set is
801 used to specify the hinting algorithm, the other to specify the
802 pixel rendering mode.
804 - `FT_New_Face' and `FT_New_Face_From_FSSpec' in ftmac.c have been
805 changed to count supported scalable faces (sfnt, LWFN) only, and
806 to return the number of available faces via face->num_faces.
807 Unsupported bitmap faces (fbit, NFNT) are ignored.
809 - builds/unix/configure has been improved for MacOS X. It now
810 automatically checks available functions in Carbon library, and
811 prepare to use newest functions by default. Options to specify
812 the dependencies of each Carbon APIs (FSSpec, FSRef, old/new
813 QuickDraw, ATS) are available too. By manual disabling of all
814 QuickDraw functionality, FreeType can be built without
815 `deprecated function' warnings on MacOS 10.4.x, but
816 FT_GetFile_Mac_Name in ftmac.c then is changed to a dummy
817 function, and returns an `unimplemented' error. For details see
820 - SFNT cmap handling has been improved, mainly to run much faster
823 - A new function `FT_Get_TrueType_Engine_Type (declared in
824 `FT_MODULE_H') is provided to determine the status of the
825 TrueType bytecode interpreter compiled into the library
826 (patented, unpatented, unimplemented).
828 - Vertical metrics of glyphs are synthesized if the font does not
829 provide such information. You can tell whether the metrics are
830 synthesized or not by checking the FT_FACE_FLAG_VERTICAL flag of
833 - The demo programs `ftview' and `ftstring' have been rewritten
834 for better readability. `ftview' has a new switch `-p' to test
835 FT_New_Memory_Face (instead of FT_New_Face).
837 - FreeType now honours bit 1 in the `head' table of TrueType fonts
838 (meaning `left sidebearing point at x=0'). This helps with some
841 - Rudimentary support for Adobe's new `SING Glyphlet' format. See
843 http://www.adobe.com/products/indesign/sing_gaiji.html
845 for more information.
847 - The `ftdump' program from the `ft2demos' bundle now shows some
848 information about charmaps. It also supports a new switch `-v'
849 to increase verbosity.
851 - Better AFM support. This includes track kerning support.
854 ======================================================================
856 CHANGES BETWEEN 2.1.10 and 2.1.9
858 I. IMPORTANT BUG FIXES
860 - The size comparison for BDF and PCF files could fail sometimes.
862 - Some CFF files were still not loaded correctly. Patch from
865 - The stroker still had some serious bugs.
867 - Boris Letocha fixed a bug in the TrueType interpreter: The
868 NPUSHW instruction wasn't skipped correctly in IF clauses. Some
869 fonts like `Helvetica 75 Bold' failed.
871 - Another serious bug in handling TrueType hints caused many
872 distortions. It has been introduced in version 2.1.8, and it is
873 highly recommended to upgrade.
875 - FreeType didn't properly parse empty Type 1 glyphs.
877 - An unbound dynamic buffer growth was fixed in the PFR loader.
879 - Several bugs have been fixed in the cache sub-system.
881 - FreeType behaved incorrectly when resizing two distinct but very
882 close character pixel sizes through `FT_Set_Char_Size' (Savannah
885 - The auto-hinter didn't work properly for fonts without a Unicode
886 charmap -- it even refused to load the glyphs.
889 II. IMPORTANT CHANGES
891 - Many fixes have been applied to drastically reduce the amount of
892 heap memory used by FreeType, especially when using
893 memory-mapped font files (which is the default on Unix systems
896 - The auto-hinter has been replaced with a new module, called the
897 `auto-fitter'. It consumes less memory than its predecessor,
898 and it is prepared to support non-latin scripts better in next
901 - George Williams contributed code to read kerning data from PFM
904 - FreeType now uses the TT_NAME_ID_PREFERRED_FAMILY and
905 TT_NAME_ID_PREFERRED_SUBFAMILY strings (if available) for
906 setting family and style in SFNT fonts (patch from Kornfeld
909 - A new API `FT_Sfnt_Table_Info' (in FT_TRUETYPE_TABLES_H) has
910 been added to retrieve name and size information of SFNT tables.
912 - A new API `FT_OpenType_Validate' (in FT_OPENTYPE_VALIDATE_H) has
913 been added to validate OpenType tables (BASE, GDEF, GPOS, GSUB,
914 JSTF). After validation it is no longer necessary to check
915 for errors in those tables while accessing them.
917 Note that this module might be moved to another library in the
918 future to avoid a tight dependency between FreeType and the
919 OpenType specification.
921 - A new API in FT_BITMAP_H (`FT_Bitmap_New', `FT_Bitmap_Convert',
922 `FT_Bitmap_Copy', `FT_Bitmap_Embolden', `FT_Bitmap_Done') has
923 been added. Its use is to convert an FT_Bitmap structure in
924 1bpp, 2bpp, 4bpp, or 8bpp format into another 8bpp FT_Bitmap,
925 probably using a different pitch, and to further manipulate it.
927 - A new API `FT_Outline_Embolden' (in FT_OUTLINE_H) gives finer
928 control how outlines are embolded.
930 - `FT_GlyphSlot_Embolden' (in FT_SYNTHESIS_H) now handles bitmaps
931 also (code contributed by Chia I Wu). Note that this function
932 is still experimental and may be replaced with a better API.
934 - The method how BDF and PCF bitmap fonts are accessed has been
935 refined. Formerly, FT_Set_Pixel_Sizes and FT_Set_Char_Size
936 were synonyms in FreeType's BDF and PCF interface. This has
937 changed now. FT_Set_Pixel_Sizes should be used to select the
938 actual font dimensions (the `strike', which is the sum of the
939 `FONT_ASCENT' and `FONT_DESCENT' properties), while
940 FT_Set_Char_Size selects the `nominal' size (the `PIXELSIZE'
941 property). In both functions, the width parameter is ignored.
946 - The BDF driver no longer converts all returned bitmaps with a
947 depth of 2bpp or 4bpp to a depth of 8bpp. The documentation has
948 not mentioned this explicitly, but implementors might have
949 relied on this after looking into the source files.
951 - A new option `--ftversion' has been added to freetype-config to
952 return the FreeType version.
954 - The memory debugger has been updated to dump allocation
955 statistics on all allocation sources in the library. This is
956 useful to spot greedy allocations when loading and processing
959 - We removed a huge array of constant pointers to constant strings
960 in the `psnames' module. The problem was that compilations in
961 PIC mode (i.e., when generating a Unix shared object/dll) put
962 the array into the non-shared writable section of the library
963 since absolute pointers are not relocatable by nature.
965 This reduces the memory consumption by approximately 16KByte per
966 process linked to FreeType. We now also store the array in a
967 compressed form (as a trie) which saves about 20KByte of code as
970 - Kirill Smelkov provided patches to make src/raster/ftraster.c
971 compile stand-alone again.
974 ======================================================================
976 CHANGES BETWEEN 2.1.9 and 2.1.8
978 I. IMPORTANT BUG FIXES
980 - The function `FT_Get_CharMap_Index' was only declared, without
981 any real code. For consistency, it has been renamed to
982 `FT_Get_Charmap_Index'. (This function is needed to implement
985 - `FT_Outline_Get_BBox' sometimes returned incorrect values for
986 conic outlines (e.g., for TrueType fonts).
988 - Handling of `bhed' table has been fixed.
990 - The TrueType driver with enabled byte code interpreter sometimes
991 returned artifacts due to incorrect rounding. This bug has been
992 introduced after version 2.1.4.
994 - The BDF driver dropped the last glyph in the font.
996 - The BDF driver now uses the DEFAULT_CHAR property (if available)
997 to select a glyph shape for the undefined glyph.
999 - The stroker failed for closed outlines and single points.
1002 II. IMPORTANT CHANGES
1004 - George Williams contributed code to handle Apple's font
1005 distortion technology found in GX fonts (`avar', `cvar', `fvar',
1006 and `gvar' tables; the Multiple Masters API has been slightly
1007 extended to cope with the new functionality).
1009 - The `FT_GlyphSlotRec' structure has been extended: The elements
1010 `lsb_delta' and `rsb_delta' give the difference between hinted
1011 and unhinted left and right side bearings if autohinting is
1012 active. Using those values can improve the inter-letter spacing
1013 considerably. See the documentation of `FT_GlyphSlotRec' and
1014 the `ftstring' demo program how to use it.
1016 - Loading TrueType and Type 1 fonts has been made much faster.
1018 - The stroker is no longer experimental (but the cache subsystem
1024 - A new documentation file `formats.txt' describes various font
1025 formats supported (and not supported) by FreeType.
1028 ======================================================================
1030 CHANGES BETWEEN 2.1.8 and 2.1.7
1032 I. IMPORTANT BUG FIXES
1034 - The native TrueType hinter contained some bugs which prevented
1035 some fonts to be rendered correctly, most notably Legendum.otf.
1037 - The PostScript hinter now produces improved results.
1039 - The linear advance width and height values were incorrectly
1040 rounded, making them virtually unusable if not loaded with
1041 FT_LOAD_LINEAR_DESIGN.
1043 - Indexing CID-keyed CFF fonts is now working: The glyph index is
1044 correctly treated as a CID, similar to FreeType's CID driver
1045 module. Note that CID CMap support is still missing.
1047 - The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
1050 - Some subsetted Type 1 fonts weren't parsed correctly. This bug
1051 has been introduced in 2.1.7. In summary, the Type 1 parser has
1054 - Non-decimal numbers weren't parsed correctly in PS fonts.
1056 - The WinFNT driver now correctly reports FT_ENCODING_NONE for all
1057 but one encoding. Use the new FT_WinFNT_ID_XXX values together
1058 with `FT_Get_WinFNT_Header' to get the WinFNT charset ID.
1060 - The descender metrics (face->size->metrics.descender) for WinFNT
1061 bitmap fonts had the wrong sign.
1063 - The (emulated) `seac' support for CFF fonts was broken.
1065 - The `flex' operator didn't work for CFF fonts.
1067 - PS glyphs which use the `hintmask' operator haven't been
1068 rendered correctly in some cases.
1070 - Metrics for BDF and PCF bitmap font formats have been fixed.
1072 - Autohinting is now disabled for glyphs which are vertically
1073 distorted or mirrored (using a transformation matrix). This
1074 fixes a bug which produced zero-height glyphs.
1076 - The `freetype-config' script now handles --prefix and
1077 --exec-prefix correctly; it also returns the proper --rpath (or
1078 -R) value if FreeType has been built as a shared library.
1081 II. IMPORTANT CHANGES
1083 - Both PCF and BDF drivers now handle the SETWIDTH_NAME and
1084 ADD_STYLE_NAME properties. Values are appended to
1085 face->style_name; example: `Bold SemiCondensed'.
1087 - The PCF driver now handles bitmap fonts compressed with the LZW
1088 algorithm (extension .pcf.Z, compressed with `compress').
1090 - A new API function `FT_Get_CMap_Language_ID' (declared in
1091 `tttables.h') is available to get the language ID of a
1094 - The hexadecimal format of data after the `StartData' command in
1095 CID-keyed Type 1 fonts is now supported. While this can't occur
1096 in file-based fonts, it can happen in document-embedded
1097 resources of PostScript documents.
1099 - Embedded bitmaps in SFNT-based CFF fonts are now supported.
1101 - A simple API is now available to control FreeType's tracing
1102 mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
1103 `ftdebug.h' for more details.
1105 - YAMATO Masatake contributed improved handling of MacOS resource
1106 forks on non-MacOS platforms (for example, Linux can mount MacOS
1109 - Support for MacOS has been improved; there is now a new function
1110 `FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
1111 it accepts an FSSpec instead of a path.
1113 - The cache sub-system has been rewritten.
1115 - There is now support for deinstallation of faces.
1117 - A new API function `FTC_Manager_RemoveFaceID' has been added
1118 to delete all `idle' nodes that correspond to a given
1119 FTC_FaceID. All `locked' nodes (i.e., those with a reference
1120 count > 0), will be modified to prevent them from appearing in
1121 further lookups (they will be cleaned normally when their
1122 reference count reaches 0).
1124 - There is now support for point scaling (i.e., providing
1125 character sizes in points + dpis, instead of pixels).
1127 - Three abstract cache classes are now available:
1129 FTC_GCache: Used to store one glyph item per cache node,
1130 with the ability to group common attributes into
1131 `families'. This replaces the old
1132 FTC_GlyphCache class.
1134 FTC_ICache: Used to store one FT_Glyph per cache node. This
1135 extends FTC_GCache. Family definition, family
1136 comparison, and glyph loading are however left
1139 FTC_SCache: Used to store up to 16 small bitmaps per cache
1140 node. This extends FTC_GCache. Family
1141 definition, family comparison and glyph loading
1142 are however left to sub-classes.
1144 - The file `src/cache/ftcbasic.c' implements:
1146 FTC_ImageCache: Extends FTC_ICache; implements family
1147 definitions and glyph loading similar to the
1150 FTC_SBitCache: Extends FTC_SCache, implements family
1151 definitions and glyph loading similar to the
1154 Client applications should be able to extend FTC_GCache,
1155 FTC_ICache, or FTC_SCache much more easily (i.e., less code to
1156 write, and less callbacks). For example, one could envision
1157 caches that are capable of storing transformed (obliqued),
1158 stroked, emboldened, or colored glyph images. Use
1159 `ftcbasic.c' as an example.
1161 - All public APIs are now in `include/freetype/ftcache.h', (to
1162 be accessed as `FT_CACHE_H'). The contents of
1163 `include/freetype/cache/' is only needed by applications that
1164 wish to implement their own caches.
1166 - There were some major performance improvements through the use
1167 of various programming tricks. Cache hits are up to 70%
1168 faster than in the old code.
1170 - The FTC_CMapCache has been simplified. Charmaps can only be
1171 accessed by index right now. There is also a new API named
1172 `FT_Charmap_GetIndex' for this purpose.
1174 - The demo programs have been updated to the new code. The
1175 previous versions will not work with the current one.
1177 - Using an invalid face index in FT_Open_Face and friends now
1178 causes an error even if the font contains a single face only.
1183 - Wolfgang Domröse contributed support files for building FreeType
1184 on the Atari using the PureC compiler. Note that the Atari is a
1187 - Vitaliy Pasternak contributed project files for VS.NET 2003.
1190 ======================================================================
1192 CHANGES BETWEEN 2.1.7 and 2.1.6
1194 I. IMPORTANT BUG FIXES
1196 - Updated to newest libtool version, fixing build problems on
1199 - On Unix platforms, `make install' didn't copy the correct
1202 Note that version 2.1.7 contains the same library C source code as
1206 ======================================================================
1208 CHANGES BETWEEN 2.1.6 and 2.1.5
1210 I. IMPORTANT BUG FIXES
1212 - The PFR font driver didn't load kerning tables correctly, and
1213 the functions in FT_PFR_H didn't work at all.
1215 - Type 1 font files in binary format (PFB) with an end-of-file
1216 indicator weren't accepted by the FreeType engine.
1218 - Fonts which contain /PaintType and /StrokeWidth no longer cause
1219 a segfault. This bug has been introduced in version 2.1.5.
1221 - Fonts loaded with FT_LOAD_RENDER no longer cause strange
1222 results. This bug has been introduced in version 2.1.5.
1224 - Some Windows (bitmap) FNT/FON files couldn't be handled
1228 II. IMPORTANT CHANGES
1230 - The internal module API has been heavily changed in favor of
1231 massive simplifications within the font engine. This also means
1232 that authors of third-party modules must adapt their code to the
1235 NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
1238 - The PostScript parser has been enhanced to handle comments and
1239 strings correctly. Additionally, more syntax forms are
1242 - Added the optional unpatented hinting system for TrueType. It
1243 allows typefaces which need hinting to produce correct glyph
1244 forms (e.g., Chinese typefaces from Dynalab) to work acceptably
1245 without infringing Apple patents. This system is compiled only
1246 if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
1247 ftoption.h (activated by default).
1252 - There is now a guard in the public header files to protect
1253 against inclusion of freetype.h from FreeType 1.
1255 - Direct inclusion of freetype.h and other public header files no
1256 longer works. You have to use the documented scheme
1258 #include <ft2build.h>
1259 #include FT_FREETYPE_H
1261 to load freetype.h with a symbolic name. This protects against
1262 renaming of public header files (which shouldn't happen but
1263 actually has, avoiding two public header files with the same
1267 ======================================================================
1269 CHANGES BETWEEN 2.1.5 and 2.1.4
1271 I. IMPORTANT BUG FIXES
1273 - Parsing the /CIDFontName field now removes the leading slash to
1274 be in sync with other font drivers.
1276 - gzip support was buggy. Some fonts could not be read.
1278 - Fonts which have nested subglyphs more than one level deep no
1279 longer cause a segfault.
1281 - Creation of synthetic cmaps for fonts in CFF format was broken
1284 - Numeric font dictionary entries for synthetic fonts are no
1287 - The font matrix wasn't applied to the advance width for Type1,
1288 CID, and CFF fonts. This caused problems when loading certain
1289 synthetic Type 1 fonts like `Helvetica Narrow'.
1291 - The test for the charset registry in BDF and PCF fonts is now
1294 - FT_Vector_Rotate sometimes returned strange values due to
1297 - The PCF driver now returns the correct number of glyphs
1298 (including an artificial `notdef' glyph at index 0).
1300 - FreeType now supports buggy CMaps which are contained in many
1301 CJK fonts from Dynalab.
1303 - Opening an invalid font on a Mac caused a segfault due to
1304 double-freeing memory.
1306 - BDF fonts with more than 32768 glyphs weren't supported
1310 II. IMPORTANT CHANGES
1312 - Accessing bitmap font formats has been synchronized. To do that
1313 the FT_Bitmap_Size structure has been extended to contain new
1314 fields `size', `x_ppem', and `y_ppem'.
1316 - The FNT driver now returns multiple faces, not multiple strikes.
1318 - The `psnames' module has been updated to the Adobe Glyph List
1321 - The `psnames' module now understands `uXXXX[X[X]]' glyph names.
1323 - The algorithm for guessing the font style has been improved.
1325 - For fonts in SFNT format, root->height is no longer increased if
1326 the line gap is zero. There exist fonts (containing e.g. form
1327 drawing characters) which intentionally have a zero line gap
1330 - ft_glyph_bbox_xxx flags are now deprecated in favour of
1333 - ft_module_xxx flags are now deprecated in favour of
1336 - FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
1337 deprecated in favour of
1338 FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
1339 are not specific to Microsoft.
1344 - The autohinter has been further improved; for example, `m'
1345 glyphs now retain its vertical symmetry.
1347 - Partial support of Mac fonts on non-Mac platforms.
1349 - `make refdoc' (after first `make') builds the HTML
1350 documentation. You need Python for this.
1352 - The make build system should now work more reliably on DOS-like
1355 - Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
1358 - Better VMS build support.
1360 - Support for the pkg-config package by providing a `freetype.pc'
1363 - New configure option --with-old-mac-fonts for Darwin.
1365 - Some source files have been renamed (mainly to fit into the 8.3
1369 ======================================================================
1371 CHANGES BETWEEN 2.1.4 and 2.1.3
1373 I. IMPORTANT BUG FIXES
1375 - Updated to newest libtool version, fixing build problems on
1378 - A fix in the Gzip stream reader: It couldn't read certain .gz
1379 files properly due to a small typo. In certain cases, FreeType
1380 could also loop endlessly when trying to load tiny gzipped
1383 - The configure script now tries to use the system-wide zlib when
1384 it finds one (instead of the copy found in src/gzip). And
1385 `freetype-config' has been updated to return relevant flags in
1386 this case when invoked with `--libs' (e.g. `-lzlib').
1388 - Certain fonts couldn't be loaded by 2.1.3 because they lacked a
1389 Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
1392 - The CFF loader was modified to accept fonts which only contain a
1393 subset of their reference charset. This prevented the correct
1394 use of PDF-embedded fonts.
1396 - The logic to detect Unicode charmaps has been modified. This is
1397 required to support fonts which include both 16-bit and 32-bit
1398 charmaps (like very recent asian ones) using the new 10 and 12
1401 - The TrueType loader now limits the depth of composite glyphs.
1402 This is necessary to prevent broken fonts to break the engine by
1403 blowing the stack with recursive glyph definitions.
1405 - The CMap cache is now capable of managing UCS-4 character codes
1406 that are mapped through extended charmaps in recent
1407 TrueType/OpenType fonts.
1409 - The cache sub-system now properly manages out-of-memory
1410 conditions instead of blindly reporting them to the caller.
1411 This means that it will try to empty the cache before restarting
1412 its allocations to see if that can help.
1414 - The PFR driver didn't return the list of available embedded
1417 - There was a nasty memory leak when using embedded bitmaps in
1418 certain font formats.
1421 II. IMPORTANT CHANGES
1423 - David Chester contributed some enhancements to the auto-hinter
1424 that significantly increase the quality of its output. The
1425 Postscript hinter was also improved in several ways.
1427 - The FT_RENDER_MODE_LIGHT render mode was implemented.
1429 - A new API function called `FT_Get_BDF_Property' has been added
1430 to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
1431 files. THIS IS STILL EXPERIMENTAL, since it hasn't been
1432 properly tested yet.
1434 - A Windows FNT specific API has been added, mostly to access font
1435 headers. This is used by Wine.
1437 - TrueType tables without an `hmtx' table are now tolerated when
1438 an incremental interface is used. This happens for certain
1439 Type42 fonts passed from Ghostscript to FreeType.
1441 - The PFR font driver is now capable of returning the font family
1442 and style names when they are available (instead of the sole
1443 `FontID'). This is performed by parsing an *undocumented*
1444 portion of the font file!
1449 - The path stroker in FT_STROKER_H has entered beta stage. It now
1450 works very well, but its interface might change a bit in the
1451 future. More on this in later releases.
1453 - The documentation for FT_Size_Metrics didn't appear properly in
1456 - The file docs/VERSION.DLL has been updated to explain versioning
1457 with FreeType (i.e., comparing release/libtool/so numbers, and
1458 how to use them in autoconf scripts).
1460 - The installation documentation has been seriously revamped.
1461 Everything is now in the `docs' directory.
1464 ======================================================================
1466 CHANGES BETWEEN 2.1.3 and 2.1.2
1468 I. IMPORTANT BUG FIXES
1470 - FT_Vector_Transform had been incorrectly modified in 2.1.2,
1471 resulting in incorrect transformations being applied (for
1472 example, rotations were processed in opposite angles).
1474 - The format 8 and 12 TrueType charmap enumeration routines have
1475 been fixed (FT_Get_Next_Char returned invalid values).
1477 - The PFR font driver returned incorrect advance widths if the
1478 outline and metrics resolution defined in the font file were
1481 - FT_Glyph_To_Bitmap now returns successfully when called with an
1482 FT_BitmapGlyph argument (it previously returned an error).
1484 - A bug in the Type 1 loader that prevented valid font bounding
1485 boxes to be loaded from multiple master fonts.
1487 - The SFNT validation code has been rewritten. FreeType can now
1488 load `broken' fonts that were usable on Windows, but not with
1489 previous versions of the library.
1491 - The computation of bearings in the BDF driver has been fixed.
1493 - The Postscript hinter crashed when trying to hint certain glyphs
1494 (more precisely, when trying to apply hints to an empty glyph
1497 - The TrueType glyph loader now supports composites in `Apple
1498 format' (they differ slightly from Microsoft/OpenType ones in
1499 the way transformation offsets are computed).
1501 - FreeType was very slow at opening certain asian CID/CFF fonts,
1502 due to fixed increment in dynamic array re-allocations. This
1503 has been changed to exponential behaviour to get acceptable
1508 II. IMPORTANT CHANGES
1510 - The PCF driver now supports gzip-compressed font files natively.
1511 This means that you will be able to use all these bitmap fonts
1512 that come with XFree86 with FreeType (and libXft/libXft2, by
1515 - The automatic and postscript hinters have both been updated.
1516 This results in a relatively important increase of rendering
1517 quality since many nasty defaults have been suppressed. Please
1520 http://www.freetype.org/hinting/smooth-hinting.html
1522 for additional details on this topic.
1524 - The `load_flags' parameter of `FT_Load_Glyph' is now an FT_Int32
1525 (instead of just being an FT_Int). This breaks source and
1526 binary compatibility for 16bit systems only, while retaining
1527 both of them for 32 and 64 bit ones.
1529 Some new flags have been added consequently:
1531 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
1532 (but not native format hinters).
1534 FT_LOAD_TARGET_NORMAL :: Hint and render for normal
1535 anti-aliased displays.
1537 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
1539 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
1540 BGR sub-pixel displays (like LCD
1541 screens). THIS IS STILL
1544 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
1545 vertical sub-pixel displays (like
1546 rotated LCD screens). THIS IS STILL
1549 FT_LOAD_MONOCHROME is still supported, but only affects
1550 rendering, not the hinting.
1552 Note that the `ftview' demo program available in the `ft2demos'
1553 package has been updated to support LCD-optimized display on
1554 non-paletted displays (under Win32 and X11).
1556 - The PFR driver now supports embedded bitmaps (all formats
1557 supported), and returns correct kerning metrics for all glyphs.
1559 - The TrueType charmap loader now supports certain `broken' fonts
1560 that load under Windows without problems.
1562 - The cache API has been slightly modified (it's still a beta!):
1564 - The type FTC_ImageDesc has been removed; it is now replaced
1565 by FTC_ImageTypeRec. Note that one of its fields is a
1566 `load_flag' parameter for FT_Load_Glyph.
1568 - The field `num_grays' of FT_SBitRec has been changed to
1569 `max_grays' in order to fit within a single byte. Its
1570 maximum value is thus 255 (instead of 256 as previously).
1575 - Added support for the DESTDIR variable during `make install'.
1576 This simplifies packaging of FreeType.
1578 - Included modified copies of the ZLib sources in `src/gzip' in
1579 order to support gzip-compressed PCF fonts. We do not use the
1580 system-provided zlib for now, though this is a probable
1581 enhancement for future releases.
1583 - The DocMaker tool used to generate the on-line API reference has
1584 been completely rewritten. It is now located in
1585 `src/tools/docmaker/docmaker.py'. Features:
1587 - better cross-referenced output
1588 - more polished output
1589 - uses Python regular expressions (though it didn't speed the
1591 - much more modular structure, which allows for different
1592 `backends' in order to generate HTML, XML, or whatever
1595 One can regenerate the API reference by calling:
1597 python src/tools/docmaker/docmaker.py \
1599 --title=FreeType-2.1.3 \
1600 --output=<outputdirectory>
1601 include/freetype/*.h \
1602 include/freetype/config/*.h \
1603 include/freetype/cache/*.h
1605 - A new, experimental, support for incremental font loading (i.e.,
1606 loading of fonts where the glyphs are not in the font file
1607 itself, but provided by an external component, like a Postscript
1608 interpreter) has been added by Graham Asher. This is still work
1609 in progress, however.
1611 - A new, EXPERIMENTAL, path stroker has been added. It doesn't
1612 suffer from severe rounding errors and treat bezier arcs
1613 directly. Still work in progress (i.e. not part of the official
1614 API). See the file <freetype/ftstroker.h> for some of the
1617 - The massive re-formatting of sources and internal re-design is
1618 still under-way. Many internal functions, constants, and types
1622 ======================================================================
1624 CHANGES BETWEEN 2.1.2 and 2.1.1
1626 I. IMPORTANT BUG FIXES
1628 - Many font drivers didn't select a Unicode charmap by default
1629 when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
1630 options enabled), causing many applications to not be able to
1631 display text correctly with the 2.1.x releases.
1633 - The PFR driver had a bug in its composite loading code that
1634 produces incorrectly placed accents with many fonts.
1636 - The Type42 driver crashed sometimes due to a nasty bug.
1638 - The Type 1 custom encoding charmap didn't handle the case where
1639 the first glyph index wasn't 0.
1641 - A serious typo in the TrueType composite loader produced
1642 incorrectly placed glyphs in fonts like `Wingdings' and a few
1648 - The Win32 Visual C++ project file has been updated to include
1649 the PFR driver as well.
1651 - `freetype.m4' is now installed by default by `make install' on
1654 - The function FT_Get_PS_Font_Info now works with CID and Type42
1658 ======================================================================
1660 CHANGES BETWEEN 2.1.1 and 2.1.0
1662 I. IMPORTANT BUG FIXES
1664 - The `version_info' returned by `freetype-config' in 2.1.0
1665 returned an invalid value. It now returns 9:1:3 (2.0.9 returned
1668 - Version 2.1.0 couldn't be linked against applications on Win32
1669 and Amiga systems due to a new debug function that wasn't
1670 properly propagated to the system-specific directory in
1673 - Various MacOS and Mac OS X specific fixes.
1675 - Fixed a bug in the TrueType charmap validation routines that
1676 made version 2.1.0 too restrictive -- many popular fonts have
1679 - There was still a very small difference between the monochrome
1680 glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
1681 bytecode interpreter enabled. This was caused by an invalid
1682 flag setting in the TrueType glyph loader, making the rasterizer
1683 change its drop-out control mode. Now the results should
1684 _really_ be completely identical.
1686 - The TrueType name table loader has been improved to support many
1687 popular though buggy Asian fonts. It now ignores empty name
1688 entries, invalid pointer offsets and a few other incorrect
1689 subtleties. Moreover, name strings are now loaded on demand,
1690 which reduces the memory load of many faces (e.g. the ARIAL.TTF
1691 font file contains a 10kByte name table with 70 names).
1693 - Fixed a bug in the Postscript hinter that prevented family blues
1694 substitution to happen correctly.
1699 - Three new font drivers in this release:
1701 * A BDF font driver, contributed by Franco Zappa Nardelli,
1702 heavily modified by Werner Lemberg. It also supports
1703 anti-aliased bitmaps (using a slightly extended BDF format).
1705 * A Type42 font driver, contributed by Roberto Alameda. It is
1706 still experimental but seems to work relatively well.
1708 * A PFR font driver, contributed by David Turner himself. It
1709 doesn't support PFR hinting -- note that BitStream has at
1710 least two patents on this format!
1715 - The cache sub-system has been optimized in important ways.
1716 Cache hits are now significantly faster. For example, using the
1717 CMap cache is about twice faster than calling FT_Get_Char_Index
1718 on most platforms. Similarly, using an SBit cache is about five
1719 times faster than loading the bitmaps from a bitmap file, and
1720 300 to 500 times faster than generating them from a scalable
1723 Note that you should recompile your sources if you designed a
1724 custom cache class for the FT2 Cache subsystem, since the
1725 changes performed are source, but not binary, compatible.
1728 ======================================================================
1730 CHANGES BETWEEN 2.1.0 and 2.0.9
1732 I. IMPORTANT BUG FIXES
1734 - The TrueType bytecode interpreter has been fixed to produce
1735 _exactly_ the same output as FreeType 1.x. Previous differences
1736 were due to slightly distinct fixed-point computation routines
1737 used to perform dot products and vector length measurements.
1739 It seems that native TrueType hinting is _extremely_ sensitive
1740 to rounding errors. The required vector computation routines
1741 have been optimized and placed within the `ttinterp.c' file.
1743 - Fixed the parsing of accelerator tables in the PCF font driver.
1745 - Fixed the Type1 glyph loader routine used to compute the font's
1746 maximum advance width.
1751 - The `configure' script used on Unix systems has been modified to
1752 check that GNU Make is being used to build the library.
1753 Otherwise, it will display a message proposing to use the
1754 GNUMAKE environment variable to name it.
1756 The Unix-specific file README.UNX has been modified accordingly.
1761 - The FreeType License in `docs/FTL.TXT' has been updated to
1762 include a proposed preferred disclaimer. If you are using
1763 FreeType in your products, you are encouraged (but not mandated)
1764 to use the following text in your documentation:
1767 Portions of this software are copyright © 1996-2002 The
1768 FreeType Project (www.freetype.org). All rights reserved.
1771 - The default size of the render pool has been reduced to 16kByte.
1772 This shouldn't result in any noticeable performance penalty,
1773 unless you are using the engine as-is to render very large and
1776 - The FreeType 2 redesign has begun. More information can be
1779 http://www.freetype.org/freetype2/redesign.html
1781 The following internal changes have been performed within the
1782 sources of this release:
1784 - Many internal types have been renamed to increase
1785 consistency. The following should be true, except for
1788 * All structure types have a name ending in `Rec' (short
1791 * A pointer-to-structure type has the same name as the
1792 structure, _without_ the `Rec' suffix.
1796 typedef struct FooRec_
1802 - Many internal macros have been renamed to increase
1803 consistency. The following should be true:
1805 * All macros have a name beginning with `FT_'. This
1806 required a few changes like
1810 REALLOC => FT_REALLOC
1812 * All macros are completely UPPERCASE. This required a
1815 READ_Short => FT_READ_SHORT
1816 NEXT_Short => FT_NEXT_SHORT
1817 GET_ULongLE => FT_GET_ULONG_LE
1818 MEM_Set => FT_MEM_SET
1819 MEM_Copy => FT_MEM_COPY
1822 * Whenever possible, all macro names follow the
1823 FT_<OBJECT>_<METHOD> pattern. For example
1825 ACCESS_Frame => FT_FRAME_ENTER
1826 FORGET_Frame => FT_FRAME_EXIT
1827 EXTRACT_Frame => FT_FRAME_EXTRACT
1828 RELEASE_Frame => FT_FRAME_RELEASE
1830 FILE_Pos => FT_STREAM_POS
1831 FILE_Seek => FT_STREAM_SEEK
1832 FILE_Read => FT_STREAM_READ
1833 FILE_ReadAt => FT_STREAM_READ_AT
1834 READ_Fields => FT_STREAM_READ_FIELDS
1836 - Many internal functions have been renamed to follow the
1837 FT_<Object>_<Method> pattern. For example:
1839 FT_Seek_Stream => FT_Stream_Seek
1840 FT_Read_Stream_At => FT_Stream_ReadAt
1841 FT_Done_Stream => FT_Stream_Close
1842 FT_New_Stream => FT_Stream_Open
1843 FT_New_Memory_Stream => FT_Stream_OpenMemory
1844 FT_Extract_Frame => FT_Stream_ExtractFrame
1846 Note that method names do not contain `_'.
1848 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
1849 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
1850 type as the fourth argument. Instead, the array element
1851 type size is computed automatically from the type of the
1852 target pointer used.
1854 - A new object class, FT_CMap, has been introduced. These
1855 internal objects are used to model character maps. This
1856 eases the support of additional charmap types within the
1859 - A new configuration file named `ftstdlib.h' has been added
1860 to `include/freetype/config'. It is used to define aliases
1861 for _every_ routine of the ISO C library that the font
1862 engine uses. Each aliases has a `ft_' prefix
1863 (e.g. `ft_strlen' is an alias for `strlen').
1865 This is used to ease the porting of FreeType 2 to exotic
1866 runtime environments where the ISO C Library isn't available
1867 (e.g. XFree86 extension modules).
1869 More details are available in the `ChangeLog' file.
1872 ======================================================================
1874 CHANGES BETWEEN 2.0.9 and 2.0.8
1876 I. IMPORTANT BUG FIXES
1878 - Certain fonts like `foxjump.ttf' contain broken name tables with
1879 invalid entries and wild offsets. This caused FreeType to crash
1880 when trying to load them.
1882 The SFNT `name' table loader has been fixed to be able to
1883 support these strange fonts.
1885 Moreover, the code in charge of processing this table has been
1886 changed to always favour Windows-formatted entries over other
1887 ones. Hence, a font that works on Windows but not on the Mac
1888 will load cleanly in FreeType and report accurate values for
1889 Family & PostScript names.
1891 - The CID font driver has been fixed. It unfortunately returned a
1892 Postscript Font name with a leading slash, as in
1893 `/MunhwaGothic-Regular'.
1895 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared
1898 - A bug in the Postscript hinter has been found and fixed,
1899 removing un-even stem widths at small pixel sizes (like 14-17).
1901 This improves the quality of a certain number of Postscript
1907 - A new function named `FT_Library_Version' has been added to
1908 return the current library's major, minor, and patch version
1909 numbers. This is important since the macros FREETYPE_MAJOR,
1910 FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
1911 library is dynamically linked by a program.
1913 - Two new APIs have been added: `FT_Get_First_Char' and
1916 Together, these can be used to iterate efficiently over the
1917 currently selected charmap of a given face. Read the API
1918 reference for more details.
1923 - The FreeType sources are under heavy internal re-factoring. As
1924 a consequence, we have created a branch named `STABLE' on the
1925 CVS to hold all future releases/fixes in the 2.0.x family.
1927 The HEAD branch now contains the re-factored sources and
1928 shouldn't be used for testing or packaging new releases. In
1929 case you would like to access the 2.0.9 sources from our CVS
1930 repository, use the tag `VER-2-0-9'.
1933 ======================================================================
1935 CHANGES BETWEEN 2.0.8 and 2.0.7
1937 I. IMPORTANT BUG FIXES
1939 - There was a small but nasty bug in `freetype-config.in' which
1940 caused the `freetype-config' script to fail on Unix.
1942 This didn't prevent the installation of the library or even its
1943 execution, but caused problems when trying to compile many Unix
1944 packages that depend on it.
1946 - Some TrueType or OpenType fonts embedded in PDF documents do not
1947 have a 'cmap', 'post' and 'name' as is required by the
1948 specification. FreeType no longer refuses to load such fonts.
1950 - Various fixes to the PCF font driver.
1953 ======================================================================
1955 CHANGES BETWEEN 2.0.7 and 2.0.6
1957 I. IMPORTANT BUG FIXES
1959 - Fixed two bugs in the Type 1 font driver. The first one
1960 resulted in a memory leak in subtle cases. The other one caused
1961 FreeType to crash when trying to load `.gsf' files (Ghostscript
1962 so-called Postscript fonts).
1964 (This made _many_ KDE applications crash on certain systems.
1965 FreeType _is_ becoming a critical system component on Linux :-)
1967 - Fixed a memory leak in the CFF font driver.
1969 - Fixed a memory leak in the PCF font driver.
1971 - Fixed the Visual C++ project file
1972 `builds/win32/visualc/freetype.dsp' since it didn't include the
1973 Postscript hinter component, causing errors at build time.
1975 - Fixed a small rendering bug in the anti-aliased renderer that
1976 only occurred when trying to draw thin (less than 1 pixel)
1979 - Fixed `builds/unix/freetype2.a4' which is used to generate a
1980 valid `freetype2.m4' for use with autoconf.
1982 - Fixed the OpenVMS Makefiles.
1987 - Added `configure' and `install' scripts to the top-level
1988 directory. A GNU-style installation is thus now easily possible
1991 ./configure <options>
1996 ======================================================================
1998 CHANGES BETWEEN 2.0.6 and 2.0.5
2000 I. IMPORTANT BUG FIXES
2002 - It wasn't possible to load embedded bitmaps when the auto-hinter
2003 was used. This is now fixed.
2005 - The TrueType font driver didn't load some composites properly
2006 (the sub-glyphs were slightly shifted, and this was only
2007 noticeable when using monochrome rendering).
2009 - Various fixes to the auto-hinter. They merely improve the
2010 output of sans-serif fonts. Note that there are still problems
2011 with serifed fonts and composites (accented characters).
2013 - All scalable font drivers erroneously returned un-fitted glyph
2014 advances when hinting was requested. This created problems for
2015 a number of layout applications. This is a very old bug that
2016 got undetected mainly because most test/demo program perform
2017 rounding explicitly or implicitly (through the cache).
2019 - `FT_Glyph_To_Bitmap' did erroneously modify the source glyph in
2022 - `glnames.py' still contained a bug that made FreeType return
2023 invalid names for certain glyphs.
2025 - The library crashed when loading certain Type 1 fonts like
2026 `sadn.pfb' (`Stalingrad Normal'), which appear to contain
2027 pathetic font info dictionaries.
2029 - The TrueType glyph loader is now much more paranoid and checks
2030 everything when loading a given glyph image. This was necessary
2031 to avoid problems (crashes and/or memory overwrites) with broken
2032 fonts that came from a really buggy automatic font converter.
2035 II. IMPORTANT UPDATES AND NEW FEATURES
2037 - Important updates to the Mac-specific parts of the library.
2039 - The caching sub-system has been completely re-designed, and its
2040 API has evolved (the old one is still supported for backward
2043 The documentation for it is not yet completed, sorry. For now,
2044 you are encouraged to continue using the old API. However, the
2045 ftview demo program in the ft2demos package has already been
2046 updated to use the new caching functions.
2048 - A new charmap cache is provided too. See `FTC_CMapCache'. This
2049 is useful to perform character code -> glyph index translations
2050 quickly, without the need for an opened FT_Face.
2052 - A NEW POSTSCRIPT HINTER module has been added to support native
2053 hints in the following formats: PostScript Type 1, PostScript
2056 Please test! Note that the auto-hinter produces better results
2057 for a number of badly-hinted fonts (mostly auto-generated ones)
2060 - A memory debugger is now part of the standard FreeType sources.
2061 To enable it, define FT_DEBUG_MEMORY in
2062 <freetype/config/ftoption.h>, and recompile the library.
2064 Additionally, define the _environment_ variable FT_DEBUG_MEMORY
2065 and run any program using FreeType. When the library is exited,
2066 a summary of memory footprints and possible leaks will be
2069 This works transparently with _any_ program that uses FreeType.
2070 However, you will need a lot of memory to use this (allocated
2071 blocks are never released to the heap to detect double deletes
2077 - We are aware of subtle differences between the output of
2078 FreeType versions 1 and 2 when it comes to monochrome
2079 TrueType-hinted glyphs. These are most probably due to small
2080 differences in the monochrome rasterizers and will be worked out
2081 in an upcoming release.
2083 - We have decided to fork the sources in a `stable' branch, and an
2084 `unstable' one, since FreeType is becoming a critical component
2085 of many Unix systems.
2087 The next bug-fix releases of the library will be named 2.0.7,
2088 2.0.8, etc., while the `2.1' branch will contain a version of
2089 the sources where we will start major reworking of the library's
2090 internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
2091 more distant future.
2093 We also hope that this scheme will allow much more frequent
2094 releases than in the past.
2097 ======================================================================
2099 CHANGES BETWEEN 2.0.5 and 2.0.4
2101 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
2102 WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
2104 - Fixed a bug that made certain glyphs, like `Cacute', `cacute' and
2105 `lslash' unavailable from Unicode charmaps of Postscript fonts.
2106 This prevented the correct display of Polish text, for example.
2108 - The kerning table of Type 1 fonts was loaded by FreeType, when its
2109 AFM file was attached to its face, but the
2110 FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
2111 preventing FT_Get_Kerning to return meaningful values.
2113 - Improved SFNT (TrueType & OpenType) charmap support. Slightly
2114 better performance, as well as support for the new formats defined
2115 by the OpenType 1.3 specification (8, 10, and 12)
2117 - Fixed a serious typo in `src/base/ftcalc.c' which caused invalid
2118 computations in certain rare cases, producing ugly artefacts.
2120 - The size of the EM square is computed with a more accurate
2121 algorithm for Postscript fonts. The old one caused slight errors
2122 with embedded fonts found in PDF documents.
2124 - Fixed a bug in the cache manager that prevented normal LRU
2125 behaviour within the cache manager, causing unnecessary reloads
2126 (for FT_Face and FT_Size objects only).
2128 - Added a new function named `FT_Get_Name_Index' to retrieve the
2129 glyph index of a given glyph name, when found in a face.
2131 - Added a new function named `FT_Get_Postscript_Name' to retrieve
2132 the `unique' Postscript font name of a given face.
2134 - Added a new public header size named FT_SIZES_H (or
2135 <freetype/ftsizes.h>) providing new FT_Size-management functions:
2136 FT_New_Size, FT_Activate_Size, FT_Done_Size.
2138 - Fixed a reallocation bug that generated a dangling pointer (and
2139 possibly memory leaks) with Postscript fonts (in
2140 src/psaux/psobjs.c).
2142 - Many fixes for 16-bit correctness.
2144 - Removed many pedantic compiler warnings from the sources.
2146 - Added an Amiga build directory in `builds/amiga'.
2149 ======================================================================
2151 CHANGES BETWEEN 2.0.4 and 2.0.3
2153 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
2154 the font transformation set through FT_Set_Transform was applied
2155 twice to auto-hinted glyphs, resulting in incorrectly rotated text
2158 - Fixed _many_ compiler warnings. FT2 should now compile cleanly
2159 with Visual C++'s most pedantic warning level (/W4). It already
2160 compiled fine with GCC and a few other compilers.
2162 - Fixed a bug that prevented the linear advance width of composite
2163 TrueType glyphs to be correctly returned.
2165 - Fixed the Visual C++ project files located in
2166 `builds/win32/visualc' (previous versions used older names of the
2169 - Many 32-bit constants have an `L' appended to their value, in
2170 order to improve the 16-bitness of the code. Someone is actually
2171 trying to use FT2 on an Atari ST machine!
2173 - Updated the `builds/detect.mk' file in order to automatically
2174 build FT2 on AIX systems. AIX uses `/usr/sbin/init' instead of
2175 `/sbin/init' and wasn't previously detected as a Unix platform by
2176 the FreeType build system.
2178 - Updated the Unix-specific portions of the build system (new
2179 libtool version, etc.).
2181 - The SFNT kerning loader now ensures that the table is sorted
2182 (since some problem fonts do not meet this requirement).
2185 =======================================================================
2187 CHANGES BETWEEN 2.0.3 and 2.0.2
2189 I. CHANGES TO THE MODULES / FONT DRIVERS
2191 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
2192 several annoying artefacts, mainly:
2194 - Blue zone alignment of horizontal stems wasn't performed
2195 correctly, resulting in artefacts like the `d' being placed
2196 one pixel below the `b' in some fonts like Time New Roman.
2198 - Overshoot thresholding wasn't performed correctly, creating
2199 unpleasant artefacts at large character pixel sizes.
2201 - Composite glyph loading has been simplified. This gets rid
2202 of various artefacts where the components of a composite
2203 glyphs were not correctly spaced.
2205 These are the last changes to the current auto-hinting module.
2206 A new hinting sub-system is currently in the work in order to
2207 support native hints in Type 1 / CFF / OpenType fonts, as well
2208 as globally improve rendering.
2210 - The PCF driver has been fixed. It reported invalid glyph
2211 dimensions for the fonts available on Solaris.
2213 - The Type 1, CID and CFF drivers have been modified to fix the
2214 computation of the EM size.
2216 - The Type 1 driver has been fixed to avoid a dangerous bug that
2217 crashed the library with non-conforming fonts (i.e. ones that do
2218 not place the .notdef glyph at position 0).
2220 - The TrueType driver had a rather subtle bug (dangling pointer
2221 when loading composite glyphs) that could crash the library in
2225 II. HIGH-LEVEL API CHANGES
2227 - The error code enumeration values have been changed. An error
2228 value is decomposed in a generic error code, and a module
2229 number. see <freetype/fterrors.h> for details.
2231 - A new public header file has been introduced, named
2232 FT_TRIGONOMETRY_H (include/freetype/fttrig.h), providing
2233 trigonometric functions to compute sines, cosines, arctangents,
2234 etc. with 16.16 fixed precision. The implementation is based on
2235 the CORDIC algorithm and is very fast while being sufficiently
2241 - Added BeOS-specific files in the old build sub-system. Note
2242 that no changes were required to compile the library with Jam.
2244 - The configuration is now capable of automatically detecting
2245 64-bit integers on a set of predefined compilers (GCC, Visual
2246 C++, Borland C++) and will use them by default. This provides a
2247 small performance boost.
2249 - A small memory leak that happened when opening 0-sized files
2250 (duh!) have been fixed.
2252 - Fixed bezier stack depth bug in the routines provided by the
2253 FT_BBOX_H header file. Also fixed similar bugs in the
2256 - The outline bounding box code has been rewritten to use direct
2257 computations, instead of bezier sub-division, to compute the
2258 exact bounding box of glyphs. This is slightly slower but more
2261 - The build system has been improved and fixed, mainly to support
2262 `make' on Windows 2000 correctly, avoid problems with `make
2263 distclean' on non Unix systems, etc.
2265 - Hexadecimal constants have been suffixed with `U' to avoid
2266 problems with certain compilers on 64-bit platforms.
2268 - A new directory named `src/tools' has been created. It contains
2269 Python scripts and simple unit test programs used to develop the
2272 - The DocMaker tool has been moved from `docs' to `src/tools' and
2273 has been updated with the following:
2275 - Now accepts the `--title=XXXX' or `-t XXXX' option from the
2276 command line to set the project's name in the generated API
2279 - Now accepts the `--output=DIR' or `-o DIR' option from the
2280 command line to set the output directory for all generated
2283 - Now accepts the `--prefix=XXXX' or `-p XXX' option from the
2284 command line to set the file prefix to use for all
2285 generated HTML files.
2287 - Now generates the current time/data on each generated page
2288 in order to distinguish between versions.
2290 DocMaker can be used with other projects now, not only FT2
2291 (e.g. MLib, FTLayout, etc.).
2294 ======================================================================
2296 CHANGES BETWEEN 2.0.2 and 2.0.1
2298 I. CHANGES TO THE MODULES / FONT DRIVERS
2300 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
2301 avoid legal problems with the Apple patents. It seems that we
2302 mistakenly turned this option on in previous releases of the
2305 Note that if you want to use the bytecode interpreter in order
2306 to get high-quality TrueType rendering, you will need to toggle
2307 by hand the definition of the
2308 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
2309 `include/freetype/config/ftoption.h'.
2311 - The CFF driver has been improved by Tom Kacvinsky and Sander van
2314 * Support for `seac' emulation.
2315 * Support for `dotsection'.
2316 * Support for retrieving glyph names through
2317 `FT_Get_Glyph_Name'.
2319 The first two items are necessary to correctly a large number of
2320 Type 1 fonts converted to the CFF formats by Adobe Acrobat.
2322 - The Type 1 driver was also improved by Tom & others:
2324 * Better EM size computation.
2325 * Better support for synthetic (transformed) fonts.
2326 * The Type 1 driver returns the charstrings corresponding to
2327 each glyph in the `glyph->control_data' field after a call to
2328 `FT_Load_Glyph' (thanks Ha Shao).
2330 - Various other bugfixes, including the following:
2332 * Fixed a nasty memory leak in the Type 1 driver.
2333 * The autohinter and the pcf driver used static writable data
2334 when they shouldn't.
2335 * Many casts were added to make the code more 64-bits safe. It
2336 also now compiles on Windows XP 64-bits without warnings.
2337 * Some incorrect writable statics were removed in the `autohint'
2338 and `pcf' drivers. FreeType 2 now compiles on Epoc again.
2341 II. CHANGES TO THE HIGH-LEVEL API
2343 - The library header files inclusion scheme has been changed. The
2344 old scheme looked like:
2346 #include <freetype/freetype.h>
2347 #include <freetype/ftglyph.h>
2348 #include <freetype/ftcache.h>
2349 #include <freetype/cache/ftimage.h>
2353 #include <ft2build.h>
2354 #include FT_FREETYPE_H
2357 #include FT_CACHE_IMAGE_H
2359 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
2360 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
2361 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
2363 The file <ft2build.h> is used to define the header filename
2364 macros. The complete and commented list of macros is available
2365 in the API reference under the section name `Header File Macros'
2368 For more information, see section I of the following document:
2370 http://www.freetype.org/
2371 freetype2/docs/tutorial/step1.html
2375 http://freetype.sourceforge.net/
2376 freetype2/docs/tutorial/step1.html
2378 - Many, many comments have been added to the public source file in
2379 order to automatically generate the API Reference through the
2380 `docmaker.py' Python script.
2382 The latter has been updated to support the grouping of sections
2383 in chapters and better index sort. See:
2385 http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
2388 III. CHANGES TO THE BUILD PROCESS
2390 - If you are not building FreeType 2 with its own build system
2391 (but with your own Makefiles or project files), you will need to
2392 be aware that the build process has changed a little bit.
2394 You don't need to put the `src' directory in the include path
2395 when compiling any FT2 component. Instead, simply put the
2396 component's directory in the current include path.
2398 So, if you were doing something like:
2400 cc -c -Iinclude -Isrc src/base/ftbase.c
2404 cc -c -Iinclude -Isrc/base src/base/ftbase.c
2406 If you were doing something like:
2409 cc -c -I../../include -I.. ftbase.c
2414 cc -c -I../../include ftbase.c
2417 ======================================================================
2419 CHANGES BETWEEN 2.0.1 and 2.0
2421 2.0.1 introduces a few changes:
2423 - Fixed many bugs related to the support of CFF / OpenType fonts.
2424 These formats are now much better supported though there is
2425 still work planned to deal with charset tables and PDF-embedded
2426 CFF files that use the old `seac' command.
2428 - The library could not be compiled in debug mode with a very
2429 small number of C compilers whose pre-processors didn't
2430 implement the `##' directive correctly (i.e. per se the ANSI C
2431 specification!) An elegant fix was found.
2433 - Added support for the free Borland command-line C++ Builder
2434 compiler. Use `make setup bcc32'. Also fixed a few source
2435 lines that generated new warnings with BCC32.
2437 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
2440 - Updated the INSTALL file to add IDE compilation.
2442 - Other minor bug fixes, from invalid Type 1 style flags to
2443 correct support of synthetic (obliqued) fonts in the
2444 auto-hinter, better support for embedded bitmaps in a SFNT font.
2446 - Fixed some problems with `freetype-config'.
2448 Finally, the `standard' scheme for including FreeType headers is now
2449 gradually changing, but this will be explained in a later release
2452 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
2453 for their contributions!
2456 ======================================================================
2458 CHANGES BETWEEN beta8 and 2.0
2460 - Changed the default installation path for public headers from
2461 `include/freetype' to `include/freetype2'.
2463 Also added a new `freetype-config' that is automatically generated
2464 and installed on Unix and Cygwin systems. The script itself is
2465 used to retrieve the current install path, C compilation flags as
2466 well as linker flags.
2468 - Fixed several small bugs:
2470 * Incorrect max advance width for fixed-pitch Type 1 fonts.
2471 * Incorrect glyph names for certain TrueType fonts.
2472 * The glyph advance was not copied when FT_Glyph_To_Bitmap was
2474 * The linearHoriAdvance and linearVertAdvance fields were not
2475 correctly returned for glyphs processed by the auto-hinter.
2476 * `type1z' renamed back to `type1'; the old `type1' module has
2479 - Revamped the build system to make it a lot more generic. This
2480 will allow us to re-use nearly un-modified in lots of other
2481 projects (including FreeType Layout).
2483 - Changed `cid' to use `psaux' too.
2485 - Added the cache sub-system. See <freetype/ftcache.h> as well as
2486 the sources in `src/cache'. Note that it compiles but is still
2489 - Updated `docs/docmaker.py', a draft API reference is available at
2490 http://www.freetype.org/ft2api.html.
2492 - Changed `type1' to use `psaux'.
2494 - Created a new module named `psaux' to hold the Type 1 & Type 2
2495 parsing routines. It should be used by `type1', `cid', and `cff'
2498 - Fixed an important bug in `FT_Glyph_Get_CBox'.
2500 - Fixed some compiler warnings that happened since the TrueType
2501 bytecode decoder was deactivated by default.
2503 - Fixed two memory leaks:
2505 * The memory manager (16 bytes) isn't released in
2507 * Using custom input streams, the copy of the original stream was
2510 - Fixed the auto-hinter by performing automatic computation of the
2511 `filling direction' of each glyph. This is done through a simple
2512 and fast approximation, and seems to work (problems spotted by
2513 Werner though). The Arphic fonts are a lot nicer though there are
2514 still a lot of things to do to handle Asian fonts correctly.
2517 ======================================================================
2519 BETA-8 (RELEASE CANDIDATE) CHANGES
2521 - Deactivated the TrueType bytecode interpreter by default.
2523 - Deactivated the `src/type1' font driver. Now `src/type1z' is used
2526 - Updates to the build system. We now compile the library correctly
2527 under Unix system through `configure' which is automatically
2528 called on the first `make' invocation.
2530 - Added the auto-hinting module! Fixing some bugs here and there.
2532 - Found some bugs in the composite loader (seac) of the Type1-based
2535 - Renamed the directory `freetype2/config' to `freetype2/builds' and
2536 updated all relevant files.
2538 - Found a memory leak in the `type1' driver.
2540 - Incorporated Tom's patches to support flex operators correctly in
2541 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
2542 fonts to be done with this driver :-)
2544 - Added the Windows FNT/FON driver in `src/winfonts'. For now, it
2545 always `simulates' a Unicode charmap, so it shouldn't be
2546 considered completed right now.
2548 It is there to be more a proof of concept than anything else
2549 anyway. The driver is a single C source file, that compiles to 3
2552 I'm still working on the PCF/BDF drivers, but I'm too lazy to
2555 - CHANGES TO THE HIGH-LEVEL API
2557 * FT_Get_Kerning has a new parameter that allows you to select the
2558 coordinates of the kerning vector (font units, scaled, scaled +
2560 * The outline functions are now in <freetype/ftoutln.h> and not
2561 part of <freetype/freetype.h> anymore.
2562 * <freetype/ftmodule.h> now contains declarations for
2563 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
2564 * The so-called convenience functions have moved from `ftoutln.c'
2565 to `ftglyph.c', and are thus available with this optional
2566 component of the library. They are declared in
2567 <freetype/ftglyph.h> now.
2568 * Anti-aliased rendering is now the default for FT_Render_Glyph
2569 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
2570 To generate a monochrome bitmap, use ft_render_mode_mono, or the
2571 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
2572 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
2573 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
2574 solving a few headaches :-)
2575 * The type FT_GlyphSlotRec has now a `library' field.
2577 - CHANGES TO THE `ftglyph.h' API
2579 This API has been severely modified in order to make it simpler,
2580 clearer, and more efficient. It certainly now looks like a real
2581 `glyph factory' object, and allows client applications to manage
2582 (i.e. transform, bbox and render) glyph images without ever
2583 knowing their original format.
2585 - Added support for CID-keyed fonts to the CFF driver. Maybe
2586 support for pure CFF + CEF fonts should come in?
2588 - Cleaned up source code in order to avoid two functions with the
2589 same name. Also changed the names of the files in `type1z' from
2590 `t1XXXX' to `z1XXXX' in order to avoid any conflicts.
2592 `make multi' now works well :-)
2594 Also removed the use of `cidafm' for now, even if the source files
2595 are still there. This functionality will certainly go into a
2598 - ADDED SUPPORT FOR THE AUTO-HINTER
2600 It works :-) I have a demo program which simply is a copy of
2601 `ftview' that does a `FT_Add_Module(library,
2602 &autohinter_module_class)' after library initialization, and Type
2603 1 & OpenType/CFF fonts are now hinted.
2605 CID fonts are not hinted, as they include no charmap and the
2606 auto-hinter doesn't include `generic' global metrics computations
2609 Now, I need to release this thing to the FreeType 2 source.
2611 - CHANGES TO THE RENDERER MODULES
2613 The monochrome and smooth renderers are now in two distinct
2614 directories, namely `src/raster1' and `src/smooth'. Note that the
2615 old `src/renderer' is now gone.
2617 I ditched the 5-gray-levels renderers. Basically, it involved a
2618 simple #define toggle in 'src/raster1/ftraster.c'.
2620 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
2621 select the best renderer available, depending on render mode. If
2622 the current renderer for a given glyph image format isn't capable
2623 of supporting the render mode, another one will be found in the
2624 library's list. This means that client applications do not need
2625 to switch or set the renderers themselves (as in the latest
2626 change), they'll get what they want automatically. At last.
2628 Changed the demo programs accordingly.
2630 - MAJOR INTERNAL REDESIGN:
2632 A lot of internal modifications have been performed lately on the
2633 source in order to provide the following enhancements:
2635 * More generic module support:
2637 The FT_Module type is now defined to represent a handle to a
2638 given module. The file <freetype/ftmodule.h> contains the
2639 FT_Module_Class definition, as well as the module-loading public
2642 The FT_Driver type is still defined, and still represents a
2643 pointer to a font driver. Note that FT_Add_Driver is replaced
2644 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
2646 * Support for generic glyph image types:
2648 The FT_Renderer type is a pointer to a module used to perform
2649 various operations on glyph image.
2651 Each renderer is capable of handling images in a single format
2652 (e.g. ft_glyph_format_outline). Its functions are used to:
2654 - transform an glyph image
2655 - render a glyph image into a bitmap
2656 - return the control box (dimensions) of a given glyph image
2658 The scan converters `ftraster.c' and `ftgrays.c' have been moved
2659 to the new directory `src/renderer', and are used to provide two
2660 default renderer modules.
2662 One corresponds to the `standard' scan-converter, the other to
2665 he current renderer can be set through the new function
2668 The old raster-related function FT_Set_Raster, FT_Get_Raster and
2669 FT_Set_Raster_Mode have now disappeared, in favor of the new:
2674 See the file <freetype/ftrender.h> for more details.
2676 These changes were necessary to properly support different
2677 scalable formats in the future, like bi-color glyphs, etc.
2679 * Glyph loader object:
2681 A new internal object, called a 'glyph loader' has been
2682 introduced in the base layer. It is used by all scalable format
2683 font drivers to load glyphs and composites.
2685 This object has been created to reduce the code size of each
2686 driver, as each one of them basically re-implemented its
2689 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
2692 * FT_GlyphSlot has new fields:
2694 In order to support extended features (see below), the
2695 FT_GlyphSlot structure has a few new fields:
2699 This field gives the linearly scaled (i.e. scaled but
2700 unhinted) advance width for the glyph, expressed as a 16.16
2701 fixed pixel value. This is useful to perform WYSIWYG text.
2704 This field gives the linearly scaled advance height for the
2705 glyph (relevant in vertical glyph layouts only). This is
2706 useful to perform WYSIWYG text.
2708 Note that the two above field replace the removed `metrics2'
2709 field in the glyph slot.
2712 This field is a vector that gives the transformed advance for
2713 the glyph. By default, it corresponds to the advance width,
2714 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
2715 FT_Load_Glyph or FT_Load_Char.
2718 This field gives the distance in integer pixels from the
2719 current pen position to the left-most pixel of a glyph image
2720 IF IT IS A BITMAP. It is only valid when the `format' field
2721 is set to `ft_glyph_format_bitmap', for example, after calling
2722 the new function FT_Render_Glyph.
2725 This field gives the distance in integer pixels from the
2726 current pen position (located on the baseline) to the top-most
2727 pixel of the glyph image IF IT IS A BITMAP. Positive values
2728 correspond to upwards Y.
2731 This is a new private field for the glyph slot. Client
2732 applications should not touch it.
2735 * Support for transforms and direct rendering in FT_Load_Glyph:
2737 Most of the functionality found in <freetype/ftglyph.h> has been
2738 moved to the core library. Hence, the following:
2740 - A transform can be specified for a face through
2741 FT_Set_Transform. this transform is applied by FT_Load_Glyph
2742 to scalable glyph images (i.e. NOT TO BITMAPS) before the
2743 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
2744 was set in the load flags.
2746 - Once a glyph image has been loaded, it can be directly
2747 converted to a bitmap by using the new FT_Render_Glyph
2748 function. Note that this function takes the glyph image from
2749 the glyph slot, and converts it to a bitmap whose properties
2750 are returned in `face.glyph.bitmap', `face.glyph.bitmap_left'
2751 and `face.glyph.bitmap_top'. The original native image might
2752 be lost after the conversion.
2754 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
2755 and FT_Load_Char functions will call FT_Render_Glyph
2756 automatically when needed.
2758 - Reformatted all modules source code in order to get rid of the
2759 basic data types redifinitions (i.e. `TT_Int' instead of `FT_Int',
2760 `T1_Fixed' instead of `FT_Fixed'). Hence the format-specific
2761 prefixes like `TT_', `T1_', `T2_' and `CID_' are only used for
2762 relevant structures.
2765 ======================================================================
2767 OLD CHANGES FOR BETA 7
2769 - bug-fixed the OpenType/CFF parser. It now loads and displays my
2770 two fonts nicely, but I'm pretty certain that more testing is
2773 - fixed the crummy Type 1 hinter, it now handles accented characters
2774 correctly (well, the accent is not always well placed, but that's
2777 - added the CID-keyed Type 1 driver in `src/cid'. Works pretty well
2778 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
2779 really useful CMAP files..
2781 - fixed two bugs in the smooth renderer (src/base/ftgrays.c).
2782 Thanks to Boris Letocha for spotting them and providing a fix.
2784 - fixed potential `divide by zero' bugs in ftcalc.c.
2786 - added source code for the OpenType/CFF driver (still incomplete
2789 - modified the SFNT driver slightly to perform more robust header
2790 checks in TT_Load_SFNT_Header. This prevents certain font files
2791 (e.g. some Type 1 Multiple Masters) from being incorrectly
2792 `recognized' as TrueType font files..
2794 - moved a lot of stuff from the TrueType driver to the SFNT module,
2795 this allows greater code re-use between font drivers
2796 (e.g. TrueType, OpenType, Compact-TrueType, etc..)
2798 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
2799 to minimally speed it up..
2801 - added support for Multiple Master fonts in `type1z'. There is
2802 also a new file named <freetype/ftmm.h> which defines functions to
2803 manage them from client applications.
2805 The new file `src/base/ftmm.c' is also optional to the engine..
2807 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
2808 small bug fixes in FT_Load_Glyph, the `type1' driver, etc..
2810 - a minor fix to the Type 1 driver to let them apply the font matrix
2811 correctly (used for many oblique fonts..)
2813 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
2814 to use %p instead of %lx). Thanks to Karl Robillard.
2816 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
2817 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
2818 cropped when loaded from a file (maybe I should move the bitmap
2819 cropper to the base layer ??).
2821 - changed the default number of gray levels of the smooth renderer
2822 to 256 (instead of the previous 128). Of course, the human eye
2823 can't see any difference ;-)
2825 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
2826 of subglyphs in a TrueType font now..
2829 ======================================================================
2831 OLD CHANGES 16 May 2000
2833 - tagged `BETA-6' in the CVS tree. This one is a serious release
2834 candidate even though it doesn't incorporate the auto-hinter yet..
2836 - various obsolete files were removed, and copyright header updated
2838 - finally updated the standard raster to fix the monochrome
2839 rendering bug + re-enable support for 5-gray levels anti-aliasing
2842 - created new header files, and modified sources accordingly:
2844 <freetype/fttypes.h>
2845 - simple FreeType types, without the API
2846 <freetype/internal/ftmemory.h>
2847 - definition of memory-management macros
2849 - added the `DSIG' (OpenType Digital Signature) tag to
2852 - light update/cleaning of the build system + changes to the sources
2853 in order to get rid of _all_ compiler warnings with three
2856 gcc with `-ansi -pedantic -Wall -W', Visual C++ with `/W3 /WX' and
2859 IMPORTANT NOTE FOR WIN32-LCC USERS:
2861 | It seems the C pre-processor that comes with LCC is broken, it
2862 | doesn't recognize the ANSI standard directives # and ##
2863 | correctly when one of the argument is a macro. Also,
2866 | #define F(x) print##x
2870 | will get incorrectly translated to:
2874 | by its pre-processor. For this reason, you simply cannot build
2875 | FreeType 2 in debug mode with this compiler..
2877 - yet another massive grunt work. I've changed the definition of
2878 the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
2879 now take an argument, which is the function's return value type.
2881 This is necessary to compile FreeType as a DLL on Windows and
2882 OS/2. Depending on the compiler used, a compiler-specific keyword
2883 like __export or __system must be placed before (VisualC++) or
2884 after (BorlandC++) the type..
2886 Of course, this needed a lot of changes throughout the source code
2887 to make it compile again... All cleaned up now, apparently..
2889 Note also that there is a new EXPORT_VAR macro defined to allow
2890 the _declaration_ of an exportable public (constant)
2891 variable. This is the case of the raster interfaces (see
2892 ftraster.h and ftgrays.h), as well as each module's interface (see
2893 sfdriver.h, psdriver.h, etc..)
2895 - new feature: it is now possible to pass extra parameters to font
2896 drivers when creating a new face object. For now,
2897 this capability is unused. It could however prove to
2898 be useful in a near future..
2900 the FT_Open_Args structure was changes, as well as the internal
2901 driver interface (the specific `init_face' module function has
2902 now a different signature).
2904 - updated the tutorial (not finished though).
2906 - updated the top-level BUILD document
2908 - fixed a potential memory leak that could occur when loading
2911 - added the declaration of FT_New_Memory_Face in
2912 <freetype/freetype.h>, as it was missing from the public header
2913 (the implementation was already in `ftobjs.c').
2915 - the file <freetype/fterrors.h> has been seriously updated in order
2916 to allow the automatic generation of error message tables. See
2917 the comments within it for more information.
2919 - major directory hierarchy re-organisation. This was done for two
2922 * first, to ease the `manual' compilation of the library by
2923 requiring at lot less include paths :-)
2925 * second, to allow external programs to effectively access
2926 internal data fields. For example, this can be extremely
2927 useful if someone wants to write a font producer or a font
2928 manager on top of FreeType.
2930 Basically, you should now use the 'freetype/' prefix for header
2933 #include <freetype/freetype.h>
2934 #include <freetype/ftglyph.h>
2936 Some new include sub-directories are available:
2938 a. the `freetype/config' directory, contains two files used to
2939 configure the build of the library. Client applications
2940 should not need to look at these normally, but they can if
2943 #include <freetype/config/ftoption.h>
2944 #include <freetype/config/ftconfig.h>
2946 b. the `freetype/internal' directory, contains header files that
2947 describes library internals. These are the header files that
2948 were previously found in the `src/base' and `src/shared'
2952 As usual, the build system and the demos have been updated to
2953 reflect the change..
2955 Here's a layout of the new directory hierarchy:
2984 Compiling a module is now much easier, for example, the following
2985 should work when in the TOP_DIR directory on an ANSI build:
2987 gcc -c -I./include -I./src/base src/base/ftbase.c
2988 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
2991 (of course, using -Iconfig/<system> if you provide system-specific
2992 configuration files).
2994 - updated the structure of FT_Outline_Funcs in order to allow direct
2995 coordinate scaling within the outline decomposition routine (this
2996 is important for virtual `on' points with TrueType outlines) +
2997 updates to the rasters to support this..
2999 - updated the OS/2 table loading code in `src/sfnt/ttload.c' in
3000 order to support version 2 of the table (see OpenType 1.2 spec)
3002 - created `include/tttables.h' and `include/t1tables.h' to allow
3003 client applications to access some of the SFNT and T1 tables of a
3004 face with a procedural interface (see `FT_Get_Sfnt_Table') +
3005 updates to internal source files to reflect the change..
3007 - some cleanups in the source code to get rid of warnings when
3008 compiling with the `-Wall -W -ansi -pedantic' options in gcc.
3010 - debugged and moved the smooth renderer to `src/base/ftgrays.c' and
3011 its header to `include/ftgrays.h'
3013 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
3014 with up to 80 sub-glyphs !! Thanks to Werner
3017 ======================================================================
3019 OLD CHANGES - 14-apr-2000
3021 - fixed a bug in the TrueType glyph loader that prevented the
3022 correct loading of some CJK glyphs in mingli.ttf
3024 - improved the standard Type 1 hinter in `src/type1'
3026 - fixed two bugs in the experimental Type 1 driver in `src/type1z'
3027 to handle the new XFree86 4.0 fonts (and a few other ones..)
3029 - the smooth renderer is now complete and supports sub-banding to
3030 render large glyphs at high speed. However, it is still located
3031 in `demos/src/ftgrays.c' and should move to the library itself in
3032 the next beta. NOTE: The smooth renderer doesn't compile in
3033 stand-alone mode anymore, but this should be fixed RSN..
3035 - introduced convenience functions to more easily deal with glyph
3036 images, see `include/ftglyph.h' for more details, as well as the
3037 new demo program named `demos/src/ftstring.c' that demonstrates
3040 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
3041 drivers (this is required by the auto-hinter to improve its
3044 - changed the raster interface, in order to allow client
3045 applications to provide their own span-drawing callbacks.
3046 However, only the smooth renderer supports this. See
3047 `FT_Raster_Params' in the file `include/ftimage.h'.
3049 - fixed a small bug in FT_MulFix that caused incorrect transform
3052 - Note: The tutorial is out-of-date.
3055 ======================================================================
3057 OLD CHANGES - 12-mar-2000
3059 - changed the layout of configuration files : now, all ANSI
3060 configuration files are located in
3061 `freetype2/config'. System-specific over-rides can be placed in
3062 `freetype2/config/<system>'.
3064 - moved all configuration macros to `config/ftoption.h'
3066 - improvements in the Type 1 driver with AFM support
3068 - changed the fields in the FT_Outline structure : the old `flags'
3069 array is re-named `tags', while all ancient flags are encoded into
3070 a single unsigned int named `flags'.
3072 - introduced new flags in FT_Outline.flags (see
3073 ft_outline_.... enums in `ftimage.h').
3075 - changed outline functions to `FT_Outline_<action>' syntax
3077 - added a smooth anti-alias renderer to the demonstration programs
3079 - added Mac graphics driver (thanks Just)
3081 - FT_Open_Face changed in order to received a pointer to a
3082 FT_Open_Args descriptor..
3084 - various cleanups, a few more API functions implemented (see
3090 ======================================================================
3092 OLD CHANGES - 22-feb-2000
3094 - introduced the `psnames' module. It is used to:
3096 o convert a Postscript glyph name into the equivalent Unicode
3097 character code (used by the Type 1 driver(s) to synthesize on
3098 the fly a Unicode charmap).
3100 o provide an interface to retrieve the Postscript names of the
3101 Macintosh, Adobe Standard & Adobe Expert character codes.
3102 (the Macintosh names are used by the SFNT-module postscript
3103 names support routines, while the other two tables are used by
3104 the Type 1 driver(s)).
3106 - introduced the `type1z' alternate Type 1 driver. This is a (still
3107 experimental) driver for the Type 1 format that will ultimately
3108 replace the one in `src/type1'. It uses pattern matching to load
3109 data from the font, instead of a finite state analyzer. It works
3110 much better than the `old' driver with `broken' fonts. It is also
3111 much smaller (under 15 Kb).
3113 - the Type 1 drivers (both in `src/type1' and `src/type1z') are
3114 nearly complete. They both provide automatic Unicode charmap
3115 synthesis through the `psnames' module. No re-encoding vector is
3116 needed. (note that they still leak memory due to some code
3117 missing, and I'm getting lazy).
3119 Trivial AFM support has been added to read kerning information but
3120 wasn't exactly tested as it should ;-)
3122 - The TrueType glyph loader has been seriously rewritten (see the
3123 file `src/truetype/ttgload.c'. It is now much, much simpler as
3124 well as easier to read, maintain and understand :-) Preliminary
3125 versions introduced a memory leak that has been reported by Jack
3126 Davis, and is now fixed..
3128 - introduced the new `ft_glyph_format_plotter', used to represent
3129 stroked outlines like Windows `Vector' fonts, and certain Type 1
3130 fonts like `Hershey'. The corresponding raster will be written
3133 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
3134 interface that uses a structure to describe the input stream, the
3135 driver (if required), etc..
3140 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
3142 - Add a function like FT_Load_Character(face, char_code, load_flags)
3143 that would really embed a call to FT_Get_Char_Index then
3144 FT_Load_Glyph to ease developer's work.
3146 - Update the tutorial!
3148 - consider adding support for Multiple Master fonts in the Type 1
3151 - Test the AFM routines of the Type 1 drivers to check that kerning
3152 information is returned correctly.
3154 - write a decent auto-gridding component !! We need this to release
3160 - add a CFF/Type2 driver
3162 - add a FNT/PCF/HBF driver
3163 - add a Speedo driver from the X11 sources
3166 ======================================================================
3168 OLDER CHANGES - 27-jan-2000
3170 - updated the `sfnt' module interface to allow several SFNT-based
3171 drivers to co-exist peacefully
3173 - updated the `T1_Face' type to better separate Postscript font
3174 content from the rest of the FT_Face structure. Might be used
3175 later by the CFF/Type2 driver..
3177 - added an experimental replacement Type 1 driver featuring advanced
3178 (and speedy) pattern matching to retrieve the data from postscript
3181 - very minor changes in the implementation of FT_Set_Char_Size and
3182 FT_Set_Pixel_Sizes (they now implement default to lighten the font
3186 ======================================================================
3190 This file summarizes the changes that occurred since the last `beta'
3191 of FreeType 2. Because the list is important, it has been divided into
3196 I High-Level Interface (easier !)
3197 II Directory Structure
3198 III Glyph Image Formats
3204 ----------------------------------------------------------------------
3206 High-Level Interface:
3208 The high-level API has been considerably simplified. Here is how:
3210 - resource objects have disappeared. this means that face objects
3211 can now be created with a single function call (see FT_New_Face
3214 - when calling either FT_New_Face & FT_Open_Face, a size object
3215 and a glyph slot object are automatically created for the face,
3216 and can be accessed through `face->glyph' and `face->size' if
3217 one really needs to. In most cases, there's no need to call
3218 FT_New_Size or FT_New_Glyph.
3220 - similarly, FT_Load_Glyph now only takes a `face' argument
3221 (instead of a glyph slot and a size). Also, its `result'
3222 parameter is gone, as the glyph image type is returned in the
3223 field `face->glyph.format'
3225 - the list of available charmaps is directly accessible through
3226 `face->charmaps', counting `face->num_charmaps' elements. Each
3227 charmap has an 'encoding' field which specifies which known
3228 encoding it deals with. Valid values are, for example:
3230 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
3231 ft_encoding_apple_roman
3233 ft_encoding_adobe_standard
3234 ft_encoding_adobe_expert
3236 other values may be added in the future. Each charmap still
3237 holds its `platform_id' and `encoding_id' values in case the
3238 encoding is too exotic for the current library
3241 ----------------------------------------------------------------------
3243 Directory Structure:
3245 Should seem obvious to most of you:
3248 config/ -- configuration sub-makefiles
3250 unix/ -- platform-specific configuration files
3255 include/ -- public header files, those to be included
3256 directly by client apps
3258 src/ -- sources of the library
3259 base/ -- the base layer
3260 sfnt/ -- the sfnt `driver' (see the drivers section
3262 truetype/ -- the truetype driver
3263 type1/ -- the type1 driver
3264 shared/ -- some header files shared between drivers
3266 demos/ -- demos/tools
3268 docs/ -- documentation (a bit empty for now)
3271 ----------------------------------------------------------------------
3273 Glyph Image Formats:
3275 Drivers are now able to register new glyph image formats within the
3276 library. For now, the base layer supports of course bitmaps and
3277 vector outlines, but one could imagine something different like
3278 colored bitmaps, bi-color vectors or whatever else (Metafonts anyone
3281 See the file `include/ftimage.h'. Note also that the type
3282 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
3283 should encompass all known bitmap types.
3285 Each new image format must provide at least one `raster', i.e. a
3286 module capable of transforming the glyph image into a bitmap. It's
3287 also possible to change the default raster used for a given glyph
3290 The default outline scan-converter now uses 128 levels of grays by
3291 default, which tends to smooth many things. Note that the demo
3292 programs have been updated significantly in order to display these..
3295 ----------------------------------------------------------------------
3299 You still need GNU Make to build the library. The build system has
3300 been very seriously re-vamped in order to provide things like :
3302 - automatic host platform detection (reverting to 'config/ansi' if
3303 it is not detected, with pseudo-standard compilation flags)
3305 - the ability to compile from the Makefiles with very different and
3306 exotic compilers. Note that linking the library can be difficult
3309 For example, the file `config/win32/lcclib.bat' is invoked by the
3310 build system to create the `.lib' file with LCC-Win32 because its
3311 librarian has too many flaws to be invoked directly from the
3314 Here's how it works:
3316 - the first time you type `make', the build system runs a series of
3317 sub-makefiles in order to detect your host platform. It then
3318 dumps what it found, and creates a file called `config.mk' in the
3319 current directory. This is a sub-Makefile used to define many
3320 important Make variables used to build the library.
3322 - the second time, the build system detects the `config.mk' then use
3323 it to build the library. All object files go into 'obj' by
3324 default, as well as the library file, but this can easily be
3327 Note that you can run `make setup' to force another host platform
3328 detection even if a `config.mk' is present in the current
3329 directory. Another solution is simply to delete the file, then
3332 Finally, the default compiler for all platforms is gcc (for now,
3333 this will hopefully changed in the future). You can however specify
3334 a different compiler by specifying it after the 'setup' target as
3337 gnumake setup lcc on Win32 to use the LCC compiler
3338 gnumake setup visualc on Win32 to use Visual C++
3340 See the file `config/<system>/detect.mk' for a list of supported
3341 compilers for your platforms.
3343 It should be relatively easy to write new detection rules files and
3346 Finally, to build the demo programs, go to `demos' and launch GNU
3347 Make, it will use the `config.mk' in the top directory to build the
3351 ----------------------------------------------------------------------
3355 In the previous beta, a single FT_System object was used to
3356 encompass all low-level operations like thread synchronisation,
3357 memory management and i/o access. This has been greatly simplified:
3359 - thread synchronisation has been dropped, for the simple reason
3360 that the library is already re-entrant, and that if you really
3361 need two threads accessing the same FT_Library, you should
3362 really synchronize access to it yourself with a simple mutex.
3364 - memory management is performed through a very simple object
3365 called `FT_Memory', which really is a table containing a table
3366 of pointers to functions like malloc, realloc and free as well
3367 as some user data (closure).
3369 - resources have disappeared (they created more problems than they
3370 solved), and i/o management have been simplified greatly as a
3371 result. Streams are defined through FT_Stream objects, which
3372 can be either memory-based or disk-based.
3374 Note that each face has its own stream, which is closed only
3375 when the face object is destroyed. Hence, a function like
3376 TT_Flush_Face in 1.x cannot be directly supported. However, if
3377 you really need something like this, you can easily tailor your
3378 own streams to achieve the same feature at a lower level (and
3379 use FT_Open_Face instead of FT_New_Face to create the face).
3381 See the file `include/ftsystem.h' for more details, as well as the
3382 implementations found in `config/unix' and `config/ansi'.
3385 ----------------------------------------------------------------------
3389 The Font Driver interface has been modified in order to support
3390 extensions & versioning.
3393 The list of the font drivers that are statically linked to the
3394 library at compile time is managed through a new configuration file
3395 called `config/<platform>/ftmodule.h'.
3397 This file is autogenerated when invoking `make modules'. This
3398 target will parse all sub-directories of 'src', looking for a
3399 `module.mk' rules file, used to describe the driver to the build
3402 Hence, one should call `make modules' each time a font driver is
3403 added or removed from the `src' directory.
3405 Finally, this version provides a `pseudo-driver' in `src/sfnt'.
3406 This driver doesn't support font files directly, but provides
3407 services used by all TrueType-like font drivers. Hence, its code is
3408 shared between the TrueType & OpenType font formats, and possibly
3409 more formats to come if we're lucky..
3412 ----------------------------------------------------------------------
3416 The extensions support is inspired by the one found in 1.x.
3418 Now, each font driver has its own `extension registry', which lists
3419 which extensions are available for the font faces managed by the
3422 Extension ids are now strings, rather than 4-byte tags, as this is
3423 usually more readable.
3426 - some data, associated to each face object
3427 - an interface (table of function pointers)
3429 An extension that is format-specific should simply register itself
3430 to the correct font driver. Here is some example code:
3432 // Registering an extensions
3434 FT_Error FT_Init_XXXX_Extension( FT_Library library )
3436 FT_DriverInterface* tt_driver;
3438 driver = FT_Get_Driver( library, "truetype" );
3439 if (!driver) return FT_Err_Unimplemented_Feature;
3441 return FT_Register_Extension( driver, &extension_class );
3445 // Implementing the extensions
3447 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
3449 FT_XXX_Extension ext;
3450 FT_XXX_Extension_Interface ext_interface;
3452 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
3453 if (!ext) return error;
3455 return ext_interface->do_it(ext);
3458 ------------------------------------------------------------------------
3460 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
3462 David Turner, Robert Wilhelm, and Werner Lemberg.
3464 This file is part of the FreeType project, and may only be used,
3465 modified, and distributed under the terms of the FreeType project
3466 license, LICENSE.TXT. By continuing to use, modify, or distribute this
3467 file you indicate that you have read the license and understand and
3472 version-control: never
3476 --- end of CHANGES ---