2
LATEST CHANGES BETWEEN 2.1.9 and 2.1.8
6
- The function `FT_Get_CharMap_Index' was only declared, without
7
any real code. For consistency, it has been renamed to
8
`FT_Get_Charmap_Index'. (This function is needed to implement
11
- `FT_Outline_Get_BBox' sometimes returned incorrect values for
12
conic outlines (e.g., for TrueType fonts).
14
- Handling of `bhed' table has been fixed.
16
- The TrueType driver with enabled byte code interpreter sometimes
17
returned artifacts due to incorrect rounding. This bug has been
18
introduced after version 2.1.4.
20
- The BDF driver dropped the last glyph in the font.
22
- The BDF driver now uses the DEFAULT_CHAR property (if available)
23
to select a glyph shape for the undefined glyph.
28
- George Williams contributed code to handle Apple's font
29
distortion technology found in GX fonts (`avar', `cvar', `fvar',
30
and `gvar' tables; the Multiple Masters API has been slightly
31
extended to cope with the new functionality).
33
- The `FT_GlyphSlotRec' structure has been extended: The elements
34
`lsb_delta' and `rsb_delta' give the difference between hinted
35
and unhinted left and right side bearings if autohinting is
36
active. Using those values can improve the inter-letter spacing
37
considerably. See the documentation of `FT_GlyphSlotRec' and
38
the `ftstring' demo program how to use it.
43
- A new documentation file `formats.txt' describes various font
44
formats supported (and not supported) by FreeType.
47
======================================================================
49
LATEST CHANGES BETWEEN 2.1.8 and 2.1.7
51
I. IMPORTANT BUG FIXES
53
- The native TrueType hinter contained some bugs which prevented
54
some fonts to be rendered correctly, most notably Legendum.otf.
56
- The PostScript hinter now produces improved results.
58
- The linear advance width and height values were incorrectly
59
rounded, making them virtually unusable if not loaded with
60
FT_LOAD_LINEAR_DESIGN.
62
- Indexing CID-keyed CFF fonts is now working: The glyph index is
63
correctly treated as a CID, similar to FreeType's CID driver
64
module. Note that CID CMap support is still missing.
66
- The FT_FACE_FLAGS_GLYPH_NAMES flag is now set correctly for all
69
- Some subsetted Type 1 fonts weren't parsed correctly. This bug
70
has been introduced in 2.1.7. In summary, the Type 1 parser has
73
- Non-decimal numbers weren't parsed correctly in PS fonts.
75
- The WinFNT driver now correctly reports FT_ENCODING_NONE for all
76
but one encoding. Use the new FT_WinFNT_ID_XXX values together
77
with FT_Get_WinFNT_Header() to get the WinFNT charset ID.
79
- The descender metrics (face->size->metrics.descender) for WinFNT
80
bitmap fonts had the wrong sign.
82
- The (emulated) `seac' support for CFF fonts was broken.
84
- The `flex' operator didn't work for CFF fonts.
86
- PS glyphs which use the `hintmask' operator haven't been
87
rendered correctly in some cases.
89
- Metrics for BDF and PCF bitmap font formats have been fixed.
91
- Autohinting is now disabled for glyphs which are vertically
92
distorted or mirrored (using a transformation matrix). This
93
fixes a bug which produced zero-height glyphs.
95
- The `freetype-config' script now handles --prefix and
96
--exec-prefix correctly; it also returns the proper --rpath (or
97
-R) value if FreeType has been built as a shared library.
100
II. IMPORTANT CHANGES
102
- Both PCF and BDF drivers now handle the SETWIDTH_NAME and
103
ADD_STYLE_NAME properties. Values are appended to
104
face->style_name; example: `Bold SemiCondensed'.
106
- The PCF driver now handles bitmap fonts compressed with the LZW
107
algorithm (extension .pcf.Z, compressed with `compress').
109
- A new API function `FT_Get_CMap_Language_ID' (declared in
110
`tttables.h') is available to get the language ID of a
113
- The hexadecimal format of data after the `StartData' command in
114
CID-keyed Type 1 fonts is now supported. While this can't occur
115
in file-based fonts, it can happen in document-embedded
116
resources of PostScript documents.
118
- Embedded bitmaps in SFNT-based CFF fonts are now supported.
120
- A simple API is now available to control FreeType's tracing
121
mechanism if compiled with FT_DEBUG_LEVEL_TRACE. See the file
122
`ftdebug.h' for more details.
124
- YAMATO Masatake contributed improved handling of MacOS resource
125
forks on non-MacOS platforms (for example, Linux can mount MacOS
128
- Support for MacOS has been improved; there is now a new function
129
`FT_New_Face_From_FSSpec' similar to `FT_New_Face' except that
130
it accepts an FSSpec instead of a path.
132
- The cache sub-system has been rewritten.
134
- There is now support for deinstallation of faces.
136
- A new API function `FTC_Manager_RemoveFaceID' has been added
137
to delete all `idle' nodes that correspond to a given
138
FTC_FaceID. All `locked' nodes (i.e., those with a reference
139
count > 0), will be modified to prevent them from appearing in
140
further lookups (they will be cleaned normally when their
141
reference count reaches 0).
143
- There is now support for point scaling (i.e., providing
144
character sizes in points + dpis, instead of pixels).
146
- Three abstract cache classes are now available:
148
FTC_GCache: Used to store one glyph item per cache node,
149
with the ability to group common attributes into
150
`families'. This replaces the old
151
FTC_GlyphCache class.
153
FTC_ICache: Used to store one FT_Glyph per cache node. This
154
extends FTC_GCache. Family definition, family
155
comparison, and glyph loading are however left
158
FTC_SCache: Used to store up to 16 small bitmaps per cache
159
node. This extends FTC_GCache. Family
160
definition, family comparison and glyph loading
161
are however left to sub-classes.
163
- The file `src/cache/ftcbasic.c' implements:
165
FTC_ImageCache: Extends FTC_ICache; implements family
166
definitions and glyph loading similar to the
169
FTC_SBitCache: Extends FTC_SCache, implements family
170
definitions and glyph loading similar to the
173
Client applications should be able to extend FTC_GCache,
174
FTC_ICache, or FTC_SCache much more easily (i.e., less code to
175
write, and less callbacks). For example, one could envision
176
caches that are capable of storing transformed (obliqued),
177
stroked, emboldened, or colored glyph images. Use
178
`ftcbasic.c' as an example.
180
- All public APIs are now in `include/freetype/ftcache.h', (to
181
be accessed as `FT_CACHE_H'). The contents of
182
`include/freetype/cache/' is only needed by applications that
183
wish to implement their own caches.
185
- There were some major performance improvements through the use
186
of various programming tricks. Cache hits are up to 70%
187
faster than in the old code.
189
- The FTC_CMapCache has been simplied. Charmaps can only be
190
accessed by index right now. There is also a new API named
191
`FT_Charmap_GetIndex' for this purpose.
193
- The demo programs have been updated to the new code. The
194
previous versions will not work with the current one.
196
- Using an invalid face index in FT_Open_Face and friends now
197
causes an error even if the font contains a single face only.
202
- Wolfgang Domrļæ½se contributed support files for building FreeType
203
on the Atari using the PureC compiler. Note that the Atari is a
206
- Vitaliy Pasternak contributed project files for VS.NET 2003.
209
======================================================================
211
LATEST CHANGES BETWEEN 2.1.7 and 2.1.6
213
I. IMPORTANT BUG FIXES
215
- Updated to newest libtool version, fixing build problems on
218
- On Unix platforms, `make install' didn't copy the correct
221
Note that version 2.1.7 contains the same library C source code as
225
======================================================================
227
LATEST CHANGES BETWEEN 2.1.6 and 2.1.5
229
I. IMPORTANT BUG FIXES
231
- The PFR font driver didn't load kerning tables correctly, and
232
the functions in FT_PFR_H didn't work at all.
234
- Type 1 font files in binary format (PFB) with an end-of-file
235
indicator weren't accepted by the FreeType engine.
237
- Fonts which contain /PaintType and /StrokeWidth no longer cause
238
a segfault. This bug has been introduced in version 2.1.5.
240
- Fonts loaded with FT_LOAD_RENDER no longer cause strange
241
results. This bug has been introduced in version 2.1.5.
243
- Some Windows (bitmap) FNT/FON files couldn't be handled
247
II. IMPORTANT CHANGES
249
- The internal module API has been heavily changed in favor of
250
massive simplifications within the font engine. This also means
251
that authors of third-party modules must adapt their code to the
254
NOTE: THE NEW SCHEME IS NOT COMPLETED YET. PLEASE WAIT UNTIL A
257
- The PostScript parser has been enhanced to handle comments and
258
strings correctly. Additionally, more syntax forms are
261
- Added the optional unpatented hinting system for TrueType. It
262
allows typefaces which need hinting to produce correct glyph
263
forms (e.g., Chinese typefaces from Dynalab) to work acceptably
264
without infringing Apple patents. This system is compiled only
265
if TT_CONFIG_OPTION_COMPILE_UNPATENTED_HINTING is defined in
266
ftoption.h (activated by default).
271
- There is now a guard in the public header files to protect
272
against inclusion of freetype.h from FreeType 1.
274
- Direct inclusion of freetype.h and other public header files no
275
longer works. You have to use the documented scheme
277
#include <ft2build.h>
278
#include FT_FREETYPE_H
280
to load freetype.h with a symbolic name. This protects against
281
renaming of public header files (which shouldn't happen but
282
actually has, avoiding two public header files with the same
286
======================================================================
288
LATEST CHANGES BETWEEN 2.1.5 and 2.1.4
290
I. IMPORTANT BUG FIXES
292
- Parsing the /CIDFontName field now removes the leading slash to
293
be in sync with other font drivers.
295
- gzip support was buggy. Some fonts could not be read.
297
- Fonts which have nested subglyphs more than one level deep no
298
longer cause a segfault.
300
- Creation of synthetic cmaps for fonts in CFF format was broken
303
- Numeric font dictionary entries for synthetic fonts are no
306
- The font matrix wasn't applied to the advance width for Type1,
307
CID, and CFF fonts. This caused problems when loading certain
308
synthetic Type 1 fonts like `Helvetica Narrow'.
310
- The test for the charset registry in BDF and PCF fonts is now
313
- FT_Vector_Rotate sometimes returned strange values due to
316
- The PCF driver now returns the correct number of glyphs
317
(including an artificial `notdef' glyph at index 0).
319
- FreeType now supports buggy CMaps which are contained in many
320
CJK fonts from Dynalab.
322
- Opening an invalid font on a Mac caused a segfault due to
323
double-freeing memory.
325
- BDF fonts with more than 32768 glyphs weren't supported
329
II. IMPORTANT CHANGES
331
- Accessing bitmap font formats has been synchronized. To do that
332
the FT_Bitmap_Size structure has been extended to contain new
333
fields `size', `x_ppem', and `y_ppem'.
335
- The FNT driver now returns multiple faces, not multiple strikes.
337
- The `psnames' module has been updated to the Adobe Glyph List
340
- The `psnames' module now understands `uXXXX[X[X]]' glyph names.
342
- The algorithm for guessing the font style has been improved.
344
- For fonts in SFNT format, root->height is no longer increased if
345
the line gap is zero. There exist fonts (containing e.g. form
346
drawing characters) which intentionally have a zero line gap
349
- ft_glyph_bbox_xxx flags are now deprecated in favour of
352
- ft_module_xxx flags are now deprecated in favour of
355
- FT_ENCODING_MS_{SJIS,GB2312,BIG5,WANSUNG,JOHAB} are now
356
deprecated in favour of
357
FT_ENCODING_{SJIS,GB2312,GIB5,WANSONG,JOHAB} -- those encodings
358
are not specific to Microsoft.
363
- The autohinter has been further improved; for example, `m'
364
glyphs now retain its vertical symmetry.
366
- Partial support of Mac fonts on non-Mac platforms.
368
- `make refdoc' (after first `make') builds the HTML
369
documentation. You need Python for this.
371
- The make build system should now work more reliably on DOS-like
374
- Support for EMX gcc and Watson C/C++ compilers on MS-DOS has
377
- Better VMS build support.
379
- Support for the pkg-config package by providing a `freetype.pc'
382
- New configure option --with-old-mac-fonts for Darwin.
384
- Some source files have been renamed (mainly to fit into the 8.3
388
======================================================================
390
LATEST CHANGES BETWEEN 2.1.4 and 2.1.3
392
I. IMPORTANT BUG FIXES
394
- Updated to newest libtool version, fixing build problems on
397
- A fix in the Gzip stream reader: It couldn't read certain .gz
398
files properly due to a small typo. In certain cases, FreeType
399
could also loop endlessly when trying to load tiny gzipped
402
- The configure script now tries to use the system-wide zlib when
403
it finds one (instead of the copy found in src/gzip). And
404
"freetype-config" has been updated to return relevant flags in
405
this case when invoked with "--libs" (e.g. "-lzlib").
407
- Certain fonts couldn't be loaded by 2.1.3 because they lacked a
408
Unicode charmap (e.g. SYMBOL.TTF). FreeType erroneously
411
- The CFF loader was modified to accept fonts which only contain a
412
subset of their reference charset. This prevented the correct
413
use of PDF-embedded fonts.
415
- The logic to detect Unicode charmaps has been modified. This is
416
required to support fonts which include both 16-bit and 32-bit
417
charmaps (like very recent asian ones) using the new 10 and 12
420
- The TrueType loader now limits the depth of composite glyphs.
421
This is necessary to prevent broken fonts to break the engine by
422
blowing the stack with recursive glyph definitions.
424
- The CMap cache is now capable of managing UCS-4 character codes
425
that are mapped through extended charmaps in recent
426
TrueType/OpenType fonts.
428
- The cache sub-system now properly manages out-of-memory
429
conditions instead of blindly reporting them to the caller.
430
This means that it will try to empty the cache before restarting
431
its allocations to see if that can help.
433
- The PFR driver didn't return the list of available embedded
436
- There was a nasty memory leak when using embedded bitmaps in
437
certain font formats.
440
II. IMPORTANT CHANGES
442
- David Chester contributed some enhancements to the auto-hinter
443
that significantly increase the quality of its output. The
444
Postscript hinter was also improved in several ways.
446
- The FT_RENDER_MODE_LIGHT render mode was implemented.
448
- A new API function called `FT_Get_BDF_Property' has been added
449
to FT_BDF_H to retrieve BDF properties from BDF _and_ PCF font
450
files. THIS IS STILL EXPERIMENTAL, since it hasn't been
453
- A Windows FNT specific API has been added, mostly to access font
454
headers. This is used by Wine.
456
- TrueType tables without an "hmtx" table are now tolerated when
457
an incremental interface is used. This happens for certain
458
Type42 fonts passed from Ghostscript to FreeType.
460
- The PFR font driver is now capable of returning the font family
461
and style names when they are available (instead of the sole
462
"FontID"). This is performed by parsing an *undocumented*
463
portion of the font file!
468
- The path stroker in FT_STROKER_H has entered beta stage. It now
469
works very well, but its interface might change a bit in the
470
future. More on this in later releases.
472
- The documentation for FT_Size_Metrics didn't appear properly in
475
- The file docs/VERSION.DLL has been updated to explain versioning
476
with FreeType (i.e., comparing release/libtool/so numbers, and
477
how to use them in autoconf scripts).
479
- The installation documentation has been seriously revamped.
480
Everything is now in the "docs" directory.
483
======================================================================
485
LATEST CHANGES BETWEEN 2.1.3 and 2.1.2
487
I. IMPORTANT BUG FIXES
489
- FT_Vector_Transform had been incorrectly modified in 2.1.2,
490
resulting in incorrect transformations being applied (for
491
example, rotations were processed in opposite angles).
493
- The format 8 and 12 TrueType charmap enumeration routines have
494
been fixed (FT_Get_Next_Char returned invalid values).
496
- The PFR font driver returned incorrect advance widths if the
497
outline and metrics resolution defined in the font file were
500
- FT_Glyph_To_Bitmap now returns successfully when called with an
501
FT_BitmapGlyph argument (it previously returned an error).
503
- A bug in the Type 1 loader that prevented valid font bounding
504
boxes to be loaded from multiple master fonts.
506
- The SFNT validation code has been rewritten. FreeType can now
507
load "broken" fonts that were usable on Windows, but not with
508
previous versions of the library.
510
- The computation of bearings in the BDF driver has been fixed.
512
- The Postscript hinter crashed when trying to hint certain glyphs
513
(more precisely, when trying to apply hints to an empty glyph
516
- The TrueType glyph loader now supports composites in "Apple
517
format" (they differ slightly from Microsoft/OpenType ones in
518
the way transformation offsets are computed).
520
- FreeType was very slow at opening certain asian CID/CFF fonts,
521
due to fixed increment in dynamic array re-allocations. This
522
has been changed to exponential behaviour to get acceptable
527
II. IMPORTANT CHANGES
529
- The PCF driver now supports gzip-compressed font files natively.
530
This means that you will be able to use all these bitmap fonts
531
that come with XFree86 with FreeType (and libXft/libXft2, by
534
- The automatic and postscript hinters have both been updated.
535
This results in a relatively important increase of rendering
536
quality since many nasty defaults have been supressed. Please
539
http://www.freetype.org/hinting/smooth-hinting.html
541
for additional details on this topic.
543
- The "load_flags" parameter of FT_Load_Glyph is now an FT_Int32
544
(instead of just being an FT_Int). This breaks source and
545
binary compatibility for 16bit systems only, while retaining
546
both of them for 32 and 64 bit ones.
548
Some new flags have been added consequently:
550
FT_LOAD_NO_AUTOHINT :: Disable the use of the auto-hinter
551
(but not native format hinters).
553
FT_LOAD_TARGET_NORMAL :: Hint and render for normal
554
anti-aliased displays.
556
FT_LOAD_TARGET_MONO :: Hint and render for 1-bit displays.
558
FT_LOAD_TARGET_LCD :: Hint and render for horizontal RGB or
559
BGR sub-pixel displays (like LCD
560
screens). THIS IS STILL
563
FT_LOAD_TARGET_LCD_V :: Same as FT_LOAD_TARGET_LCD, for
564
vertical sub-pixel displays (like
565
rotated LCD screens). THIS IS STILL
568
FT_LOAD_MONOCHROME is still supported, but only affects
569
rendering, not the hinting.
571
Note that the `ftview' demo program available in the `ft2demos'
572
package has been updated to support LCD-optimized display on
573
non-paletted displays (under Win32 and X11).
575
- The PFR driver now supports embedded bitmaps (all formats
576
supported), and returns correct kerning metrics for all glyphs.
578
- The TrueType charmap loader now supports certain `broken' fonts
579
that load under Windows without problems.
581
- The cache API has been slightly modified (it's still a beta!):
583
- The type FTC_ImageDesc has been removed; it is now replaced
584
by FTC_ImageTypeRec. Note that one of its fields is a
585
`load_flag' parameter for FT_Load_Glyph.
587
- The field "num_grays" of FT_SBitRec has been changed to
588
"max_grays" in order to fit within a single byte. Its
589
maximum value is thus 255 (instead of 256 as previously).
594
- Added support for the DESTDIR variable during "make install".
595
This simplifies packaging of FreeType.
597
- Included modified copies of the ZLib sources in `src/gzip' in
598
order to support gzip-compressed PCF fonts. We do not use the
599
system-provided zlib for now, though this is a probable
600
enhancement for future releases.
602
- The DocMaker tool used to generate the on-line API reference has
603
been completely rewritten. It is now located in
604
"src/tools/docmaker/docmaker.py". Features:
606
- better cross-referenced output
607
- more polished output
608
- uses Python regular expressions (though it didn't speed the
610
- much more modular structure, which allows for different
611
"backends" in order to generate HTML, XML, or whatever
614
One can regenerate the API reference by calling:
616
python src/tools/docmaker/docmaker.py \
618
--title=FreeType-2.1.3 \
619
--output=<outputdirectory>
620
include/freetype/*.h \
621
include/freetype/config/*.h \
622
include/freetype/cache/*.h
624
- A new, experimental, support for incremental font loading (i.e.,
625
loading of fonts where the glyphs are not in the font file
626
itself, but provided by an external component, like a Postscript
627
interpreter) has been added by Graham Asher. This is still work
628
in progress, however.
630
- A new, EXPERIMENTAL, path stroker has been added. It doesn't
631
suffer from severe rounding errors and treat bezier arcs
632
directly. Still work in progress (i.e. not part of the official
633
API). See the file <freetype/ftstroker.h> for some of the
636
- The massive re-formatting of sources and internal re-design is
637
still under-way. Many internal functions, constants, and types
641
======================================================================
643
LATEST CHANGES BETWEEN 2.1.2 and 2.1.1
645
I. IMPORTANT BUG FIXES
647
- Many font drivers didn't select a Unicode charmap by default
648
when a new face was opened (with the FT_CONFIG_OPTION_USE_CMAPS
649
options enabled), causing many applications to not be able to
650
display text correctly with the 2.1.x releases.
652
- The PFR driver had a bug in its composite loading code that
653
produces incorrectly placed accents with many fonts.
655
- The Type42 driver crashed sometimes due to a nasty bug.
657
- The Type 1 custom encoding charmap didn't handle the case where
658
the first glyph index wasn't 0.
660
- A serious typo in the TrueType composite loader produced
661
incorrectly placed glyphs in fonts like "Wingdings" and a few
667
- The Win32 Visual C++ project file has been updated to include
668
the PFR driver as well.
670
- "freetype.m4" is now installed by default by "make install" on
673
- The function FT_Get_PS_Font_Info now works with CID and Type42
677
======================================================================
679
LATEST CHANGES BETWEEN 2.1.1 and 2.1.0
681
I. IMPORTANT BUG FIXES
683
- The `version_info' returned by `freetype-config' in 2.1.0
684
returned an invalid value. It now returns 9:1:3 (2.0.9 returned
687
- Version 2.1.0 couldn't be linked against applications on Win32
688
and Amiga systems due to a new debug function that wasn't
689
properly propagated to the system-specific directory in
692
- Various MacOS and Mac OS X specific fixes.
694
- Fixed a bug in the TrueType charmap validation routines that
695
made version 2.1.0 too restrictive -- many popular fonts have
698
- There was still a very small difference between the monochrome
699
glyph bitmaps produced by FreeType 1.x and FreeType 2.x with the
700
bytecode interpreter enabled. This was caused by an invalid
701
flag setting in the TrueType glyph loader, making the rasterizer
702
change its drop-out control mode. Now theresults should
703
_really_ be completely identical.
705
- The TrueType name table loader has been improved to support many
706
popular though buggy Asian fonts. It now ignores empty name
707
entries, invalid pointer offsets and a few other incorrect
708
subtleties. Moreover, name strings are now loaded on demand,
709
which reduces the memory load of many faces (e.g. the ARIAL.TTF
710
font file contains a 10kByte name table with 70 names).
712
- Fixed a bug in the Postscript hinter that prevented family blues
713
substitution to happen correctly.
718
- Three new font drivers in this release:
720
* A BDF font driver, contributed by Franco Zappa Nardelli,
721
heavily modified by Werner Lemberg. It also supports
722
anti-aliased bitmaps (using a slightly extended BDF format).
724
* A Type42 font driver, contributed by Roberto Alameda. It is
725
still experimental but seems to work relatively well.
727
* A PFR font driver, contributed by David Turner himself. It
728
doesn't support PFR hinting -- note that BitStream has at
729
least two patents on this format!
734
- The cache sub-system has been optimized in important ways.
735
Cache hits are now significantly faster. For example, using the
736
CMap cache is about twice faster than calling FT_Get_Char_Index
737
on most platforms. Similarly, using an SBit cache is about five
738
times faster than loading the bitmaps from a bitmap file, and
739
300 to 500 times faster than generating them from a scalable
742
Note that you should recompile your sources if you designed a
743
custom cache class for the FT2 Cache subsystem, since the
744
changes performed are source, but not binary, compatible.
747
======================================================================
749
LATEST CHANGES BETWEEN 2.1.0 and 2.0.9
751
I. IMPORTANT BUG FIXES
753
- The TrueType bytecode interpreter has been fixed to produce
754
_exactly_ the same output as FreeType 1.x. Previous differences
755
were due to slightly distinct fixed-point computation routines
756
used to perform dot products and vector length measurements.
758
It seems that native TrueType hinting is _extremely_ sensitive
759
to rounding errors. The required vector computation routines
760
have been optimized and placed within the "ttinterp.c" file.
762
- Fixed the parsing of accelerator tables in the PCF font driver.
764
- Fixed the Type1 glyph loader routine used to compute the font's
765
maximum advance width.
770
- The `configure' script used on Unix systems has been modified to
771
check that GNU Make is being used to build the library.
772
Otherwise, it will display a message proposing to use the
773
GNUMAKE environment variable to name it.
775
The Unix-specific file README.UNX has been modified accordingly.
780
- The FreeType License in `docs/FTL.txt' has been updated to
781
include a proposed preferred disclaimer. If you are using
782
FreeType in your products, you are encouraged (but not mandated)
783
to use the following text in your documentation:
786
Portions of this software are copyright ļæ½ 1996-2002 The
787
FreeType Project (www.freetype.org). All rights reserved.
790
- The default size of the render pool has been reduced to 16kByte.
791
This shouldn't result in any noticeable performance penalty,
792
unless you are using the engine as-is to render very large and
795
- The FreeType 2 redesign has begun. More information can be
798
http://www.freetype.org/freetype2/redesign.html
800
The following internal changes have been performed within the
801
sources of this release:
803
- Many internal types have been renamed to increase
804
consistency. The following should be true, except for
807
* All structure types have a name ending in "Rec" (short
810
* A pointer-to-structure type has the same name as the
811
structure, _without_ the "Rec" suffix.
815
typedef struct FooRec_
821
- Many internal macros have been renamed to increase
822
consistency. The following should be true:
824
* All macros have a name beginning with "FT_". This
825
required a few changes like
829
REALLOC => FT_REALLOC
831
* All macros are completely UPPERCASE. This required a
834
READ_Short => FT_READ_SHORT
835
NEXT_Short => FT_NEXT_SHORT
836
GET_ULongLE => FT_GET_ULONG_LE
837
MEM_Set => FT_MEM_SET
838
MEM_Copy => FT_MEM_COPY
841
* Whenever possible, all macro names follow the
842
FT_<OBJECT>_<METHOD> pattern. For example
844
ACCESS_Frame => FT_FRAME_ENTER
845
FORGET_Frame => FT_FRAME_EXIT
846
EXTRACT_Frame => FT_FRAME_EXTRACT
847
RELEASE_Frame => FT_FRAME_RELEASE
849
FILE_Pos => FT_STREAM_POS
850
FILE_Seek => FT_STREAM_SEEK
851
FILE_Read => FT_STREAM_READ
852
FILE_ReadAt => FT_STREAM_READ_AT
853
READ_Fields => FT_STREAM_READ_FIELDS
855
- Many internal functions have been renamed to follow the
856
FT_<Object>_<Method> pattern. For example:
858
FT_Seek_Stream => FT_Stream_Seek
859
FT_Read_Stream_At => FT_Stream_ReadAt
860
FT_Done_Stream => FT_Stream_Close
861
FT_New_Stream => FT_Stream_Open
862
FT_New_Memory_Stream => FT_Stream_OpenMemory
863
FT_Extract_Frame => FT_Stream_ExtractFrame
865
Note that method names do not contain "_".
867
- The FT_ALLOC_ARRAY and FT_REALLOC_ARRAY have been replaced
868
with FT_NEW_ARRAY and FT_RENEW_ARRAY which do not take a
869
type as the fourth argument. Instead, the array element
870
type size is computed automatically from the type of the
873
- A new object class, FT_CMap, has been introduced. These
874
internal objects are used to model character maps. This
875
eases the support of additional charmap types within the
878
- A new configuration file named "ftstdlib.h" has been added
879
to `include/freetype/config'. It is used to define aliases
880
for _every_ routine of the ISO C library that the font
881
engine uses. Each aliases has a "ft_" prefix
882
(e.g. "ft_strlen" is an alias for "strlen").
884
This is used to ease the porting of FreeType 2 to exotic
885
runtime environments where the ISO C Library isn't available
886
(e.g. XFree86 extension modules).
888
More details are available in the "ChangeLog" file.
891
======================================================================
893
LATEST CHANGES BETWEEN 2.0.9 and 2.0.8
895
I. IMPORTANT BUG FIXES
897
- Certain fonts like "foxjump.ttf" contain broken name tables with
898
invalid entries and wild offsets. This caused FreeType to crash
899
when trying to load them.
901
The SFNT `name' table loader has been fixed to be able to
902
support these strange fonts.
904
Moreover, the code in charge of processing this table has been
905
changed to always favour Windows-formatted entries over other
906
ones. Hence, a font that works on Windows but not on the Mac
907
will load cleanly in FreeType and report accurate values for
908
Family & PostScript names.
910
- The CID font driver has been fixed. It unfortunately returned a
911
Postscript Font name with a leading slash, as in
912
"/MunhwaGothic-Regular".
914
- FreeType 2 should now compile fine on AIX 4.3.3 as a shared
917
- A bug in the Postscript hinter has been found and fixed,
918
removing un-even stem widths at small pixel sizes (like 14-17).
920
This improves the quality of a certain number of Postscript
926
- A new function named `FT_Library_Version' has been added to
927
return the current library's major, minor, and patch version
928
numbers. This is important since the macros FREETYPE_MAJOR,
929
FREETYPE_MINOR, and FREETYPE_PATCH cannot be used when the
930
library is dynamically linked by a program.
932
- Two new APIs have been added: `FT_Get_First_Char' and
935
Together, these can be used to iterate efficiently over the
936
currently selected charmap of a given face. Read the API
937
reference for more details.
942
- The FreeType sources are under heavy internal re-factoring. As
943
a consequence, we have created a branch named "STABLE" on the
944
CVS to hold all future releases/fixes in the 2.0.x family.
946
The HEAD branch now contains the re-factored sources and
947
shouldn't be used for testing or packaging new releases. In
948
case you would like to access the 2.0.9 sources from our CVS
949
repository, use the tag `VER-2-0-9'.
952
======================================================================
954
LATEST CHANGES BETWEEN 2.0.8 and 2.0.7
956
I. IMPORTANT BUG FIXES
958
- There was a small but nasty bug in "freetype-config.in" which
959
caused the "freetype-config" script to fail on Unix.
961
This didn't prevent the installation of the library or even its
962
execution, but caused problems when trying to compile many Unix
963
packages that depend on it.
965
- Some TrueType or OpenType fonts embedded in PDF documents do not
966
have a 'cmap', 'post' and 'name' as is required by the
967
specification. FreeType no longer refuses to load such fonts.
969
- Various fixes to the PCF font driver.
972
======================================================================
974
LATEST CHANGES BETWEEN 2.0.7 and 2.0.6
976
I. IMPORTANT BUG FIXES
978
- Fixed two bugs in the Type 1 font driver. The first one
979
resulted in a memory leak in subtle cases. The other one caused
980
FreeType to crash when trying to load ".gsf" files (Ghostscript
981
so-called Postscript fonts).
983
(This made _many_ KDE applications crash on certain systems.
984
FreeType _is_ becoming a critical system component on Linux :-)
986
- Fixed a memory leak in the CFF font driver.
988
- Fixed a memory leak in the PCF font driver.
990
- Fixed the Visual C++ project file
991
"builds/win32/visualc/freetype.dsp" since it didn't include the
992
Postscript hinter component, causing errors at build time.
994
- Fixed a small rendering bug in the anti-aliased renderer that
995
only occurred when trying to draw thin (less than 1 pixel)
998
- Fixed "builds/unix/freetype2.a4" which is used to generate a
999
valid "freetype2.m4" for use with autoconf.
1001
- Fixed the OpenVMS Makefiles.
1006
- Added "configure" and "install" scripts to the top-level
1007
directory. A GNU-style installation is thus now easily possible
1010
./configure <options>
1015
======================================================================
1017
LATEST CHANGES BETWEEN 2.0.6 and 2.0.5
1019
I. IMPORTANT BUG FIXES
1021
- It wasn't possible to load embedded bitmaps when the auto-hinter
1022
was used. This is now fixed.
1024
- The TrueType font driver didn't load some composites properly
1025
(the sub-glyphs were slightly shifted, and this was only
1026
noticeable when using monochrome rendering).
1028
- Various fixes to the auto-hinter. They merely improve the
1029
output of sans-serif fonts. Note that there are still problems
1030
with serifed fonts and composites (accented characters).
1032
- All scalable font drivers erroneously returned un-fitted glyph
1033
advances when hinting was requested. This created problems for
1034
a number of layout applications. This is a very old bug that
1035
got undetected mainly because most test/demo program perform
1036
rounding explicitly or implicitly (through the cache).
1038
- FT_Glyph_To_Bitmap() did erroneously modify the source glyph in
1041
- "glnames.py" still contained a bug that made FreeType return
1042
invalid names for certain glyphs.
1044
- The library crashed when loading certain Type 1 fonts like
1045
"sadn.pfb" ("Stalingrad Normal"), which appear to contain
1046
pathetic font info dictionaries.
1048
- The TrueType glyph loader is now much more paranoid and checks
1049
everything when loading a given glyph image. This was necessary
1050
to avoid problems (crashes and/or memory overwrites) with broken
1051
fonts that came from a really buggy automatic font converter.
1054
II. IMPORTANT UPDATES AND NEW FEATURES
1056
- Important updates to the Mac-specific parts of the library.
1058
- The caching sub-system has been completely re-designed, and its
1059
API has evolved (the old one is still supported for backwards
1062
The documentation for it is not yet completed, sorry. For now,
1063
you are encouraged to continue using the old API. However, the
1064
ftview demo program in the ft2demos package has already been
1065
updated to use the new caching functions.
1067
- A new charmap cache is provided too. See FTC_CMapCache(). This
1068
is useful to perform character code -> glyph index translations
1069
quickly, without the need for an opened FT_Face.
1071
- A NEW POSTSCRIPT HINTER module has been added to support native
1072
hints in the following formats: PostScript Type 1, PostScript
1075
Please test! Note that the auto-hinter produces better results
1076
for a number of badly-hinted fonts (mostly auto-generated ones)
1079
- A memory debugger is now part of the standard FreeType sources.
1080
To enable it, define FT_DEBUG_MEMORY in
1081
<freetype/config/ftoption.h>, and recompile the library.
1083
Additionally, define the _environment_ variable FT_DEBUG_MEMORY
1084
and run any program using FreeType. When the library is exited,
1085
a summary of memory footprints and possible leaks will be
1088
This works transparently with _any_ program that uses FreeType.
1089
However, you will need a lot of memory to use this (allocated
1090
blocks are never released to the heap to detect double deletes
1096
- We are aware of subtle differences between the output of
1097
FreeType versions 1 and 2 when it comes to monochrome
1098
TrueType-hinted glyphs. These are most probably due to small
1099
differences in the monochrome rasterizers and will be worked out
1100
in an upcoming release.
1102
- We have decided to fork the sources in a "stable" branch, and an
1103
"unstable" one, since FreeType is becoming a critical component
1104
of many Unix systems.
1106
The next bug-fix releases of the library will be named 2.0.7,
1107
2.0.8, etc., while the "2.1" branch will contain a version of
1108
the sources where we will start major reworking of the library's
1109
internals, in order to produce FreeType 2.2.0 (or even 3.0) in a
1110
more distant future.
1112
We also hope that this scheme will allow much more frequent
1113
releases than in the past.
1116
======================================================================
1118
LATEST CHANGES BETWEEN 2.0.5 and 2.0.4
1120
NOTE THAT 2.0.5 DOES NOT CONTAIN THE POSTSCRIPT HINTER. THIS MODULE
1121
WILL BE PART OF THE NEXT RELEASE (EITHER 2.0.6 or 2.1)
1123
- Fixed a bug that made certain glyphs, like "Cacute", "cacute" and
1124
"lslash" unavailable from Unicode charmaps of Postscript fonts.
1125
This prevented the correct display of Polish text, for example.
1127
- The kerning table of Type 1 fonts was loaded by FreeType, when its
1128
AFM file was attached to its face, but the
1129
FT_FACE_FLAG_HAS_KERNING bit flags was not set correctly,
1130
preventing FT_Get_Kerning to return meaningful values.
1132
- Improved SFNT (TrueType & OpenType) charmap support. Slightly
1133
better performance, as well as support for the new formats defined
1134
by the OpenType 1.3 specification (8, 10, and 12)
1136
- Fixed a serious typo in "src/base/ftcalc.c" which caused invalid
1137
computations in certain rare cases, producing ugly artefacts.
1139
- The size of the EM square is computed with a more accurate
1140
algorithm for Postscript fonts. The old one caused slight errors
1141
with embedded fonts found in PDF documents.
1143
- Fixed a bug in the cache manager that prevented normal LRU
1144
behaviour within the cache manager, causing unnecessary reloads
1145
(for FT_Face and FT_Size objects only).
1147
- Added a new function named "FT_Get_Name_Index" to retrieve the
1148
glyph index of a given glyph name, when found in a face.
1150
- Added a new function named "FT_Get_Postscript_Name" to retrieve
1151
the "unique" Postscript font name of a given face.
1153
- Added a new public header size named FT_SIZES_H (or
1154
<freetype/ftsizes.h>) providing new FT_Size-management functions:
1155
FT_New_Size, FT_Activate_Size, FT_Done_Size.
1157
- Fixed a reallocation bug that generated a dangling pointer (and
1158
possibly memory leaks) with Postscript fonts (in
1159
src/psaux/psobjs.c).
1161
- Many fixes for 16-bit correctness.
1163
- Removed many pedantic compiler warnings from the sources.
1165
- Added an Amiga build directory in "builds/amiga".
1168
======================================================================
1170
LATEST CHANGES BETWEEN 2.0.4 and 2.0.3
1172
- Fixed a rather annoying bug that was introduced in 2.0.3. Namely,
1173
the font transformation set through FT_Set_Transform was applied
1174
twice to auto-hinted glyphs, resulting in incorrectly rotated text
1177
- Fixed _many_ compiler warnings. FT2 should now compile cleanly
1178
with Visual C++'s most pedantic warning level (/W4). It already
1179
compiled fine with GCC and a few other compilers.
1181
- Fixed a bug that prevented the linear advance width of composite
1182
TrueType glyphs to be correctly returned.
1184
- Fixed the Visual C++ project files located in
1185
"builds/win32/visualc" (previous versions used older names of the
1188
- Many 32-bit constants have an "L" appended to their value, in
1189
order to improve the 16-bitness of the code. Someone is actually
1190
trying to use FT2 on an Atari ST machine!
1192
- Updated the "builds/detect.mk" file in order to automatically
1193
build FT2 on AIX systems. AIX uses "/usr/sbin/init" instead of
1194
"/sbin/init" and wasn't previously detected as a Unix platform by
1195
the FreeType build system.
1197
- Updated the Unix-specific portions of the build system (new
1198
libtool version, etc.).
1200
- The SFNT kerning lodaer now ensures that the table is sorted
1201
(since some problem fonts do not meet this requirement).
1204
=======================================================================
1206
LATEST CHANGES BETWEEN 2.0.3 and 2.0.2
1208
I. CHANGES TO THE MODULES / FONT DRIVERS
1210
- THE AUTO-HINTER HAS BEEN SLIGHTLY IMPROVED, in order to fix
1211
several annoying artefacts, mainly:
1213
- Blue zone alignement of horizontal stems wasn't performed
1214
correctly, resulting in artefacts like the "d" being placed
1215
one pixel below the "b" in some fonts like Time New Roman.
1217
- Overshoot thresholding wasn't performed correctly, creating
1218
unpleasant artefacts at large character pixel sizes.
1220
- Composite glyph loading has been simplified. This gets rid
1221
of various artefacts where the components of a composite
1222
glyphs were not correctly spaced.
1224
These are the last changes to the current auto-hinting module.
1225
A new hinting sub-system is currently in the work in order to
1226
support native hints in Type 1 / CFF / OpenType fonts, as well
1227
as globally improve rendering.
1229
- The PCF driver has been fixed. It reported invalid glyph
1230
dimensions for the fonts available on Solaris.
1232
- The Type 1, CID and CFF drivers have been modified to fix the
1233
computation of the EM size.
1235
- The Type 1 driver has been fixed to avoid a dangerous bug that
1236
crashed the library with non-conforming fonts (i.e. ones that do
1237
not place the .notdef glyph at position 0).
1239
- The TrueType driver had a rather subtle bug (dangling pointer
1240
when loading composite glyphs) that could crash the library in
1244
II. HIGH-LEVEL API CHANGES
1246
- The error code enumeration values have been changed. An error
1247
value is decomposed in a generic error code, and a module
1248
number. see <freetype/fterrors.h> for details.
1250
- A new public header file has been introduced, named
1251
FT_TRIGONOMETRY_H (include/freetype/fttrig.h), providing
1252
trigonometric functions to compute sines, cosines, arctangents,
1253
etc. with 16.16 fixed precision. The implementation is based on
1254
the CORDIC algorithm and is very fast while being sufficiently
1260
- Added BeOS-specific files in the old build sub-system. Note
1261
that no changes were required to compile the library with Jam.
1263
- The configuration is now capable of automatically detecting
1264
64-bit integers on a set of predefined compilers (GCC, Visual
1265
C++, Borland C++) and will use them by default. This provides a
1266
small performance boost.
1268
- A small memory leak that happened when opening 0-sized files
1269
(duh!) have been fixed.
1271
- Fixed bezier stack depth bug in the routines provided by the
1272
FT_BBOX_H header file. Also fixed similar bugs in the
1275
- The outline bounding box code has been rewritten to use direct
1276
computations, instead of bezier sub-division, to compute the
1277
exact bounding box of glyphs. This is slightly slower but more
1280
- The build system has been improved and fixed, mainly to support
1281
"make" on Windows 2000 correctly, avoid problems with "make
1282
distclean" on non Unix systems, etc.
1284
- Hexadecimal constants have been suffixed with "U" to avoid
1285
problems with certain compilers on 64-bit platforms.
1287
- A new directory named "src/tools" has been created. It contains
1288
Python scripts and simple unit test programs used to develop the
1291
- The DocMaker tool has been moved from "docs" to "src/tools" and
1292
has been updated with the following:
1294
- Now accepts the "--title=XXXX" or "-t XXXX" option from the
1295
command line to set the project's name in the generated API
1298
- Now accepts the "--output=DIR" or "-o DIR" option from the
1299
command line to set the output directory for all generated
1302
- Now accepts the "--prefix=XXXX" or "-p XXX" option from the
1303
command line to set the file prefix to use for all
1304
generated HTML files.
1306
- Now generates the current time/data on each generated page
1307
in order to distinguish between versions.
1309
DocMaker can be used with other projects now, not only FT2
1310
(e.g. MLib, FTLayout, etc.).
1313
======================================================================
1315
LATEST CHANGES BETWEEN 2.0.2 and 2.0.1
1317
I. CHANGES TO THE MODULES / FONT DRIVERS
1319
- THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
1320
avoid legal problems with the Apple patents. It seems that we
1321
mistakenly turned this option on in previous releases of the
1324
Note that if you want to use the bytecode interpreter in order
1325
to get high-quality TrueType rendering, you will need to toggle
1326
by hand the definition of the
1327
TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
1328
"include/freetype/config/ftoption.h".
1330
- The CFF driver has been improved by Tom Kacvinsky and Sander van
1333
* Support for "seac" emulation.
1334
* Support for "dotsection".
1335
* Support for retrieving glyph names through
1336
"FT_Get_Glyph_Name".
1338
The first two items are necessary to correctly a large number of
1339
Type 1 fonts converted to the CFF formats by Adobe Acrobat.
1341
- The Type 1 driver was also improved by Tom & others:
1343
* Better EM size computation.
1344
* Better support for synthetic (transformed) fonts.
1345
* The Type 1 driver returns the charstrings corresponding to
1346
each glyph in the "glyph->control_data" field after a call to
1347
"FT_Load_Glyph" (thanks Ha Shao).
1349
- Various other bugfixes, including the following:
1351
* Fixed a nasty memory leak in the Type 1 driver.
1352
* The autohinter and the pcf driver used static writable data
1353
when they shouldn't.
1354
* Many casts were added to make the code more 64-bits safe. It
1355
also now compiles on Windows XP 64-bits without warnings.
1356
* Some incorrect writable statics were removed in the "autohint"
1357
and "pcf" drivers. FreeType 2 now compiles on Epoc again.
1360
II. CHANGES TO THE HIGH-LEVEL API
1362
- The library header files inclusion scheme has been changed. The
1363
old scheme looked like:
1365
#include <freetype/freetype.h>
1366
#include <freetype/ftglyph.h>
1367
#include <freetype/ftcache.h>
1368
#include <freetype/cache/ftimage.h>
1372
#include <ft2build.h>
1373
#include FT_FREETYPE_H
1376
#include FT_CACHE_IMAGE_H
1378
NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
1379
RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
1380
TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
1382
The file <ft2build.h> is used to define the header filename
1383
macros. The complete and commented list of macros is available
1384
in the API reference under the section name "Header File Macros"
1387
For more information, see section I of the following document:
1389
http://www.freetype.org/
1390
freetype2/docs/tutorial/step1.html
1394
http://freetype.sourceforge.net/
1395
freetype2/docs/tutorial/step1.html
1397
- Many, many comments have been added to the public source file in
1398
order to automatically generate the API Reference through the
1399
"docmaker.py" Python script.
1401
The latter has been updated to support the grouping of sections
1402
in chapters and better index sort. See:
1404
http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
1407
III. CHANGES TO THE BUILD PROCESS
1409
- If you are not building FreeType 2 with its own build system
1410
(but with your own Makefiles or project files), you will need to
1411
be aware that the build process has changed a little bit.
1413
You don't need to put the "src" directory in the include path
1414
when compiling any FT2 component. Instead, simply put the
1415
component's directory in the current include path.
1417
So, if you were doing something like:
1419
cc -c -Iinclude -Isrc src/base/ftbase.c
1423
cc -c -Iinclude -Isrc/base src/base/ftbase.c
1425
If you were doing something like:
1428
cc -c -I../../include -I.. ftbase.c
1433
cc -c -I../../include ftbase.c
1436
======================================================================
1438
LATEST CHANGES BETWEEN 2.0.1 and 2.0
1440
2.0.1 introduces a few changes:
1442
- Fixed many bugs related to the support of CFF / OpenType fonts.
1443
These formats are now much better supported though there is
1444
still work planned to deal with charset tables and PDF-embedded
1445
CFF files that use the old "seac" command.
1447
- The library could not be compiled in debug mode with a very
1448
small number of C compilers whose pre-processors didn't
1449
implement the "##" directive correctly (i.e. per se the ANSI C
1450
specification!) An elegant fix was found.
1452
- Added support for the free Borland command-line C++ Builder
1453
compiler. Use "make setup bcc32". Also fixed a few source
1454
lines that generated new warnings with BCC32.
1456
- Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
1459
- Updated the INSTALL file to add IDE compilation.
1461
- Other minor bug fixes, from invalid Type 1 style flags to
1462
correct support of synthetic (obliqued) fonts in the
1463
auto-hinter, better support for embedded bitmaps in a SFNT font.
1465
- Fixed some problems with "freetype-config".
1467
Finally, the "standard" scheme for including FreeType headers is now
1468
gradually changing, but this will be explained in a later release
1471
And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
1472
for their contributions!
1475
======================================================================
1477
CHANGES BETWEEN beta8 and 2.0
1479
- Changed the default installation path for public headers from
1480
"include/freetype" to "include/freetype2".
1482
Also added a new "freetype-config" that is automatically generated
1483
and installed on Unix and Cygwin systems. The script itself is
1484
used to retrieve the current install path, C compilation flags as
1485
well as linker flags.
1487
- Fixed several small bugs:
1489
* Incorrect max advance width for fixed-pitch Type 1 fonts.
1490
* Incorrect glyph names for certain TrueType fonts.
1491
* The glyph advance was not copied when FT_Glyph_To_Bitmap was
1493
* The linearHoriAdvance and linerVertAdvance fields were not
1494
correctly returned for glyphs processed by the auto-hinter.
1495
* "type1z" renamed back to "type1"; the old "type1" module has
1498
- Revamped the build system to make it a lot more generic. This
1499
will allow us to re-use nearly un-modified in lots of other
1500
projects (including FreeType Layout).
1502
- Changed "cid" to use "psaux" too.
1504
- Added the cache sub-system. See <freetype/ftcache.h> as well as
1505
the sources in "src/cache". Note that it compiles but is still
1508
- Updated "docs/docmaker.py", a draft API reference is available at
1509
http://www.freetype.org/ft2api.html.
1511
- Changed "type1" to use "psaux".
1513
- Created a new module named "psaux" to hold the Type 1 & Type 2
1514
parsing routines. It should be used by "type1", "cid", and "cff"
1517
- Fixed an important bug in "FT_Glyph_Get_CBox".
1519
- Fixed some compiler warnings that happened since the TrueType
1520
bytecode decoder was deactivated by default.
1522
- Fixed two memory leaks:
1524
* The memory manager (16 bytes) isn't released in
1526
* Using custom input streams, the copy of the original stream was
1529
- Fixed the auto-hinter by performing automatic computation of the
1530
"filling direction" of each glyph. This is done through a simple
1531
and fast approximation, and seems to work (problems spotted by
1532
Werner though). The Arphic fonts are a lot nicer though there are
1533
still a lot of things to do to handle Asian fonts correctly.
1536
======================================================================
1538
BETA-8 (RELEASE CANDIDATE) CHANGES
1540
- Deactivated the TrueType bytecode interpreter by default.
1542
- Deactivated the "src/type1" font driver. Now "src/type1z" is used
1545
- Updates to the build system. We now compile the library correctly
1546
under Unix system through "configure" which is automatically
1547
called on the first "make" invocation.
1549
- Added the auto-hinting module! Fixing some bugs here and there.
1551
- Found some bugs in the composite loader (seac) of the Type1-based
1554
- Renamed the directory "freetype2/config" to "freetype2/builds" and
1555
updated all relevant files.
1557
- Found a memory leak in the "type1" driver.
1559
- Incorporated Tom's patches to support flex operators correctly in
1560
OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
1561
fonts to be done with this driver :-)
1563
- Added the Windows FNT/FON driver in "src/winfonts". For now, it
1564
always "simulates" a Unicode charmap, so it shouldn't be
1565
considered completed right now.
1567
It is there to be more a proof of concept than anything else
1568
anyway. The driver is a single C source file, that compiles to 3
1571
I'm still working on the PCF/BDF drivers, but I'm too lazy to
1574
- CHANGES TO THE HIGH-LEVEL API
1576
* FT_Get_Kerning has a new parameter that allows you to select the
1577
coordinates of the kerning vector (font units, scaled, scaled +
1579
* The outline functions are now in <freetype/ftoutln.h> and not
1580
part of <freetype/freetype.h> anymore.
1581
* <freetype/ftmodule.h> now contains declarations for
1582
FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
1583
* The so-called convenience functions have moved from "ftoutln.c"
1584
to "ftglyph.c", and are thus available with this optional
1585
component of the library. They are declared in
1586
<freetype/ftglyph.h> now.
1587
* Anti-aliased rendering is now the default for FT_Render_Glyph
1588
(i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
1589
To generate a monochrome bitmap, use ft_render_mode_mono, or the
1590
FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
1591
FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
1592
* <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
1593
solving a few headaches :-)
1594
* The type FT_GlyphSlotRec has now a "library" field.
1596
- CHANGES TO THE "ftglyph.h" API
1598
This API has been severely modified in order to make it simpler,
1599
clearer, and more efficient. It certainly now looks like a real
1600
"glyph factory" object, and allows client applications to manage
1601
(i.e. transform, bbox and render) glyph images without ever
1602
knowing their original format.
1604
- Added support for CID-keyed fonts to the CFF driver. Maybe
1605
support for pure CFF + CEF fonts should come in?
1607
- Cleaned up source code in order to avoid two functions with the
1608
same name. Also changed the names of the files in "type1z" from
1609
"t1XXXX" to "z1XXXX" in order to avoid any conflicts.
1611
"make multi" now works well :-)
1613
Also removed the use of "cidafm" for now, even if the source files
1614
are still there. This functionality will certainly go into a
1617
- ADDED SUPPORT FOR THE AUTO-HINTER
1619
It works :-) I have a demo program which simply is a copy of
1620
"ftview" that does a `FT_Add_Module(library,
1621
&autohinter_module_class)' after library initialization, and Type
1622
1 & OpenType/CFF fonts are now hinted.
1624
CID fonts are not hinted, as they include no charmap and the
1625
auto-hinter doesn't include "generic" global metrics computations
1628
Now, I need to release this thing to the FreeType 2 source.
1630
- CHANGES TO THE RENDERER MODULES
1632
The monochrome and smooth renderers are now in two distinct
1633
directories, namely "src/raster1" and "src/smooth". Note that the
1634
old "src/renderer" is now gone.
1636
I ditched the 5-gray-levels renderers. Basically, it involved a
1637
simple #define toggle in 'src/raster1/ftraster.c'.
1639
FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
1640
select the best renderer available, depending on render mode. If
1641
the current renderer for a given glyph image format isn't capable
1642
of supporting the render mode, another one will be found in the
1643
library's list. This means that client applications do not need
1644
to switch or set the renderers themselves (as in the latest
1645
change), they'll get what they want automatically. At last.
1647
Changed the demo programs accordingly.
1649
- MAJOR INTERNAL REDESIGN:
1651
A lot of internal modifications have been performed lately on the
1652
source in order to provide the following enhancements:
1654
* More generic module support:
1656
The FT_Module type is now defined to represent a handle to a
1657
given module. The file <freetype/ftmodule.h> contains the
1658
FT_Module_Class definition, as well as the module-loading public
1661
The FT_Driver type is still defined, and still represents a
1662
pointer to a font driver. Note that FT_Add_Driver is replaced
1663
by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
1665
* Support for generic glyph image types:
1667
The FT_Renderer type is a pointer to a module used to perform
1668
various operations on glyph image.
1670
Each renderer is capable of handling images in a single format
1671
(e.g. ft_glyph_format_outline). Its functions are used to:
1673
- transform an glyph image
1674
- render a glyph image into a bitmap
1675
- return the control box (dimensions) of a given glyph image
1677
The scan converters "ftraster.c" and "ftgrays.c" have been moved
1678
to the new directory "src/renderer", and are used to provide two
1679
default renderer modules.
1681
One corresponds to the "standard" scan-converter, the other to
1684
he current renderer can be set through the new function
1687
The old raster-related function FT_Set_Raster, FT_Get_Raster and
1688
FT_Set_Raster_Mode have now disappeared, in favor of the new:
1693
See the file <freetype/ftrender.h> for more details.
1695
These changes were necessary to properly support different
1696
scalable formats in the future, like bi-color glyphs, etc.
1698
* Glyph loader object:
1700
A new internal object, called a 'glyph loader' has been
1701
introduced in the base layer. It is used by all scalable format
1702
font drivers to load glyphs and composites.
1704
This object has been created to reduce the code size of each
1705
driver, as each one of them basically re-implemented its
1708
See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
1711
* FT_GlyphSlot has new fields:
1713
In order to support extended features (see below), the
1714
FT_GlyphSlot structure has a few new fields:
1718
This field gives the linearly scaled (i.e. scaled but
1719
unhinted) advance width for the glyph, expressed as a 16.16
1720
fixed pixel value. This is useful to perform WYSIWYG text.
1723
This field gives the linearly scaled advance height for the
1724
glyph (relevant in vertical glyph layouts only). This is
1725
useful to perform WYSIWYG text.
1727
Note that the two above field replace the removed "metrics2"
1728
field in the glyph slot.
1731
This field is a vector that gives the transformed advance for
1732
the glyph. By default, it corresponds to the advance width,
1733
unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
1734
FT_Load_Glyph or FT_Load_Char.
1737
This field gives the distance in integer pixels from the
1738
current pen position to the left-most pixel of a glyph image
1739
IF IT IS A BITMAP. It is only valid when the "format" field
1740
is set to "ft_glyph_format_bitmap", for example, after calling
1741
the new function FT_Render_Glyph.
1744
This field gives the distance in integer pixels from the
1745
current pen position (located on the baseline) to the top-most
1746
pixel of the glyph image IF IT IS A BITMAP. Positive values
1747
correspond to upwards Y.
1750
This is a new private field for the glyph slot. Client
1751
applications should not touch it.
1754
* Support for transforms and direct rendering in FT_Load_Glyph:
1756
Most of the functionality found in <freetype/ftglyph.h> has been
1757
moved to the core library. Hence, the following:
1759
- A transform can be specified for a face through
1760
FT_Set_Transform. this transform is applied by FT_Load_Glyph
1761
to scalable glyph images (i.e. NOT TO BITMAPS) before the
1762
function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
1763
was set in the load flags.
1765
- Once a glyph image has been loaded, it can be directly
1766
converted to a bitmap by using the new FT_Render_Glyph
1767
function. Note that this function takes the glyph image from
1768
the glyph slot, and converts it to a bitmap whose properties
1769
are returned in "face.glyph.bitmap", "face.glyph.bitmap_left"
1770
and "face.glyph.bitmap_top". The original native image might
1771
be lost after the conversion.
1773
- When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
1774
and FT_Load_Char functions will call FT_Render_Glyph
1775
automatically when needed.
1777
- Reformatted all modules source code in order to get rid of the
1778
basic data types redifinitions (i.e. "TT_Int" instead of "FT_Int",
1779
"T1_Fixed" instead of "FT_Fixed"). Hence the format-specific
1780
prefixes like "TT_", "T1_", "T2_" and "CID_" are only used for
1781
relevant structures.
1784
======================================================================
1786
OLD CHANGES FOR BETA 7
1788
- bug-fixed the OpenType/CFF parser. It now loads and displays my
1789
two fonts nicely, but I'm pretty certain that more testing is
1792
- fixed the crummy Type 1 hinter, it now handles accented characters
1793
correctly (well, the accent is not always well placed, but that's
1796
- added the CID-keyed Type 1 driver in "src/cid". Works pretty well
1797
for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
1798
really useful CMAP files..
1800
- fixed two bugs in the smooth renderer (src/base/ftgrays.c).
1801
Thanks to Boris Letocha for spotting them and providing a fix.
1803
- fixed potential "divide by zero" bugs in ftcalc.c.
1805
- added source code for the OpenType/CFF driver (still incomplete
1808
- modified the SFNT driver slightly to perform more robust header
1809
checks in TT_Load_SFNT_Header. This prevents certain font files
1810
(e.g. some Type 1 Multiple Masters) from being incorrectly
1811
"recognized" as TrueType font files..
1813
- moved a lot of stuff from the TrueType driver to the SFNT module,
1814
this allows greater code re-use between font drivers
1815
(e.g. TrueType, OpenType, Compact-TrueType, etc..)
1817
- added a tiny segment cache to the SFNT Charmap 4 decoder, in order
1818
to minimally speed it up..
1820
- added support for Multiple Master fonts in "type1z". There is
1821
also a new file named <freetype/ftmm.h> which defines functions to
1822
manage them from client applications.
1824
The new file "src/base/ftmm.c" is also optional to the engine..
1826
- various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
1827
small bug fixes in FT_Load_Glyph, the "type1" driver, etc..
1829
- a minor fix to the Type 1 driver to let them apply the font matrix
1830
correctly (used for many oblique fonts..)
1832
- some fixes for 64-bit systems (mainly changing some FT_TRACE calls
1833
to use %p instead of %lx). Thanks to Karl Robillard.
1835
- fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
1836
added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
1837
cropped when loaded from a file (maybe I should move the bitmap
1838
cropper to the base layer ??).
1840
- changed the default number of gray levels of the smooth renderer
1841
to 256 (instead of the previous 128). Of course, the human eye
1842
can't see any difference ;-)
1844
- removed TT_MAX_SUBGLYPHS, there is no static limit on the number
1845
of subglyphs in a TrueType font now..
1848
======================================================================
1850
OLD CHANGES 16 May 2000
1852
- tagged "BETA-6" in the CVS tree. This one is a serious release
1853
candidate even though it doesn't incorporate the auto-hinter yet..
1855
- various obsolete files were removed, and copyright header updated
1857
- finally updated the standard raster to fix the monochrome
1858
rendering bug + re-enable support for 5-gray levels anti-aliasing
1861
- created new header files, and modified sources accordingly:
1863
<freetype/fttypes.h>
1864
- simple FreeType types, without the API
1865
<freetype/internal/ftmemory.h>
1866
- definition of memory-management macros
1868
- added the "DSIG" (OpenType Digital Signature) tag to
1871
- light update/cleaning of the build system + changes to the sources
1872
in order to get rid of _all_ compiler warnings with three
1875
gcc with "-ansi -pedantic -Wall -W", Visual C++ with "/W3 /WX" and
1878
IMPORTANT NOTE FOR WIN32-LCC USERS:
1880
| It seems the C pre-processor that comes with LCC is broken, it
1881
| doesn't recognize the ANSI standard directives # and ##
1882
| correctly when one of the argument is a macro. Also,
1885
| #define F(x) print##x
1889
| will get incorrectly translated to:
1893
| by its pre-processor. For this reason, you simply cannot build
1894
| FreeType 2 in debug mode with this compiler..
1896
- yet another massive grunt work. I've changed the definition of
1897
the EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These
1898
now take an argument, which is the function's return value type.
1900
This is necessary to compile FreeType as a DLL on Windows and
1901
OS/2. Depending on the compiler used, a compiler-specific keyword
1902
like __export or __system must be placed before (VisualC++) or
1903
after (BorlandC++) the type..
1905
Of course, this needed a lot of changes throughout the source code
1906
to make it compile again... All cleaned up now, apparently..
1908
Note also that there is a new EXPORT_VAR macro defined to allow
1909
the _declaration_ of an exportable public (constant)
1910
variable. This is the case of the raster interfaces (see
1911
ftraster.h and ftgrays.h), as well as each module's interface (see
1912
sfdriver.h, psdriver.h, etc..)
1914
- new feature: it is now possible to pass extra parameters to font
1915
drivers when creating a new face object. For now,
1916
this capability is unused. It could however prove to
1917
be useful in a near future..
1919
the FT_Open_Args structure was changes, as well as the internal
1920
driver interface (the specific "init_face" module function has
1921
now a different signature).
1923
- updated the tutorial (not finished though).
1925
- updated the top-level BUILD document
1927
- fixed a potential memory leak that could occur when loading
1930
- added the declaration of FT_New_Memory_Face in
1931
<freetype/freetype.h>, as it was missing from the public header
1932
(the implementation was already in "ftobjs.c").
1934
- the file <freetype/fterrors.h> has been seriously updated in order
1935
to allow the automatic generation of error message tables. See
1936
the comments within it for more information.
1938
- major directory hierarchy re-organisation. This was done for two
1941
* first, to ease the "manual" compilation of the library by
1942
requiring at lot less include paths :-)
1944
* second, to allow external programs to effectively access
1945
internal data fields. For example, this can be extremely
1946
useful if someone wants to write a font producer or a font
1947
manager on top of FreeType.
1949
Basically, you should now use the 'freetype/' prefix for header
1952
#include <freetype/freetype.h>
1953
#include <freetype/ftglyph.h>
1955
Some new include sub-directories are available:
1957
a. the "freetype/config" directory, contains two files used to
1958
configure the build of the library. Client applications
1959
should not need to look at these normally, but they can if
1962
#include <freetype/config/ftoption.h>
1963
#include <freetype/config/ftconfig.h>
1965
b. the "freetype/internal" directory, contains header files that
1966
describes library internals. These are the header files that
1967
were previously found in the "src/base" and "src/shared"
1971
As usual, the build system and the demos have been updated to
1972
reflect the change..
1974
Here's a layout of the new directory hierarchy:
2003
Compiling a module is now much easier, for example, the following
2004
should work when in the TOP_DIR directory on an ANSI build:
2006
gcc -c -I./include -I./src/base src/base/ftbase.c
2007
gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
2010
(of course, using -Iconfig/<system> if you provide system-specific
2011
configuration files).
2013
- updated the structure of FT_Outline_Funcs in order to allow direct
2014
coordinate scaling within the outline decomposition routine (this
2015
is important for virtual "on" points with TrueType outlines) +
2016
updates to the rasters to support this..
2018
- updated the OS/2 table loading code in "src/sfnt/ttload.c" in
2019
order to support version 2 of the table (see OpenType 1.2 spec)
2021
- created "include/tttables.h" and "include/t1tables.h" to allow
2022
client applications to access some of the SFNT and T1 tables of a
2023
face with a procedural interface (see FT_Get_Sfnt_Table()) +
2024
updates to internal source files to reflect the change..
2026
- some cleanups in the source code to get rid of warnings when
2027
compiling with the "-Wall -W -ansi -pedantic" options in gcc.
2029
- debugged and moved the smooth renderer to "src/base/ftgrays.c" and
2030
its header to "include/ftgrays.h"
2032
- updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
2033
with up to 80 sub-glyphs !! Thanks to Werner
2036
======================================================================
2038
OLD CHANGES - 14-apr-2000
2040
- fixed a bug in the TrueType glyph loader that prevented the
2041
correct loading of some CJK glyphs in mingli.ttf
2043
- improved the standard Type 1 hinter in "src/type1"
2045
- fixed two bugs in the experimental Type 1 driver in "src/type1z"
2046
to handle the new XFree86 4.0 fonts (and a few other ones..)
2048
- the smooth renderer is now complete and supports sub-banding to
2049
render large glyphs at high speed. However, it is still located
2050
in "demos/src/ftgrays.c" and should move to the library itself in
2051
the next beta. NOTE: The smooth renderer doesn't compile in
2052
stand-alone mode anymore, but this should be fixed RSN..
2054
- introduced convenience functions to more easily deal with glyph
2055
images, see "include/ftglyph.h" for more details, as well as the
2056
new demo program named "demos/src/ftstring.c" that demonstrates
2059
- implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
2060
drivers (this is required by the auto-hinter to improve its
2063
- changed the raster interface, in order to allow client
2064
applications to provide their own span-drawing callbacks.
2065
However, only the smooth renderer supports this. See
2066
"FT_Raster_Params" in the file "include/ftimage.h".
2068
- fixed a small bug in FT_MulFix that caused incorrect transform
2071
- Note: The tutorial is out-of-date.
2074
======================================================================
2076
OLD CHANGES - 12-mar-2000
2078
- changed the layout of configuration files : now, all ANSI
2079
configuration files are located in
2080
"freetype2/config". System-specific over-rides can be placed in
2081
"freetype2/config/<system>".
2083
- moved all configuration macros to "config/ftoption.h"
2085
- improvements in the Type 1 driver with AFM support
2087
- changed the fields in the FT_Outline structure : the old "flags"
2088
array is re-named "tags", while all ancient flags are encoded into
2089
a single unsigned int named "flags".
2091
- introduced new flags in FT_Outline.flags (see
2092
ft_outline_.... enums in "ftimage.h").
2094
- changed outline functions to "FT_Outline_<action>" syntax
2096
- added a smooth anti-alias renderer to the demonstration programs
2098
- added Mac graphics driver (thanks Just)
2100
- FT_Open_Face changed in order to received a pointer to a
2101
FT_Open_Args descriptor..
2103
- various cleanups, a few more API functions implemented (see
2109
======================================================================
2111
OLD CHANGES - 22-feb-2000
2113
- introduced the "psnames" module. It is used to:
2115
o convert a Postscript glyph name into the equivalent Unicode
2116
character code (used by the Type 1 driver(s) to synthetize on
2117
the fly a Unicode charmap).
2119
o provide an interface to retrieve the Postscript names of the
2120
Macintosh, Adobe Standard & Adobe Expert character codes.
2121
(the Macintosh names are used by the SFNT-module postscript
2122
names support routines, while the other two tables are used by
2123
the Type 1 driver(s)).
2125
- introduced the "type1z" alternate Type 1 driver. This is a (still
2126
experimental) driver for the Type 1 format that will ultimately
2127
replace the one in "src/type1". It uses pattern matching to load
2128
data from the font, instead of a finite state analyzer. It works
2129
much better than the "old" driver with "broken" fonts. It is also
2130
much smaller (under 15 Kb).
2132
- the Type 1 drivers (both in "src/type1" and "src/type1z") are
2133
nearly complete. They both provide automatic Unicode charmap
2134
synthesis through the "psnames" module. No re-encoding vector is
2135
needed. (note that they still leak memory due to some code
2136
missing, and I'm getting lazy).
2138
Trivial AFM support has been added to read kerning information but
2139
wasn't exactly tested as it should ;-)
2141
- The TrueType glyph loader has been seriously rewritten (see the
2142
file "src/truetype/ttgload.c". It is now much, much simpler as
2143
well as easier to read, maintain and understand :-) Preliminary
2144
versions introduced a memory leak that has been reported by Jack
2145
Davis, and is now fixed..
2147
- introduced the new "ft_glyph_format_plotter", used to represent
2148
stroked outlines like Windows "Vector" fonts, and certain Type 1
2149
fonts like "Hershey". The corresponding raster will be written
2152
- FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
2153
interface that uses a structure to describe the input stream, the
2154
driver (if required), etc..
2159
- Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
2161
- Add a function like FT_Load_Character( face, char_code, load_flags
2162
) that would really embbed a call to FT_Get_Char_Index then
2163
FT_Load_Glyph to ease developer's work.
2165
- Update the tutorial!
2167
- consider adding support for Multiple Master fonts in the Type 1
2170
- Test the AFM routines of the Type 1 drivers to check that kerning
2171
information is returned correctly.
2173
- write a decent auto-gridding component !! We need this to release
2179
- add a CFF/Type2 driver
2181
- add a FNT/PCF/HBF driver
2182
- add a Speedo driver from the X11 sources
2185
======================================================================
2187
OLDER CHANGES - 27-jan-2000
2189
- updated the "sfnt" module interface to allow several SFNT-based
2190
drivers to co-exist peacefully
2192
- updated the "T1_Face" type to better separate Postscript font
2193
content from the rest of the FT_Face structure. Might be used
2194
later by the CFF/Type2 driver..
2196
- added an experimental replacement Type 1 driver featuring advanced
2197
(and speedy) pattern matching to retrieve the data from postscript
2200
- very minor changes in the implementation of FT_Set_Char_Size and
2201
FT_Set_Pixel_Sizes (they now implement default to ligthen the font
2205
======================================================================
2209
This file summarizes the changes that occured since the last "beta" of
2210
FreeType 2. Because the list is important, it has been divided into
2215
I High-Level Interface (easier !)
2216
II Directory Structure
2217
III Glyph Image Formats
2223
----------------------------------------------------------------------
2225
High-Level Interface:
2227
The high-level API has been considerably simplified. Here is how:
2229
- resource objects have disappeared. this means that face objects
2230
can now be created with a single function call (see FT_New_Face
2233
- when calling either FT_New_Face & FT_Open_Face, a size object
2234
and a glyph slot object are automatically created for the face,
2235
and can be accessed through "face->glyph" and "face->size" if
2236
one really needs to. In most cases, there's no need to call
2237
FT_New_Size or FT_New_Glyph.
2239
- similarly, FT_Load_Glyph now only takes a "face" argument
2240
(instead of a glyph slot and a size). Also, it's "result"
2241
parameter is gone, as the glyph image type is returned in the
2242
field "face->glyph.format"
2244
- the list of available charmaps is directly accessible through
2245
"face->charmaps", counting "face->num_charmaps" elements. Each
2246
charmap has an 'encoding' field which specifies which known
2247
encoding it deals with. Valid values are, for example:
2249
ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
2250
ft_encoding_apple_roman
2252
ft_encoding_adobe_standard
2253
ft_encoding_adobe_expert
2255
other values may be added in the future. Each charmap still
2256
holds its "platform_id" and "encoding_id" values in case the
2257
encoding is too exotic for the current library
2260
----------------------------------------------------------------------
2262
Directory Structure:
2264
Should seem obvious to most of you:
2267
config/ -- configuration sub-makefiles
2269
unix/ -- platform-specific configuration files
2274
include/ -- public header files, those to be included
2275
directly by client apps
2277
src/ -- sources of the library
2278
base/ -- the base layer
2279
sfnt/ -- the sfnt "driver" (see the drivers section
2281
truetype/ -- the truetype driver
2282
type1/ -- the type1 driver
2283
shared/ -- some header files shared between drivers
2285
demos/ -- demos/tools
2287
docs/ -- documentation (a bit empty for now)
2290
----------------------------------------------------------------------
2292
Glyph Image Formats:
2294
Drivers are now able to register new glyph image formats within the
2295
library. For now, the base layer supports of course bitmaps and
2296
vector outlines, but one could imagine something different like
2297
colored bitmaps, bi-color vectors or wathever else (Metafonts anyone
2300
See the file `include/ftimage.h'. Note also that the type
2301
FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
2302
should encompass all known bitmap types.
2304
Each new image format must provide at least one "raster", i.e. a
2305
module capable of transforming the glyph image into a bitmap. It's
2306
also possible to change the default raster used for a given glyph
2309
The default outline scan-converter now uses 128 levels of grays by
2310
default, which tends to smooth many things. Note that the demo
2311
programs have been updated significantly in order to display these..
2314
----------------------------------------------------------------------
2318
You still need GNU Make to build the library. The build system has
2319
been very seriously re-vamped in order to provide things like :
2321
- automatic host platform detection (reverting to 'config/ansi' if
2322
it is not detected, with pseudo-standard compilation flags)
2324
- the ability to compile from the Makefiles with very different and
2325
exotic compilers. Note that linking the library can be difficult
2328
For example, the file `config/win32/lcclib.bat' is invoked by the
2329
build system to create the ".lib" file with LCC-Win32 because its
2330
librarian has too many flaws to be invoked directly from the
2333
Here's how it works:
2335
- the first time you type `make', the build system runs a series of
2336
sub-makefiles in order to detect your host platform. It then
2337
dumps what it found, and creates a file called `config.mk' in the
2338
current directory. This is a sub-Makefile used to define many
2339
important Make variables used to build the library.
2341
- the second time, the build system detects the `config.mk' then use
2342
it to build the library. All object files go into 'obj' by
2343
default, as well as the library file, but this can easily be
2346
Note that you can run "make setup" to force another host platform
2347
detection even if a `config.mk' is present in the current
2348
directory. Another solution is simply to delete the file, then
2351
Finally, the default compiler for all platforms is gcc (for now,
2352
this will hopefully changed in the future). You can however specify
2353
a different compiler by specifying it after the 'setup' target as
2356
gnumake setup lcc on Win32 to use the LCC compiler
2357
gnumake setup visualc on Win32 to use Visual C++
2359
See the file `config/<system>/detect.mk' for a list of supported
2360
compilers for your platforms.
2362
It should be relatively easy to write new detection rules files and
2365
Finally, to build the demo programs, go to `demos' and launch GNU
2366
Make, it will use the `config.mk' in the top directory to build the
2370
----------------------------------------------------------------------
2374
In the previous beta, a single FT_System object was used to
2375
encompass all low-level operations like thread synchronisation,
2376
memory management and i/o access. This has been greatly simplified:
2378
- thread synchronisation has been dropped, for the simple reason
2379
that the library is already re-entrant, and that if you really
2380
need two threads accessing the same FT_Library, you should
2381
really synchronize access to it yourself with a simple mutex.
2383
- memory management is performed through a very simple object
2384
called "FT_Memory", which really is a table containing a table
2385
of pointers to functions like malloc, realloc and free as well
2386
as some user data (closure).
2388
- resources have disappeared (they created more problems than they
2389
solved), and i/o management have been simplified greatly as a
2390
result. Streams are defined through FT_Stream objects, which
2391
can be either memory-based or disk-based.
2393
Note that each face has its own stream, which is closed only
2394
when the face object is destroyed. Hence, a function like
2395
TT_Flush_Face in 1.x cannot be directly supported. However, if
2396
you really need something like this, you can easily tailor your
2397
own streams to achieve the same feature at a lower level (and
2398
use FT_Open_Face instead of FT_New_Face to create the face).
2400
See the file "include/ftsystem.h" for more details, as well as the
2401
implementations found in "config/unix" and "config/ansi".
2404
----------------------------------------------------------------------
2408
The Font Driver interface has been modified in order to support
2409
extensions & versioning.
2412
The list of the font drivers that are statically linked to the
2413
library at compile time is managed through a new configuration file
2414
called `config/<platform>/ftmodule.h'.
2416
This file is autogenerated when invoking `make modules'. This
2417
target will parse all sub-directories of 'src', looking for a
2418
"module.mk" rules file, used to describe the driver to the build
2421
Hence, one should call `make modules' each time a font driver is
2422
added or removed from the `src' directory.
2424
Finally, this version provides a "pseudo-driver" in `src/sfnt'.
2425
This driver doesn't support font files directly, but provides
2426
services used by all TrueType-like font drivers. Hence, its code is
2427
shared between the TrueType & OpenType font formats, and possibly
2428
more formats to come if we're lucky..
2431
----------------------------------------------------------------------
2435
The extensions support is inspired by the one found in 1.x.
2437
Now, each font driver has its own "extension registry", which lists
2438
which extensions are available for the font faces managed by the
2441
Extension ids are now strings, rather than 4-byte tags, as this is
2442
usually more readable.
2445
- some data, associated to each face object
2446
- an interface (table of function pointers)
2448
An extension that is format-specific should simply register itself
2449
to the correct font driver. Here is some example code:
2451
// Registering an extensions
2453
FT_Error FT_Init_XXXX_Extension( FT_Library library )
2455
FT_DriverInterface* tt_driver;
2457
driver = FT_Get_Driver( library, "truetype" );
2458
if (!driver) return FT_Err_Unimplemented_Feature;
2460
return FT_Register_Extension( driver, &extension_class );
2464
// Implementing the extensions
2466
FT_Error FT_Proceed_Extension_XXX( FT_Face face )
2468
FT_XXX_Extension ext;
2469
FT_XXX_Extension_Interface ext_interface;
2471
ext = FT_Get_Extension( face, "extensionid", &ext_interface );
2472
if (!ext) return error;
2474
return ext_interface->do_it(ext);
2477
--- end of CHANGES ---