1LATEST CHANGES BETWEEN 2.1.3 and 2.1.2 2 3 I. IMPORTANT BUG FIXES 4 5 - FT_Vector_Transform had been incorrectly modified in 2.1.2, resulting 6 in incorrect transformations being applied (for example, rotations 7 were processed in opposite angles). 8 9 - The format 8 and 12 TrueType charmap enumeration routines have been 10 fixed (FT_Get_Next_Char returned invalid values). 11 12 - The PFR font driver returned incorrect advance widths if the outline 13 and metrics resolution defined in the font file were different. 14 15 - FT_Glyph_To_Bitmap now returns successfully when called with an 16 FT_BitmapGlyph argument (it previously returned an error). 17 18 - A bug in the Type 1 loader that prevented valid font bounding boxes to 19 be loaded from multiple master fonts. 20 21 - The SFNT validation code has been rewritten. FreeType can now load 22 "broken" fonts that were usable on Windows, but not with previous 23 versions of the library. 24 25 - The computation of bearings in the BDF driver has been fixed. 26 27 - The Postscript hinter crashed when trying to hint certain glyphs (more 28 precisely, when trying to apply hints to an empty glyph outline). 29 30 - The TrueType glyph loader now supports composites in "Apple format" 31 (they differ slightly from Microsoft/OpenType ones in the way transform 32 offsets are computed). 33 34 - FreeType was very slow at opening certain asian CID/CFF fonts, due 35 to fixed increment in dynamic array re-allocations. This has been 36 changed to exponential behaviour to get acceptable performance 37 38 II. IMPORTANT CHANGES 39 40 - the PCF driver now supports gzip-compressed font files natively. This 41 means that you'll be able to use all these bitmap fonts that come 42 with XFree86 with FreeType (and libXft/libXft2, by extension). 43 44 - The automatic and postscript hinters have both been updated. This 45 results in a relatively important increase of rendering quality since 46 many nasty defaults have been supressed. Please visit the web page: 47 48 http://www.freetype.org/hinting/smooth-hinting.html 49 50 for additional details on this topic. 51 52 - The "load_flags" parameter of FT_Load_Glyph is now an FT_Int32 53 (instead of just being an FT_Int). This breaks source and binary 54 compatibility for 16bit systems only, while retaining both of them for 55 32 and 64 bit ones. 56 57 Some new flags have been added consequently: 58 59 FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter 60 (but not native format hinters). 61 62 FT_LOAD_TARGET_NORMAL :: Hint and render for normal anti-aliased 63 displays. 64 65 FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays. 66 67 FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or BGR 68 sub-pixel displays (like LCD screens). 69 THIS IS STILL EXPERIMENTAL! 70 71 FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for vertical 72 sub-pixel displays (like rotated LCD 73 screens). THIS IS STILL EXPERIMENTAL! 74 75 FT_LOAD_MONOCHROME is still supported, but only affects rendering, not 76 the hinting. 77 78 Note that the 'ftview' demo program available in the 'ft2demos' package 79 has been updated to support LCD-optimized display on non-paletted 80 displays (under Win32 and X11) 81 82 - The PFR driver now supports embedded bitmaps (all formats supported), 83 and returns correct kerning metrics for all glyphs 84 85 - The TrueType charmap loader now supports certain "broken" fonts that 86 load under Windows without problems. 87 88 - The cache API has been slightly modified (it's still a beta!): 89 90 - The type FTC_ImageDesc has been removed; it is now replaced by 91 FTC_ImageTypeRec. Note that one of its fields is a `load_flag' 92 parameter for FT_Load_Glyph. 93 94 - The field "num_grays" of FT_SBitRec has been changed to "max_grays" 95 in order to fit within a single byte. Its maximum value is thus 255 96 (instead of 256 as previously). 97 98 99 III. MISCELLANEOUS 100 101 - Added support for the DESTDIR variable during "make install". This 102 simplifies packaging of FreeType. 103 104 - included modified copies of the ZLib sources in 'src/gzip' in order 105 to support gzip-compressed PCF fonts. We do not use the system-provided 106 zlib for now, though this is a probable enhancement for future releases 107 108 - The DocMaker tool used to generate the on-line API reference has been 109 completely rewritten. It is now located in 110 "src/tools/docmaker/docmaker.py". Features: 111 112 - better cross-referenced output 113 - more polished output 114 - uses Python regular expressions (though it didn't speed the 115 program) 116 - much more modular structure, which allows for different "backends" 117 in order to generate HTML, XML, or whatever format. 118 119 One can regenerate the API reference by calling: 120 121 python src/tools/docmaker/docmaker.py \ 122 --prefix=ft2 \ 123 --title=FreeType-2.1.3 \ 124 --output=<outputdirectory> 125 include/freetype/*.h \ 126 include/freetype/config/*.h \ 127 include/freetype/cache/*.h 128 129 - A new, experimental, support for incremental font loading (i.e., 130 loading of fonts where the glyphs are not in the font file itself, but 131 provided by an external component, like a Postscript interpreter) has 132 been added by Graham Asher. This is still work in progress, however. 133 134 - A new, EXPERIMENTAL, path stroker has been added. It doesn't suffer 135 from severe rounding errors and treat bezier arcs directly. Still 136 work in progress (i.e. not part of the official API). See the file 137 <freetype/ftstroker.h> for some of the details. 138 139 - The massive re-formatting of sources and internal re-design is still 140 under-way. Many internal functions, constants, and types have been 141 renamed. 142 143 144======================================================================== 145 146LATEST CHANGES BETWEEN 2.1.2 and 2.1.1 147 148 I. IMPORTANT BUG FIXES 149 150 - Many font drivers didn't select a Unicode charmap by default when 151 a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS options 152 enabled), causing many applications to not be able to display text 153 correctly with the 2.1.x releases. 154 155 - The PFR driver had a bug in its composite loading code that produces 156 incorrectly placed accents with many fonts. 157 158 - The Type42 driver crashed sometimes due to a nasty bug. 159 160 - The Type 1 custom encoding charmap didn't handle the case where the 161 first glyph index wasn't 0. 162 163 - A serious typo in the TrueType composite loader produced incorrectly 164 placed glyphs in fonts like "Wingdings" and a few others. 165 166 167 II. MISCELLANEOUS 168 169 - The Win32 Visual C++ project file has been updated to include the 170 PFR driver as well. 171 172 - "freetype.m4" is now installed by default by "make install" on Unix 173 systems. 174 175 - The function FT_Get_PS_Font_Info now works with CID and Type42 fonts 176 as well. 177 178 179======================================================================== 180 181LATEST CHANGES BETWEEN 2.1.1 and 2.1.0 182 183 I. IMPORTANT BUG FIXES 184 185 - The `version_info' returned by `freetype-config' in 2.1.0 returned an 186 invalid value. It now returns 9:1:3 (2.0.9 returned 9:0:3). 187 188 - Version 2.1.0 couldn't be linked against applications on Win32 and 189 Amiga systems due to a new debug function that wasn't properly 190 propagated to the system-specific directory in `builds'. 191 192 - Various MacOS and Mac OS X specific fixes. 193 194 - Fixed a bug in the TrueType charmap validation routines that made 195 version 2.1.0 too restrictive -- many popular fonts have been 196 rejected. 197 198 - There was still a very small difference between the monochrome glyph 199 bitmaps produced by FreeType 1.x and FreeType 2.x with the bytecode 200 interpreter enabled. This was caused by an invalid flag setting in 201 the TrueType glyph loader, making the rasterizer change its drop-out 202 control mode. Now theresults should _really_ be completely identical. 203 204 - The TrueType name table loader has been improved to support many 205 popular though buggy Asian fonts. It now ignores empty name entries, 206 invalid pointer offsets and a few other incorrect subtleties. 207 Moreover, name strings are now loaded on demand, which reduces the 208 memory load of many faces (e.g. the ARIAL.TTF font file contains a 209 10kByte name table with 70 names). 210 211 - Fixed a bug in the Postscript hinter that prevented family blues 212 substitution to happen correctly. 213 214 215 II. NEW FEATURES 216 217 - Three new font drivers in this release: 218 219 * A BDF font driver, contributed by Franco Zappa Nardelli, heavily 220 modified by Werner Lemberg. It also supports anti-aliased bitmaps 221 (using a slightly extended BDF format). 222 223 * A Type42 font driver, contributed by Roberto Alameda. It is 224 still experimental but seems to work relatively well. 225 226 * A PFR font driver, contributed by David Turner himself. It doesn't 227 support PFR hinting -- note that BitStream has at least two patents 228 on this format! 229 230 231 III. MISCELLANEOUS 232 233 - The cache sub-system has been optimized in important ways. Cache hits 234 are now significantly faster. For example, using the CMap cache is 235 about twice faster than calling FT_Get_Char_Index on most platforms. 236 Similarly, using an SBit cache is about five times faster than loading 237 the bitmaps from a bitmap file, and 300 to 500 times faster than 238 generating them from a scalable format. 239 240 Note that you should recompile your sources if you designed a custom 241 cache class for the FT2 Cache subsystem, since the changes performed 242 are source, but not binary, compatible. 243 244 245======================================================================== 246 247LATEST CHANGES BETWEEN 2.1.0 and 2.0.9 248 249 I. IMPORTANT BUG FIXES 250 251 - The TrueType bytecode interpreter has been fixed to produce 252 _exactly_ the same output as FreeType 1.x. Previous differences 253 were due to slightly distinct fixed-point computation routines 254 used to perform dot products and vector length measurements. 255 256 It seems that native TrueType hinting is _extremely_ sensitive 257 to rounding errors. The required vector computation routines have 258 been optimized and placed within the "ttinterp.c" file. 259 260 - Fixed the parsing of accelerator tables in the PCF font driver. 261 262 - Fixed the Type1 glyph loader routine used to compute the font's 263 maximum advance width. 264 265 II. NEW FEATURES 266 267 - The `configure' script used on Unix systems has been modified to 268 check that GNU Make is being used to build the library. Otherwise, 269 it will display a message proposing to use the GNUMAKE environment 270 variable to name it. 271 272 The Unix-specific file README.UNX has been modified accordingly. 273 274 275 III. MISCELLANEOUS 276 277 - The FreeType License in `docs/FTL.txt' has been updated to include 278 a proposed preferred disclaimer. If you are using FreeType in your 279 products, you are encouraged (but not mandated) to use the following 280 text in your documentation: 281 282 """ 283 Portions of this software are copyright � 1996-2002 The FreeType 284 Project (www.freetype.org). All rights reserved. 285 """ 286 287 - The default size of the render pool has been reduced to 16kByte. 288 This shouldn't result in any noticeable performance penalty, unless 289 you are using the engine as-is to render very large and complex 290 glyphs. 291 292 - The FreeType 2 redesign has begun. More information can be found 293 at this URL: 294 295 http://www.freetype.org/freetype2/redesign.html 296 297 The following internal changes have been performed within the sources 298 of this release: 299 300 - Many internal types have been renamed to increase consistency. 301 The following should be true, except for public types: 302 303 * All structure types have a name ending in "Rec" (short for 304 `record'). 305 306 * A pointer-to-structure type has the same name as the 307 structure, _without_ the "Rec" suffix. 308 309 Example: 310 311 typedef struct FooRec_ 312 { 313 ... 314 315 } FooRec, *Foo; 316 317 - Many internal macros have been renamed to increase consistency. 318 The following should be true: 319 320 * All macros have a name beginning with "FT_". This required 321 a few changes like 322 323 ALLOC => FT_ALLOC 324 FREE => FT_FREE 325 REALLOC => FT_REALLOC 326 327 * All macros are completely UPPERCASE. This required a few 328 changes like: 329 330 READ_Short => FT_READ_SHORT 331 NEXT_Short => FT_NEXT_SHORT 332 GET_ULongLE => FT_GET_ULONG_LE 333 MEM_Set => FT_MEM_SET 334 MEM_Copy => FT_MEM_COPY 335 etc. 336 337 * Whenever possible, all macro names follow the 338 FT_<OBJECT>_<METHOD> pattern. For example 339 340 ACCESS_Frame => FT_FRAME_ENTER 341 FORGET_Frame => FT_FRAME_EXIT 342 EXTRACT_Frame => FT_FRAME_EXTRACT 343 RELEASE_Frame => FT_FRAME_RELEASE 344 345 FILE_Pos => FT_STREAM_POS 346 FILE_Seek => FT_STREAM_SEEK 347 FILE_Read => FT_STREAM_READ 348 FILE_ReadAt => FT_STREAM_READ_AT 349 READ_Fields => FT_STREAM_READ_FIELDS 350 351 - Many internal functions have been renamed to follow the 352 FT_<Object>_<Method> pattern. For example: 353 354 FT_Seek_Stream => FT_Stream_Seek 355 FT_Read_Stream_At => FT_Stream_ReadAt 356 FT_Done_Stream => FT_Stream_Close 357 FT_New_Stream => FT_Stream_Open 358 FT_New_Memory_Stream => FT_Stream_OpenMemory 359 FT_Extract_Frame => FT_Stream_ExtractFrame 360 361 Note that method names do not contain "_". 362 363 - The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced 364 with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a type 365 as the fourth argument. Instead, the array element type size 366 is computed automatically from the type of the target pointer 367 used. 368 369 - A new object class, FT_CMap, has been introduced. These 370 internal objects are used to model character maps. This eases 371 the support of additional charmap types within the engine. 372 373 - A new configuration file named "ftstdlib.h" has been added 374 to `include/freetype/config'. It is used to define aliases 375 for _every_ routine of the ISO C library that the font engine 376 uses. Each aliases has a "ft_" prefix (e.g. "ft_strlen" is an 377 alias for "strlen"). 378 379 This is used to ease the porting of FreeType 2 to exotic runtime 380 environments where the ISO C Library isn't available (e.g. 381 XFree86 extension modules). 382 383 More details are available in the "ChangeLog" file. 384 385 386============================================================================ 387 388LATEST CHANGES BETWEEN 2.0.9 and 2.0.8 389 390 I. IMPORTANT BUG FIXES 391 392 - Certain fonts like "foxjump.ttf" contain broken name tables with 393 invalid entries and wild offsets. This caused FreeType to crash when 394 trying to load them. 395 396 The SFNT `name' table loader has been fixed to be able to support 397 these strange fonts. 398 399 Moreover, the code in charge of processing this table has been changed 400 to always favour Windows-formatted entries over other ones. Hence, a 401 font that works on Windows but not on the Mac will load cleanly in 402 FreeType and report accurate values for Family & PostScript names. 403 404 - The CID font driver has been fixed. It unfortunately returned a 405 Postscript Font name with a leading slash, as in 406 "/MunhwaGothic-Regular". 407 408 - FreeType 2 should now compile fine on AIX 4.3.3 as a shared library. 409 410 - A bug in the Postscript hinter has been found and fixed, removing 411 un-even stem widths at small pixel sizes (like 14-17). 412 413 This improves the quality of a certain number of Postscript fonts. 414 415 416 II. NEW FEATURES 417 418 - A new function named `FT_Library_Version' has been added to return 419 the current library's major, minor, and patch version numbers. This 420 is important since the macros FREETYPE_MAJOR, FREETYPE_MINOR, and 421 FREETYPE_PATCH cannot be used when the library is dynamically linked 422 by a program. 423 424 - Two new APIs have been added: `FT_Get_First_Char' and 425 `FT_Get_Next_Char'. 426 427 Together, these can be used to iterate efficiently over the currently 428 selected charmap of a given face. Read the API reference for more 429 details. 430 431 432 III. MISCELLANEOUS 433 434 - The FreeType sources are under heavy internal re-factoring. As a 435 consequence, we have created a branch named "STABLE" on the CVS to 436 hold all future releases/fixes in the 2.0.x family. 437 438 The HEAD branch now contains the re-factored sources and shouldn't be 439 used for testing or packaging new releases. In case you would like 440 to access the 2.0.9 sources from our CVS repository, use the tag 441 `VER-2-0-9'. 442 443 444============================================================================ 445 446LATEST CHANGES BETWEEN 2.0.8 and 2.0.7 447 448 I. IMPORTANT BUG FIXES 449 450 - There was a small but nasty bug in "freetype-config.in" which 451 caused the "freetype-config" script to fail on Unix. 452 453 This didn't prevent the installation of the library or even 454 its execution, but caused problems when trying to compile many 455 Unix packages that depend on it. 456 457 - Some TrueType or OpenType fonts embedded in PDF documents do 458 not have a 'cmap', 'post' and 'name' as is required by the 459 specification. FreeType no longer refuses to load such fonts. 460 461 - various fixes to the PCF font driver 462 463 464============================================================================ 465 466LATEST CHANGES BETWEEN 2.0.7 and 2.0.6 467 468 I. IMPORTANT BUG FIXES 469 470 - Fixed two bugs in the Type 1 font driver. The first one resulted in a 471 memory leak in subtle cases. The other one caused FreeType to crash 472 when trying to load ".gsf" files (Ghostscript so-called Postscript 473 fonts). 474 475 (This made _many_ KDE applications crash on certain systems. FreeType 476 _is_ becoming a critical system component on Linux :-) 477 478 - Fixed a memory leak in the CFF font driver. 479 480 - Fixed a memory leak in the PCF font driver. 481 482 - Fixed the Visual C++ project file "builds/win32/visualc/freetype.dsp" 483 since it didn't include the Postscript hinter component, causing 484 errors at build time. 485 486 - Fixed a small rendering bug in the anti-aliased renderer that only 487 occurred when trying to draw thin (less than 1 pixel) strokes. 488 489 - Fixed "builds/unix/freetype2.a4" which is used to generate a valid 490 "freetype2.m4" for use with autoconf. 491 492 - Fixed the OpenVMS Makefiles. 493 494 495 II. MISCELLANEOUS 496 497 - Added "configure" and "install" scripts to the top-level directory. 498 A GNU-style installation is thus now easily possible with 499 500 ./configure <options> 501 make 502 make install 503 504 505============================================================================ 506 507LATEST CHANGES BETWEEN 2.0.6 and 2.0.5 508 509 I. IMPORTANT BUG FIXES 510 511 - It wasn't possible to load embedded bitmaps when the auto-hinter was 512 used. This is now fixed. 513 514 - The TrueType font driver didn't load some composites properly (the 515 sub-glyphs were slightly shifted, and this was only noticeable when 516 using monochrome rendering). 517 518 - Various fixes to the auto-hinter. They merely improve the output of 519 sans-serif fonts. Note that there are still problems with serifed 520 fonts and composites (accented characters). 521 522 - All scalable font drivers erroneously returned un-fitted glyph 523 advances when hinting was requested. This created problems for a 524 number of layout applications. This is a very old bug that got 525 undetected mainly because most test/demo program perform rounding 526 explicitly or implicitly (through the cache). 527 528 - FT_Glyph_To_Bitmap() did erroneously modify the source glyph in 529 certain cases. 530 531 - "glnames.py" still contained a bug that made FreeType return invalid 532 names for certain glyphs. 533 534 - The library crashed when loading certain Type 1 fonts like "sadn.pfb" 535 ("Stalingrad Normal"), which appear to contain pathetic font info 536 dictionaries. 537 538 - The TrueType glyph loader is now much more paranoid and checks everything 539 when loading a given glyph image. This was necessary to avoid 540 problems (crashes and/or memory overwrites) with broken fonts that 541 came from a really buggy automatic font converter. 542 543 544 II. IMPORTANT UPDATES AND NEW FEATURES 545 546 - Important updates to the Mac-specific parts of the library. 547 548 - The caching sub-system has been completely re-designed, and its API 549 has evolved (the old one is still supported for backwards 550 compatibility). 551 552 The documentation for it is not yet completed, sorry. For now, you 553 are encouraged to continue using the old API. However, the ftview 554 demo program in the ft2demos package has already been updated to use 555 the new caching functions. 556 557 - A new charmap cache is provided too. See FTC_CMapCache(). This is 558 useful to perform character code -> glyph index translations quickly, 559 without the need for an opened FT_Face. 560 561 - A NEW POSTSCRIPT HINTER module has been added to support native hints 562 in the following formats: PostScript Type 1, PostScript CID, and 563 CFF/CEF. 564 565 Please test! Note that the auto-hinter produces better results for a 566 number of badly-hinted fonts (mostly auto-generated ones) though. 567 568 - A memory debugger is now part of the standard FreeType sources. To 569 enable it, define FT_DEBUG_MEMORY in <freetype/config/ftoption.h>, and 570 recompile the library. 571 572 Additionally, define the _environment_ variable FT_DEBUG_MEMORY and 573 run any program using FreeType. When the library is exited, a summary 574 of memory footprints and possible leaks will be displayed. 575 576 This works transparently with _any_ program that uses FreeType. 577 However, you will need a lot of memory to use this (allocated blocks 578 are never released to the heap to detect double deletes easily). 579 580 581 III. MISCELLANEOUS 582 583 - We are aware of subtle differences between the output of FreeType 584 versions 1 and 2 when it comes to monochrome TrueType-hinted glyphs. 585 These are most probably due to small differences in the monochrome 586 rasterizers and will be worked out in an upcoming release. 587 588 - We have decided to fork the sources in a "stable" branch, and an 589 "unstable" one, since FreeType is becoming a critical component of 590 many Unix systems. 591 592 The next bug-fix releases of the library will be named 2.0.7, 2.0.8, 593 etc., while the "2.1" branch will contain a version of the sources 594 where we will start major reworking of the library's internals, in 595 order to produce FreeType 2.2.0 (or even 3.0) in a more distant 596 future. 597 598 We also hope that this scheme will allow much more frequent releases 599 than in the past. 600 601 602============================================================================ 603 604LATEST CHANGES BETWEEN 2.0.5 and 2.0.4 605 606 NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE WILL 607 BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1) 608 609 - Fixed a bug that made certain glyphs, like "Cacute", "cacute" and 610 "lslash" unavailable from Unicode charmaps of Postscript fonts. This 611 prevented the correct display of Polish text, for example. 612 613 - The kerning table of Type 1 fonts was loaded by FreeType, when its AFM 614 file was attached to its face, but the FT_FACE_FLAG_HAS_KERNING bit 615 flags was not set correctly, preventing FT_Get_Kerning to return 616 meaningful values. 617 618 - Improved SFNT (TrueType & OpenType) charmap support. Slightly better 619 performance, as well as support for the new formats defined by the 620 OpenType 1.3 specification (8, 10, and 12) 621 622 - Fixed a serious typo in "src/base/ftcalc.c" which caused invalid 623 computations in certain rare cases, producing ugly artefacts. 624 625 - The size of the EM square is computed with a more accurate algorithm 626 for Postscript fonts. The old one caused slight errors with embedded 627 fonts found in PDF documents. 628 629 - Fixed a bug in the cache manager that prevented normal LRU behaviour 630 within the cache manager, causing unnecessary reloads (for FT_Face and 631 FT_Size objects only). 632 633 - Added a new function named "FT_Get_Name_Index" to retrieve the glyph 634 index of a given glyph name, when found in a face. 635 636 - Added a new function named "FT_Get_Postscript_Name" to retrieve the 637 "unique" Postscript font name of a given face. 638 639 - Added a new public header size named FT_SIZES_H (or 640 <freetype/ftsizes.h>) providing new FT_Size-management functions: 641 FT_New_Size, FT_Activate_Size, FT_Done_Size. 642 643 - Fixed a reallocation bug that generated a dangling pointer (and possibly 644 memory leaks) with Postscript fonts (in src/psaux/psobjs.c). 645 646 - Many fixes for 16-bit correctness. 647 648 - Removed many pedantic compiler warnings from the sources. 649 650 - Added an Amiga build directory in "builds/amiga". 651 652============================================================================ 653 654LATEST CHANGES BETWEEN 2.0.4 and 2.0.3 655 656 - Fixed a rather annoying bug that was introduced in 2.0.3. Namely, the 657 font transformation set through FT_Set_Transform was applied twice to 658 auto-hinted glyphs, resulting in incorrectly rotated text output. 659 660 - Fixed _many_ compiler warnings. FT2 should now compile cleanly with 661 Visual C++'s most pedantic warning level (/W4). It already compiled 662 fine with GCC and a few other compilers. 663 664 - Fixed a bug that prevented the linear advance width of composite 665 TrueType glyphs to be correctly returned. 666 667 - Fixed the Visual C++ project files located in "builds/win32/visualc" 668 (previous versions used older names of the library). 669 670 - Many 32-bit constants have an "L" appended to their value, in order 671 to improve the 16-bitness of the code. Someone is actually trying to 672 use FT2 on an Atari ST machine! 673 674 - Updated the "builds/detect.mk" file in order to automatically build 675 FT2 on AIX systems. AIX uses "/usr/sbin/init" instead of "/sbin/init" 676 and wasn't previously detected as a Unix platform by the FreeType build 677 system. 678 679 - Updated the Unix-specific portions of the build system (new libtool 680 version, etc.). 681 682 - The SFNT kerning lodaer now ensures that the table is sorted (since some 683 problem fonts do not meet this requirement). 684 685============================================================================ 686 687LATEST CHANGES BETWEEN 2.0.3 and 2.0.2 688 689 I. CHANGES TO THE MODULES / FONT DRIVERS 690 691 - THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix several 692 annoying artefacts, mainly: 693 694 - Blue zone alignement of horizontal stems wasn't performed 695 correctly, resulting in artefacts like the "d" being placed one 696 pixel below the "b" in some fonts like Time New Roman. 697 698 - Overshoot thresholding wasn't performed correctly, creating 699 unpleasant artefacts at large character pixel sizes. 700 701 - Composite glyph loading has been simplified. This gets rid 702 of various artefacts where the components of a composite glyphs 703 were not correctly spaced. 704 705 These are the last changes to the current auto-hinting module. A new 706 hinting sub-system is currently in the work in order to support native 707 hints in Type 1 / CFF / OpenType fonts, as well as globally improve 708 rendering. 709 710 - The PCF driver has been fixed. It reported invalid glyph dimensions 711 for the fonts available on Solaris. 712 713 - The Type 1, CID and CFF drivers have been modified to fix the 714 computation of the EM size. 715 716 - The Type 1 driver has been fixed to avoid a dangerous bug that 717 crashed the library with non-conforming fonts (i.e. ones that do not 718 place the .notdef glyph at position 0). 719 720 - The TrueType driver had a rather subtle bug (dangling pointer when 721 loading composite glyphs) that could crash the library in rare 722 occasions! 723 724 725 II. HIGH-LEVEL API CHANGES 726 727 - The error code enumeration values have been changed. An error value 728 is decomposed in a generic error code, and a module number. see 729 <freetype/fterrors.h> for details. 730 731 - A new public header file has been introduced, named FT_TRIGONOMETRY_H 732 (include/freetype/fttrig.h), providing trigonometric functions to 733 compute sines, cosines, arctangents, etc. with 16.16 fixed precision. 734 The implementation is based on the CORDIC algorithm and is very fast 735 while being sufficiently accurate. 736 737 738 III. INTERNALS 739 740 - Added BeOS-specific files in the old build sub-system. Note that 741 no changes were required to compile the library with Jam. 742 743 - The configuration is now capable of automatically detecting 64-bit 744 integers on a set of predefined compilers (GCC, Visual C++, Borland 745 C++) and will use them by default. This provides a small performance 746 boost. 747 748 - A small memory leak that happened when opening 0-sized files (duh!) 749 have been fixed. 750 751 - Fixed bezier stack depth bug in the routines provided by the 752 FT_BBOX_H header file. Also fixed similar bugs in the rasterizers. 753 754 - The outline bounding box code has been rewritten to use direct 755 computations, instead of bezier sub-division, to compute the exact 756 bounding box of glyphs. This is slightly slower but more accurate. 757 758 - The build system has been improved and fixed, mainly to support "make" 759 on Windows 2000 correctly, avoid problems with "make distclean" on non 760 Unix systems, etc. 761 762 - Hexadecimal constants have been suffixed with "U" to avoid problems 763 with certain compilers on 64-bit platforms. 764 765 - A new directory named "src/tools" has been created. It contains 766 Python scripts and simple unit test programs used to develop the 767 library. 768 769 - The DocMaker tool has been moved from "docs" to "src/tools" and 770 has been updated with the following: 771 772 - Now accepts the "--title=XXXX" or "-t XXXX" option from the 773 command line to set the project's name in the generated API 774 reference. 775 776 - Now accepts the "--output=DIR" or "-o DIR" option from the 777 command line to set the output directory for all generated HTML 778 files. 779 780 - Now accepts the "--prefix=XXXX" or "-p XXX" option from the 781 command line to set the file prefix to use for all generated HTML 782 files. 783 784 - Now generates the current time/data on each generated page 785 in order to distinguish between versions. 786 787 DocMaker can be used with other projects now, not only FT2 (e.g. MLib, 788 FTLayout, etc.). 789 790=========================================================================== 791 792LATEST CHANGES BETWEEN 2.0.2 and 2.0.1 793 794 795 I. CHANGES TO THE MODULES / FONT DRIVERS 796 797 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to 798 avoid legal problems with the Apple patents. It seems that we 799 mistakenly turned this option on in previous releases of the 800 build. 801 802 Note that if you want to use the bytecode interpreter in order 803 to get high-quality TrueType rendering, you will need to toggle 804 by hand the definition of the 805 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file 806 "include/freetype/config/ftoption.h". 807 808 - The CFF driver has been improved by Tom Kacvinsky and Sander van 809 der Wal: 810 811 * Support for "seac" emulation. 812 * Support for "dotsection". 813 * Support for retrieving glyph names through 814 "FT_Get_Glyph_Name". 815 816 The first two items are necessary to correctly a large number of 817 Type 1 fonts converted to the CFF formats by Adobe Acrobat. 818 819 - The Type 1 driver was also improved by Tom & others: 820 821 * Better EM size computation. 822 * Better support for synthetic (transformed) fonts. 823 * The Type 1 driver returns the charstrings corresponding to 824 each glyph in the "glyph->control_data" field after a call to 825 "FT_Load_Glyph" (thanks Ha Shao). 826 827 - Various other bugfixes, including the following: 828 829 * Fixed a nasty memory leak in the Type 1 driver. 830 * The autohinter and the pcf driver used static writable data 831 when they shouldn't. 832 * Many casts were added to make the code more 64-bits safe. It 833 also now compiles on Windows XP 64-bits without warnings. 834 * Some incorrect writable statics were removed in the "autohint" 835 and "pcf" drivers. FreeType 2 now compiles on Epoc again. 836 837 838 II. CHANGES TO THE HIGH-LEVEL API 839 840 - The library header files inclusion scheme has been changed. The 841 old scheme looked like: 842 843 #include <freetype/freetype.h> 844 #include <freetype/ftglyph.h> 845 #include <freetype/ftcache.h> 846 #include <freetype/cache/ftimage.h> 847 848 Now you should use: 849 850 #include <ft2build.h> 851 #include FT_FREETYPE_H 852 #include FT_GLYPH_H 853 #include FT_CACHE_H 854 #include FT_CACHE_IMAGE_H 855 856 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS 857 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE 858 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1). 859 860 The file <ft2build.h> is used to define the header filename 861 macros. The complete and commented list of macros is available 862 in the API reference under the section name "Header File Macros" 863 in Chapter I. 864 865 For more information, see section I of the following document: 866 867 http://www.freetype.org/ 868 freetype2/docs/tutorial/step1.html 869 870 or 871 872 http://freetype.sourceforge.net/ 873 freetype2/docs/tutorial/step1.html 874 875 - Many, many comments have been added to the public source file in 876 order to automatically generate the API Reference through the 877 "docmaker.py" Python script. 878 879 The latter has been updated to support the grouping of sections 880 in chapters and better index sort. See: 881 882 http://www.freetype.org/freetype2/docs/reference/ft2-toc.html 883 884 885 III. CHANGES TO THE BUILD PROCESS 886 887 - If you are not building FreeType 2 with its own build system 888 (but with your own Makefiles or project files), you will need to 889 be aware that the build process has changed a little bit. 890 891 You don't need to put the "src" directory in the include path 892 when compiling any FT2 component. Instead, simply put the 893 component's directory in the current include path. 894 895 So, if you were doing something like: 896 897 cc -c -Iinclude -Isrc src/base/ftbase.c 898 899 change the line to: 900 901 cc -c -Iinclude -Isrc/base src/base/ftbase.c 902 903 If you were doing something like: 904 905 cd src/base 906 cc -c -I../../include -I.. ftbase.c 907 908 change it to: 909 910 cd src/base 911 cc -c -I../../include ftbase.c 912 913 914====================================================================== 915 916LATEST CHANGES BETWEEN 2.0.1 and 2.0 917 918 2.0.1 introduces a few changes: 919 920 - Fixed many bugs related to the support of CFF / OpenType fonts. 921 These formats are now much better supported though there is 922 still work planned to deal with charset tables and PDF-embedded 923 CFF files that use the old "seac" command. 924 925 - The library could not be compiled in debug mode with a very 926 small number of C compilers whose pre-processors didn't 927 implement the "##" directive correctly (i.e. per se the ANSI C 928 specification!) An elegant fix was found. 929 930 - Added support for the free Borland command-line C++ Builder 931 compiler. Use "make setup bcc32". Also fixed a few source 932 lines that generated new warnings with BCC32. 933 934 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of 935 a conic Bezier arc. 936 937 - Updated the INSTALL file to add IDE compilation. 938 939 - Other minor bug fixes, from invalid Type 1 style flags to 940 correct support of synthetic (obliqued) fonts in the 941 auto-hinter, better support for embedded bitmaps in a SFNT font. 942 943 - Fixed some problems with "freetype-config". 944 945 Finally, the "standard" scheme for including FreeType headers is now 946 gradually changing, but this will be explained in a later release 947 (probably 2.0.2). 948 949 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi 950 for their contributions! 951 952 953====================================================================== 954 955CHANGES BETWEEN beta8 and 2.0 956 957 - Changed the default installation path for public headers from 958 "include/freetype" to "include/freetype2". 959 960 Also added a new "freetype-config" that is automatically generated 961 and installed on Unix and Cygwin systems. The script itself is 962 used to retrieve the current install path, C compilation flags as 963 well as linker flags. 964 965 - Fixed several small bugs: 966 967 * Incorrect max advance width for fixed-pitch Type 1 fonts. 968 * Incorrect glyph names for certain TrueType fonts. 969 * The glyph advance was not copied when FT_Glyph_To_Bitmap was 970 called. 971 * The linearHoriAdvance and linerVertAdvance fields were not 972 correctly returned for glyphs processed by the auto-hinter. 973 * "type1z" renamed back to "type1"; the old "type1" module has 974 been removed. 975 976 - Revamped the build system to make it a lot more generic. This 977 will allow us to re-use nearly un-modified in lots of other 978 projects (including FreeType Layout). 979 980 - Changed "cid" to use "psaux" too. 981 982 - Added the cache sub-system. See <freetype/ftcache.h> as well as 983 the sources in "src/cache". Note that it compiles but is still 984 untested for now. 985 986 - Updated "docs/docmaker.py", a draft API reference is available at 987 http://www.freetype.org/ft2api.html. 988 989 - Changed "type1" to use "psaux". 990 991 - Created a new module named "psaux" to hold the Type 1 & Type 2 992 parsing routines. It should be used by "type1", "cid", and "cff" 993 in the future. 994 995 - Fixed an important bug in "FT_Glyph_Get_CBox". 996 997 - Fixed some compiler warnings that happened since the TrueType 998 bytecode decoder was deactivated by default. 999 1000 - Fixed two memory leaks: 1001 1002 * The memory manager (16 bytes) isn't released in 1003 FT_Done_FreeType! 1004 * Using custom input streams, the copy of the original stream was 1005 never released. 1006 1007 - Fixed the auto-hinter by performing automatic computation of the 1008 "filling direction" of each glyph. This is done through a simple 1009 and fast approximation, and seems to work (problems spotted by 1010 Werner though). The Arphic fonts are a lot nicer though there are 1011 still a lot of things to do to handle Asian fonts correctly. 1012 1013 1014====================================================================== 1015 1016BETA-8 (RELEASE CANDIDATE) CHANGES 1017 1018 - Deactivated the TrueType bytecode interpreter by default. 1019 1020 - Deactivated the "src/type1" font driver. Now "src/type1z" is used 1021 by default. 1022 1023 - Updates to the build system. We now compile the library correctly 1024 under Unix system through "configure" which is automatically 1025 called on the first "make" invocation. 1026 1027 - Added the auto-hinting module! Fixing some bugs here and there. 1028 1029 - Found some bugs in the composite loader (seac) of the Type1-based 1030 font drivers. 1031 1032 - Renamed the directory "freetype2/config" to "freetype2/builds" and 1033 updated all relevant files. 1034 1035 - Found a memory leak in the "type1" driver. 1036 1037 - Incorporated Tom's patches to support flex operators correctly in 1038 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF 1039 fonts to be done with this driver :-) 1040 1041 - Added the Windows FNT/FON driver in "src/winfonts". For now, it 1042 always "simulates" a Unicode charmap, so it shouldn't be 1043 considered completed right now. 1044 1045 It is there to be more a proof of concept than anything else 1046 anyway. The driver is a single C source file, that compiles to 3 1047 Kb of code. 1048 1049 I'm still working on the PCF/BDF drivers, but I'm too lazy to 1050 finish them now. 1051 1052 - CHANGES TO THE HIGH-LEVEL API 1053 1054 * FT_Get_Kerning has a new parameter that allows you to select the 1055 coordinates of the kerning vector (font units, scaled, scaled + 1056 grid-fitted). 1057 * The outline functions are now in <freetype/ftoutln.h> and not 1058 part of <freetype/freetype.h> anymore. 1059 * <freetype/ftmodule.h> now contains declarations for 1060 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules. 1061 * The so-called convenience functions have moved from "ftoutln.c" 1062 to "ftglyph.c", and are thus available with this optional 1063 component of the library. They are declared in 1064 <freetype/ftglyph.h> now. 1065 * Anti-aliased rendering is now the default for FT_Render_Glyph 1066 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal). 1067 To generate a monochrome bitmap, use ft_render_mode_mono, or the 1068 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char. 1069 FT_LOAD_ANTI_ALIAS is still defined, but values to 0. 1070 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>, 1071 solving a few headaches :-) 1072 * The type FT_GlyphSlotRec has now a "library" field. 1073 1074 - CHANGES TO THE "ftglyph.h" API 1075 1076 This API has been severely modified in order to make it simpler, 1077 clearer, and more efficient. It certainly now looks like a real 1078 "glyph factory" object, and allows client applications to manage 1079 (i.e. transform, bbox and render) glyph images without ever 1080 knowing their original format. 1081 1082 - Added support for CID-keyed fonts to the CFF driver. Maybe 1083 support for pure CFF + CEF fonts should come in? 1084 1085 - Cleaned up source code in order to avoid two functions with the 1086 same name. Also changed the names of the files in "type1z" from 1087 "t1XXXX" to "z1XXXX" in order to avoid any conflicts. 1088 1089 "make multi" now works well :-) 1090 1091 Also removed the use of "cidafm" for now, even if the source files 1092 are still there. This functionality will certainly go into a 1093 specific module. 1094 1095 - ADDED SUPPORT FOR THE AUTO-HINTER 1096 1097 It works :-) I have a demo program which simply is a copy of 1098 "ftview" that does a `FT_Add_Module(library, 1099 &autohinter_module_class)' after library initialization, and Type 1100 1 & OpenType/CFF fonts are now hinted. 1101 1102 CID fonts are not hinted, as they include no charmap and the 1103 auto-hinter doesn't include "generic" global metrics computations 1104 yet. 1105 1106 Now, I need to release this thing to the FreeType 2 source. 1107 1108 - CHANGES TO THE RENDERER MODULES 1109 1110 The monochrome and smooth renderers are now in two distinct 1111 directories, namely "src/raster1" and "src/smooth". Note that the 1112 old "src/renderer" is now gone. 1113 1114 I ditched the 5-gray-levels renderers. Basically, it involved a 1115 simple #define toggle in 'src/raster1/ftraster.c'. 1116 1117 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now 1118 select the best renderer available, depending on render mode. If 1119 the current renderer for a given glyph image format isn't capable 1120 of supporting the render mode, another one will be found in the 1121 library's list. This means that client applications do not need 1122 to switch or set the renderers themselves (as in the latest 1123 change), they'll get what they want automatically. At last. 1124 1125 Changed the demo programs accordingly. 1126 1127 - MAJOR INTERNAL REDESIGN: 1128 1129 A lot of internal modifications have been performed lately on the 1130 source in order to provide the following enhancements: 1131 1132 * More generic module support: 1133 1134 The FT_Module type is now defined to represent a handle to a 1135 given module. The file <freetype/ftmodule.h> contains the 1136 FT_Module_Class definition, as well as the module-loading public 1137 API. 1138 1139 The FT_Driver type is still defined, and still represents a 1140 pointer to a font driver. Note that FT_Add_Driver is replaced 1141 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc. 1142 1143 * Support for generic glyph image types: 1144 1145 The FT_Renderer type is a pointer to a module used to perform 1146 various operations on glyph image. 1147 1148 Each renderer is capable of handling images in a single format 1149 (e.g. ft_glyph_format_outline). Its functions are used to: 1150 1151 - transform an glyph image 1152 - render a glyph image into a bitmap 1153 - return the control box (dimensions) of a given glyph image 1154 1155 The scan converters "ftraster.c" and "ftgrays.c" have been moved 1156 to the new directory "src/renderer", and are used to provide two 1157 default renderer modules. 1158 1159 One corresponds to the "standard" scan-converter, the other to 1160 the "smooth" one. 1161 1162 he current renderer can be set through the new function 1163 FT_Set_Renderer. 1164 1165 The old raster-related function FT_Set_Raster, FT_Get_Raster and 1166 FT_Set_Raster_Mode have now disappeared, in favor of the new: 1167 1168 FT_Get_Renderer 1169 FT_Set_Renderer 1170 1171 See the file <freetype/ftrender.h> for more details. 1172 1173 These changes were necessary to properly support different 1174 scalable formats in the future, like bi-color glyphs, etc. 1175 1176 * Glyph loader object: 1177 1178 A new internal object, called a 'glyph loader' has been 1179 introduced in the base layer. It is used by all scalable format 1180 font drivers to load glyphs and composites. 1181 1182 This object has been created to reduce the code size of each 1183 driver, as each one of them basically re-implemented its 1184 functionality. 1185 1186 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for 1187 more information. 1188 1189 * FT_GlyphSlot has new fields: 1190 1191 In order to support extended features (see below), the 1192 FT_GlyphSlot structure has a few new fields: 1193 1194 linearHoriAdvance: 1195 1196 This field gives the linearly scaled (i.e. scaled but 1197 unhinted) advance width for the glyph, expressed as a 16.16 1198 fixed pixel value. This is useful to perform WYSIWYG text. 1199 1200 linearVertAdvance: 1201 This field gives the linearly scaled advance height for the 1202 glyph (relevant in vertical glyph layouts only). This is 1203 useful to perform WYSIWYG text. 1204 1205 Note that the two above field replace the removed "metrics2" 1206 field in the glyph slot. 1207 1208 advance: 1209 This field is a vector that gives the transformed advance for 1210 the glyph. By default, it corresponds to the advance width, 1211 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling 1212 FT_Load_Glyph or FT_Load_Char. 1213 1214 bitmap_left: 1215 This field gives the distance in integer pixels from the 1216 current pen position to the left-most pixel of a glyph image 1217 IF IT IS A BITMAP. It is only valid when the "format" field 1218 is set to "ft_glyph_format_bitmap", for example, after calling 1219 the new function FT_Render_Glyph. 1220 1221 bitmap_top: 1222 This field gives the distance in integer pixels from the 1223 current pen position (located on the baseline) to the top-most 1224 pixel of the glyph image IF IT IS A BITMAP. Positive values 1225 correspond to upwards Y. 1226 1227 loader: 1228 This is a new private field for the glyph slot. Client 1229 applications should not touch it. 1230 1231 1232 * Support for transforms and direct rendering in FT_Load_Glyph: 1233 1234 Most of the functionality found in <freetype/ftglyph.h> has been 1235 moved to the core library. Hence, the following: 1236 1237 - A transform can be specified for a face through 1238 FT_Set_Transform. this transform is applied by FT_Load_Glyph 1239 to scalable glyph images (i.e. NOT TO BITMAPS) before the 1240 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM 1241 was set in the load flags. 1242 1243 - Once a glyph image has been loaded, it can be directly 1244 converted to a bitmap by using the new FT_Render_Glyph 1245 function. Note that this function takes the glyph image from 1246 the glyph slot, and converts it to a bitmap whose properties 1247 are returned in "face.glyph.bitmap", "face.glyph.bitmap_left" 1248 and "face.glyph.bitmap_top". The original native image might 1249 be lost after the conversion. 1250 1251 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph 1252 and FT_Load_Char functions will call FT_Render_Glyph 1253 automatically when needed. 1254 1255 - Reformatted all modules source code in order to get rid of the 1256 basic data types redifinitions (i.e. "TT_Int" instead of "FT_Int", 1257 "T1_Fixed" instead of "FT_Fixed"). Hence the format-specific 1258 prefixes like "TT_", "T1_", "T2_" and "CID_" are only used for 1259 relevant structures. 1260 1261 1262====================================================================== 1263 1264OLD CHANGES FOR BETA 7 1265 1266 - bug-fixed the OpenType/CFF parser. It now loads and displays my 1267 two fonts nicely, but I'm pretty certain that more testing is 1268 needed :-) 1269 1270 - fixed the crummy Type 1 hinter, it now handles accented characters 1271 correctly (well, the accent is not always well placed, but that's 1272 another problem..) 1273 1274 - added the CID-keyed Type 1 driver in "src/cid". Works pretty well 1275 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the 1276 really useful CMAP files.. 1277 1278 - fixed two bugs in the smooth renderer (src/base/ftgrays.c). Thanks 1279 to Boris Letocha for spotting them and providing a fix.. 1280 1281 - fixed potential "divide by zero" bugs in ftcalc.c.. my god.. 1282 1283 - added source code for the OpenType/CFF driver (still incomplete 1284 though..) 1285 1286 - modified the SFNT driver slightly to perform more robust header 1287 checks in TT_Load_SFNT_Header. This prevents certain font files 1288 (e.g. some Type 1 Multiple Masters) from being incorrectly 1289 "recognized" as TrueType font files.. 1290 1291 - moved a lot of stuff from the TrueType driver to the SFNT module, 1292 this allows greater code re-use between font drivers 1293 (e.g. TrueType, OpenType, Compact-TrueType, etc..) 1294 1295 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order 1296 to minimally speed it up.. 1297 1298 - added support for Multiple Master fonts in "type1z". There is also 1299 a new file named <freetype/ftmm.h> which defines functions to 1300 manage them from client applications. 1301 1302 The new file "src/base/ftmm.c" is also optional to the engine.. 1303 1304 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) + 1305 small bug fixes in FT_Load_Glyph, the "type1" driver, etc.. 1306 1307 - a minor fix to the Type 1 driver to let them apply the font matrix 1308 correctly (used for many oblique fonts..) 1309 1310 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls 1311 to use %p instead of %lx).. Thanks to Karl Robillard 1312 1313 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) + 1314 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be 1315 cropped when loaded from a file (maybe I should move the bitmap 1316 cropper to the base layer ??). 1317 1318 - changed the default number of gray levels of the smooth renderer 1319 to 256 (instead of the previous 128). Of course, the human eye 1320 can't see any difference ;-) 1321 1322 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number 1323 of subglyphs in a TrueType font now.. 1324 1325 1326====================================================================== 1327 1328OLD CHANGES 16 May 2000 1329 1330 - tagged "BETA-6" in the CVS tree. This one is a serious release 1331 candidate even though it doesn't incorporate the auto-hinter yet.. 1332 1333 - various obsolete files were removed, and copyright header updated 1334 1335 - finally updated the standard raster to fix the monochrome 1336 rendering bug + re-enable support for 5-gray levels anti-aliasing 1337 (suck, suck..) 1338 1339 - created new header files, and modified sources accordingly: 1340 1341 <freetype/fttypes.h> 1342 - simple FreeType types, without the API 1343 <freetype/internal/ftmemory.h> 1344 - definition of memory-management macros 1345 1346 - added the "DSIG" (OpenType Digital Signature) tag to 1347 <freetype/tttags.h> 1348 1349 - light update/cleaning of the build system + changes to the sources 1350 in order to get rid of _all_ compiler warnings with three 1351 compilers, i.e: 1352 1353 gcc with "-ansi -pedantic -Wall -W", Visual C++ with "/W3 /WX" and 1354 LCC 1355 1356 IMPORTANT NOTE FOR WIN32-LCC USERS: 1357 | 1358 | It seems the C pre-processor that comes with LCC is broken, it 1359 | doesn't recognize the ANSI standard directives # and ## 1360 | correctly when one of the argument is a macro. Also, something 1361 | like: 1362 | 1363 | #define F(x) print##x 1364 | 1365 | F(("hello")) 1366 | 1367 | will get incorrectly translated to: 1368 | 1369 | print "hello") 1370 | 1371 | by its pre-processor. For this reason, you simply cannot build 1372 | FreeType 2 in debug mode with this compiler.. 1373 1374 - yet another massive grunt work. I've changed the definition of the 1375 EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These now 1376 take an argument, which is the function's return value type. 1377 1378 This is necessary to compile FreeType as a DLL on Windows and 1379 OS/2. Depending on the compiler used, a compiler-specific keyword 1380 like __export or __system must be placed before (VisualC++) or 1381 after (BorlandC++) the type.. 1382 1383 Of course, this needed a lot of changes throughout the source code 1384 to make it compile again... All cleaned up now, apparently.. 1385 1386 Note also that there is a new EXPORT_VAR macro defined to allow 1387 the _declaration_ of an exportable public (constant) 1388 variable. This is the case of the raster interfaces (see 1389 ftraster.h and ftgrays.h), as well as each module's interface (see 1390 sfdriver.h, psdriver.h, etc..) 1391 1392 - new feature: it is now possible to pass extra parameters to font 1393 drivers when creating a new face object. For now, 1394 this capability is unused. It could however prove to 1395 be useful in a near future.. 1396 1397 the FT_Open_Args structure was changes, as well as the internal 1398 driver interface (the specific "init_face" module function has 1399 now a different signature). 1400 1401 - updated the tutorial (not finished though). 1402 1403 - updated the top-level BUILD document 1404 1405 - fixed a potential memory leak that could occur when loading 1406 embedded bitmaps. 1407 1408 - added the declaration of FT_New_Memory_Face in 1409 <freetype/freetype.h>, as it was missing from the public header 1410 (the implementation was already in "ftobjs.c"). 1411 1412 - the file <freetype/fterrors.h> has been seriously updated in order 1413 to allow the automatic generation of error message tables. See the 1414 comments within it for more information. 1415 1416 - major directory hierarchy re-organisation. This was done for two 1417 things: 1418 1419 * first, to ease the "manual" compilation of the library by 1420 requiring at lot less include paths :-) 1421 1422 * second, to allow external programs to effectively access 1423 internal data fields. For example, this can be extremely 1424 useful if someone wants to write a font producer or a font 1425 manager on top of FreeType. 1426 1427 Basically, you should now use the 'freetype/' prefix for header 1428 inclusion, as in: 1429 1430 #include <freetype/freetype.h> 1431 #include <freetype/ftglyph.h> 1432 1433 Some new include sub-directories are available: 1434 1435 a. the "freetype/config" directory, contains two files used to 1436 configure the build of the library. Client applications should 1437 not need to look at these normally, but they can if they want. 1438 1439 #include <freetype/config/ftoption.h> 1440 #include <freetype/config/ftconfig.h> 1441 1442 b. the "freetype/internal" directory, contains header files that 1443 describes library internals. These are the header files that 1444 were previously found in the "src/base" and "src/shared" 1445 directories. 1446 1447 1448 As usual, the build system and the demos have been updated to 1449 reflect the change.. 1450 1451 Here's a layout of the new directory hierarchy: 1452 1453 TOP_DIR 1454 include/ 1455 freetype/ 1456 freetype.h 1457 ... 1458 config/ 1459 ftoption.h 1460 ftconfig.h 1461 ftmodule.h 1462 1463 internal/ 1464 ftobjs.h 1465 ftstream.h 1466 ftcalc.h 1467 ... 1468 1469 src/ 1470 base/ 1471 ... 1472 1473 sfnt/ 1474 psnames/ 1475 truetype/ 1476 type1/ 1477 type1z/ 1478 1479 1480 Compiling a module is now much easier, for example, the following 1481 should work when in the TOP_DIR directory on an ANSI build: 1482 1483 gcc -c -I./include -I./src/base src/base/ftbase.c 1484 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c 1485 etc.. 1486 1487 (of course, using -Iconfig/<system> if you provide system-specific 1488 configuration files). 1489 1490 - updated the structure of FT_Outline_Funcs in order to allow direct 1491 coordinate scaling within the outline decomposition routine (this 1492 is important for virtual "on" points with TrueType outlines) + 1493 updates to the rasters to support this.. 1494 1495 - updated the OS/2 table loading code in "src/sfnt/ttload.c" in 1496 order to support version 2 of the table (see OpenType 1.2 spec) 1497 1498 - created "include/tttables.h" and "include/t1tables.h" to allow 1499 client applications to access some of the SFNT and T1 tables of a 1500 face with a procedural interface (see FT_Get_Sfnt_Table()) + 1501 updates to internal source files to reflect the change.. 1502 1503 - some cleanups in the source code to get rid of warnings when 1504 compiling with the "-Wall -W -ansi -pedantic" options in gcc. 1505 1506 - debugged and moved the smooth renderer to "src/base/ftgrays.c" and 1507 its header to "include/ftgrays.h" 1508 1509 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites 1510 with up to 80 sub-glyphs !! Thanks to Werner 1511 1512 1513====================================================================== 1514 1515OLD CHANGES - 14-apr-2000 1516 1517 - fixed a bug in the TrueType glyph loader that prevented the 1518 correct loading of some CJK glyphs in mingli.ttf 1519 1520 - improved the standard Type 1 hinter in "src/type1" 1521 1522 - fixed two bugs in the experimental Type 1 driver in "src/type1z" 1523 to handle the new XFree86 4.0 fonts (and a few other ones..) 1524 1525 - the smooth renderer is now complete and supports sub-banding to 1526 render large glyphs at high speed. However, it is still located in 1527 "demos/src/ftgrays.c" and should move to the library itself in the 1528 next beta.. NOTE: The smooth renderer doesn't compile in 1529 stand-alone mode anymore, but this should be fixed RSN.. 1530 1531 - introduced convenience functions to more easily deal with glyph 1532 images, see "include/ftglyph.h" for more details, as well as the 1533 new demo program named "demos/src/ftstring.c" that demonstrates 1534 its use 1535 1536 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1 1537 drivers (this is required by the auto-hinter to improve its 1538 results). 1539 1540 - changed the raster interface, in order to allow client 1541 applications to provide their own span-drawing callbacks. However, 1542 only the smooth renderer supports this. See "FT_Raster_Params" in 1543 the file "include/ftimage.h" 1544 1545 - fixed a small bug in FT_MulFix that caused incorrect transform 1546 computation! 1547 1548 - Note: The tutorial is out-of-date, grumpf.. :-( 1549 1550 1551====================================================================== 1552 1553OLD CHANGES - 12-mar-2000 1554 1555 - changed the layout of configuration files : now, all ANSI 1556 configuration files are located in 1557 "freetype2/config". System-specific over-rides can be placed in 1558 "freetype2/config/<system>". 1559 1560 - moved all configuration macros to "config/ftoption.h" 1561 1562 - improvements in the Type 1 driver with AFM support 1563 1564 - changed the fields in the FT_Outline structure : the old "flags" 1565 array is re-named "tags", while all ancient flags are encoded into 1566 a single unsigned int named "flags". 1567 1568 - introduced new flags in FT_Outline.flags (see 1569 ft_outline_.... enums in "ftimage.h"). 1570 1571 - changed outline functions to "FT_Outline_<action>" syntax 1572 1573 - added a smooth anti-alias renderer to the demonstration programs 1574 1575 - added Mac graphics driver (thanks Just) 1576 1577 - FT_Open_Face changed in order to received a pointer to a 1578 FT_Open_Args descriptor.. 1579 1580 - various cleanups, a few more API functions implemented (see 1581 FT_Attach_File) 1582 1583 - updated some docs 1584 1585 1586====================================================================== 1587 1588OLD CHANGES - 22-feb-2000 1589 1590 - introduced the "psnames" module. It is used to: 1591 1592 o convert a Postscript glyph name into the equivalent Unicode 1593 character code (used by the Type 1 driver(s) to synthetize on 1594 the fly a Unicode charmap). 1595 1596 o provide an interface to retrieve the Postscript names of the 1597 Macintosh, Adobe Standard & Adobe Expert character codes. 1598 (the Macintosh names are used by the SFNT-module postscript 1599 names support routines, while the other two tables are used by 1600 the Type 1 driver(s)). 1601 1602 - introduced the "type1z" alternate Type 1 driver. This is a (still 1603 experimental) driver for the Type 1 format that will ultimately 1604 replace the one in "src/type1". It uses pattern matching to load 1605 data from the font, instead of a finite state analyzer. It works 1606 much better than the "old" driver with "broken" fonts. It is also 1607 much smaller (under 15 Kb). 1608 1609 - the Type 1 drivers (both in "src/type1" and "src/type1z") are 1610 nearly complete. They both provide automatic Unicode charmap 1611 synthesis through the "psnames" module. No re-encoding vector is 1612 needed. (note that they still leak memory due to some code 1613 missing, and I'm getting lazy). 1614 1615 Trivial AFM support has been added to read kerning information but 1616 wasn't exactly tested as it should ;-) 1617 1618 - The TrueType glyph loader has been seriously rewritten (see the 1619 file "src/truetype/ttgload.c". It is now much, much simpler as 1620 well as easier to read, maintain and understand :-) Preliminary 1621 versions introduced a memory leak that has been reported by Jack 1622 Davis, and is now fixed.. 1623 1624 - introduced the new "ft_glyph_format_plotter", used to represent 1625 stroked outlines like Windows "Vector" fonts, and certain Type 1 1626 fonts like "Hershey". The corresponding raster will be written 1627 soon. 1628 1629 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new 1630 interface that uses a structure to describe the input stream, the 1631 driver (if required), etc.. 1632 1633 1634TODO 1635 1636 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap 1637 1638 - Add a function like FT_Load_Character( face, char_code, load_flags 1639 ) that would really embbed a call to FT_Get_Char_Index then 1640 FT_Load_Glyph to ease developer's work. 1641 1642 - Update the tutorial! 1643 1644 - consider adding support for Multiple Master fonts in the Type 1 1645 drivers. 1646 1647 - Test the AFM routines of the Type 1 drivers to check that kerning 1648 information is returned correctly. 1649 1650 - write a decent auto-gridding component !! We need this to release 1651 FreeType 2.0 gold ! 1652 1653 1654less urgent needs: 1655 1656 - add a CFF/Type2 driver 1657 - add a BDF driver 1658 - add a FNT/PCF/HBF driver 1659 - add a Speedo driver from the X11 sources 1660 1661 1662====================================================================== 1663 1664OLDER CHANGES - 27-jan-2000 1665 1666 - updated the "sfnt" module interface to allow several SFNT-based 1667 drivers to co-exist peacefully 1668 1669 - updated the "T1_Face" type to better separate Postscript font 1670 content from the rest of the FT_Face structure. Might be used 1671 later by the CFF/Type2 driver.. 1672 1673 - added an experimental replacement Type 1 driver featuring advanced 1674 (and speedy) pattern matching to retrieve the data from postscript 1675 fonts. 1676 1677 - very minor changes in the implementation of FT_Set_Char_Size and 1678 FT_Set_Pixel_Sizes (they now implement default to ligthen the font 1679 driver's code). 1680 1681 1682====================================================================== 1683 1684OLD MESSAGE 1685 1686This file summarizes the changes that occured since the last "beta" of 1687FreeType 2. Because the list is important, it has been divided into 1688separate sections: 1689 1690Table Of Contents: 1691 1692 I High-Level Interface (easier !) 1693 II Directory Structure 1694 III Glyph Image Formats 1695 IV Build System 1696 V Portability 1697 VI Font Drivers 1698 1699 1700---------------------------------------------------------------------- 1701 1702High-Level Interface: 1703 1704 The high-level API has been considerably simplified. Here is how: 1705 1706 - resource objects have disappeared. this means that face objects 1707 can now be created with a single function call (see FT_New_Face 1708 and FT_Open_Face) 1709 1710 - when calling either FT_New_Face & FT_Open_Face, a size object 1711 and a glyph slot object are automatically created for the face, 1712 and can be accessed through "face->glyph" and "face->size" if 1713 one really needs to. In most cases, there's no need to call 1714 FT_New_Size or FT_New_Glyph. 1715 1716 - similarly, FT_Load_Glyph now only takes a "face" argument 1717 (instead of a glyph slot and a size). Also, it's "result" 1718 parameter is gone, as the glyph image type is returned in the 1719 field "face->glyph.format" 1720 1721 - the list of available charmaps is directly accessible through 1722 "face->charmaps", counting "face->num_charmaps" elements. Each 1723 charmap has an 'encoding' field which specifies which known 1724 encoding it deals with. Valid values are, for example : 1725 1726 ft_encoding_unicode (for ASCII, Latin-1 and Unicode) 1727 ft_encoding_apple_roman 1728 ft_encoding_sjis 1729 ft_encoding_adobe_standard 1730 ft_encoding_adobe_expert 1731 1732 other values may be added in the future. Each charmap still 1733 holds its "platform_id" and "encoding_id" values in case the 1734 encoding is too exotic for the current library 1735 1736 1737---------------------------------------------------------------------- 1738 1739Directory Structure: 1740 1741 Should seem obvious to most of you: 1742 1743 freetype/ 1744 config/ -- configuration sub-makefiles 1745 ansi/ 1746 unix/ -- platform-specific configuration files 1747 win32/ 1748 os2/ 1749 msdos/ 1750 1751 include/ -- public header files, those to be included 1752 directly by client apps 1753 1754 src/ -- sources of the library 1755 base/ -- the base layer 1756 sfnt/ -- the sfnt "driver" (see the drivers section 1757 below) 1758 truetype/ -- the truetype driver 1759 type1/ -- the type1 driver 1760 shared/ -- some header files shared between drivers 1761 1762 demos/ -- demos/tools 1763 1764 docs/ -- documentation (a bit empty for now) 1765 1766 1767---------------------------------------------------------------------- 1768 1769Glyph Image Formats: 1770 1771 Drivers are now able to register new glyph image formats within the 1772 library. For now, the base layer supports of course bitmaps and 1773 vector outlines, but one could imagine something different like 1774 colored bitmaps, bi-color vectors or wathever else (Metafonts anyone 1775 ??). 1776 1777 See the file `include/ftimage.h'. Note also that the type 1778 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which 1779 should encompass all known bitmap types. 1780 1781 Each new image format must provide at least one "raster", i.e. a 1782 module capable of transforming the glyph image into a bitmap. It's 1783 also possible to change the default raster used for a given glyph 1784 image format. 1785 1786 The default outline scan-converter now uses 128 levels of grays by 1787 default, which tends to smooth many things. Note that the demo 1788 programs have been updated significantly in order to display these.. 1789 1790 1791---------------------------------------------------------------------- 1792 1793Build system: 1794 1795 You still need GNU Make to build the library. The build system has 1796 been very seriously re-vamped in order to provide things like : 1797 1798 - automatic host platform detection (reverting to 'config/ansi' if 1799 it is not detected, with pseudo-standard compilation flags) 1800 1801 - the ability to compile from the Makefiles with very different and 1802 exotic compilers. Note that linking the library can be difficult 1803 for some platforms. 1804 1805 For example, the file `config/win32/lcclib.bat' is invoked by the 1806 build system to create the ".lib" file with LCC-Win32 because its 1807 librarian has too many flaws to be invoked directly from the 1808 Makefile. 1809 1810 Here's how it works: 1811 1812 - the first time you type `make', the build system runs a series of 1813 sub-makefiles in order to detect your host platform. It then dumps 1814 what it found, and creates a file called `config.mk' in the 1815 current directory. This is a sub-Makefile used to define many 1816 important Make variables used to build the library. 1817 1818 - the second time, the build system detects the `config.mk' then use 1819 it to build the library. All object files go into 'obj' by 1820 default, as well as the library file, but this can easily be 1821 changed. 1822 1823 Note that you can run "make setup" to force another host platform 1824 detection even if a `config.mk' is present in the current 1825 directory. Another solution is simply to delete the file, then 1826 re-run make. 1827 1828 Finally, the default compiler for all platforms is gcc (for now, 1829 this will hopefully changed in the future). You can however specify 1830 a different compiler by specifying it after the 'setup' target as 1831 in: 1832 1833 gnumake setup lcc on Win32 to use the LCC compiler 1834 gnumake setup visualc on Win32 to use Visual C++ 1835 1836 See the file `config/<system>/detect.mk' for a list of supported 1837 compilers for your platforms. 1838 1839 It should be relatively easy to write new detection rules files and 1840 config.mk.. 1841 1842 Finally, to build the demo programs, go to `demos' and launch GNU 1843 Make, it will use the `config.mk' in the top directory to build the 1844 test programs.. 1845 1846 1847---------------------------------------------------------------------- 1848 1849Portability: 1850 1851 In the previous beta, a single FT_System object was used to 1852 encompass all low-level operations like thread synchronisation, 1853 memory management and i/o access. This has been greatly simplified: 1854 1855 - thread synchronisation has been dropped, for the simple reason 1856 that the library is already re-entrant, and that if you really 1857 need two threads accessing the same FT_Library, you should 1858 really synchronize access to it yourself with a simple mutex. 1859 1860 - memory management is performed through a very simple object 1861 called "FT_Memory", which really is a table containing a table 1862 of pointers to functions like malloc, realloc and free as well 1863 as some user data (closure). 1864 1865 - resources have disappeared (they created more problems than they 1866 solved), and i/o management have been simplified greatly as a 1867 result. Streams are defined through FT_Stream objects, which can 1868 be either memory-based or disk-based. 1869 1870 Note that each face has its own stream, which is closed only 1871 when the face object is destroyed. Hence, a function like 1872 TT_Flush_Face in 1.x cannot be directly supported. However, if 1873 you really need something like this, you can easily tailor your 1874 own streams to achieve the same feature at a lower level (and 1875 use FT_Open_Face instead of FT_New_Face to create the face). 1876 1877 See the file "include/ftsystem.h" for more details, as well as the 1878 implementations found in "config/unix" and "config/ansi". 1879 1880 1881---------------------------------------------------------------------- 1882 1883Font Drivers: 1884 1885 The Font Driver interface has been modified in order to support 1886 extensions & versioning. 1887 1888 1889 The list of the font drivers that are statically linked to the 1890 library at compile time is managed through a new configuration file 1891 called `config/<platform>/ftmodule.h'. 1892 1893 This file is autogenerated when invoking `make modules'. This target 1894 will parse all sub-directories of 'src', looking for a "module.mk" 1895 rules file, used to describe the driver to the build system. 1896 1897 Hence, one should call `make modules' each time a font driver is 1898 added or removed from the `src' directory. 1899 1900 Finally, this version provides a "pseudo-driver" in `src/sfnt'. This 1901 driver doesn't support font files directly, but provides services 1902 used by all TrueType-like font drivers. Hence, its code is shared 1903 between the TrueType & OpenType font formats, and possibly more 1904 formats to come if we're lucky.. 1905 1906 1907---------------------------------------------------------------------- 1908 1909Extensions support: 1910 1911 The extensions support is inspired by the one found in 1.x. 1912 1913 Now, each font driver has its own "extension registry", which lists 1914 which extensions are available for the font faces managed by the 1915 driver. 1916 1917 Extension ids are now strings, rather than 4-byte tags, as this is 1918 usually more readable.. 1919 1920 Each extension has: 1921 - some data, associated to each face object 1922 - an interface (table of function pointers) 1923 1924 An extension that is format-specific should simply register itself 1925 to the correct font driver. Here is some example code: 1926 1927 // Registering an extensions 1928 // 1929 FT_Error FT_Init_XXXX_Extension( FT_Library library ) 1930 { 1931 FT_DriverInterface* tt_driver; 1932 1933 driver = FT_Get_Driver( library, "truetype" ); 1934 if (!driver) return FT_Err_Unimplemented_Feature; 1935 1936 return FT_Register_Extension( driver, &extension_class ); 1937 } 1938 1939 1940 // Implementing the extensions 1941 // 1942 FT_Error FT_Proceed_Extension_XXX( FT_Face face ) 1943 { 1944 FT_XXX_Extension ext; 1945 FT_XXX_Extension_Interface ext_interface; 1946 1947 ext = FT_Get_Extension( face, "extensionid", &ext_interface ); 1948 if (!ext) return error; 1949 1950 return ext_interface->do_it(ext); 1951 } 1952 1953--- end of CHANGES --- 1954