blob: a3d25c4dac697d5ac3bc6f35f6200e079f21e9af [file] [log] [blame]
David Turnerb8f56fa2001-03-20 15:04:30 +00001LATEST CHANGES BETWEEN 2.0.2 and 2.0.1
David Turnerd3c8e062000-12-04 22:53:55 +00002
David Turnerd3c8e062000-12-04 22:53:55 +00003
David Turnera0f89552001-03-23 12:28:59 +00004 I. CHANGES TO THE MODULES / FONT DRIVERS:
5
6 - THE TRUETYPE BYTECODE INTERPRETER IS NOW TURNED OFF, in order to
Werner Lembergab6d1072001-04-02 21:30:06 +00007 avoid legal problems with the Apple patents. It seems that we
8 mistakenly turned this option on in previous releases of the
9 build.
David Turnera0f89552001-03-23 12:28:59 +000010
Werner Lembergab6d1072001-04-02 21:30:06 +000011 Note that if you want to use the bytecode interpreter in order
12 to get high-quality TrueType rendering, you will need to toggle
13 by hand the definition of the
14 TT_CONFIG_OPTION_BYTECODE_INTERPRETER macro in the file
15 "include/freetype/config/ftoption.h".
16
17 - The CFF driver has been improved by Tom Kacvinsky and Sander van
18 der Wal:
19
20 * Support for "seac" emulation.
21 * Support for "dotsection".
22 * Support for retrieving glyph names through
23 "FT_Get_Glyph_Name".
David Turnera0f89552001-03-23 12:28:59 +000024
25 The first two items are necessary to correctly a large number of
Werner Lembergab6d1072001-04-02 21:30:06 +000026 Type 1 fonts converted to the CFF formats by Adobe Acrobat.
David Turnera0f89552001-03-23 12:28:59 +000027
Werner Lembergab6d1072001-04-02 21:30:06 +000028 - The Type 1 driver was also improved by Tom & others:
David Turnera0f89552001-03-23 12:28:59 +000029
Werner Lembergab6d1072001-04-02 21:30:06 +000030 * Better EM size computation.
31 * Better support for synthetic (transformed) fonts.
32 * The Type 1 driver returns the charstrings corresponding to
33 each glyph in the "glyph->control_data" field after a call to
34 "FT_Load_Glyph" (thanks Ha Shao).
David Turnera0f89552001-03-23 12:28:59 +000035
Werner Lembergab6d1072001-04-02 21:30:06 +000036 - Various other bugfixes, including the following:
David Turnera0f89552001-03-23 12:28:59 +000037
Werner Lembergab6d1072001-04-02 21:30:06 +000038 * Fixed a nasty memory leak in the Type 1 driver.
39 * The autohinter and the pcf driver used static writable data
40 when they shouldn't.
41 * Many casts were added to make the code more 64-bits safe. It
42 also now compiles on Windows XP 64-bits without warnings.
43 * Some incorrect writable statics were removed in the "autohint"
44 and "pcf" drivers. FreeType 2 now compiles on Epoc again.
David Turnera0f89552001-03-23 12:28:59 +000045
46
47 II. CHANGES TO THE HIGH-LEVEL API
David Turnera0f89552001-03-23 12:28:59 +000048
Werner Lembergab6d1072001-04-02 21:30:06 +000049 - The library header files inclusion scheme has been changed. The
50 old scheme looked like:
51
52 #include <freetype/freetype.h>
53 #include <freetype/ftglyph.h>
54 #include <freetype/ftcache.h>
55 #include <freetype/cache/ftimage.h>
56
57 Now you should use:
58
59 #include <ft2build.h>
60 #include FT_FREETYPE_H
61 #include FT_GLYPH_H
62 #include FT_CACHE_H
63 #include FT_CACHE_IMAGE_H
64
65 NOTE THAT THE OLD INCLUSION SCHEME WILL STILL WORK WITH THIS
66 RELEASE. HOWEVER, WE DO NOT GUARANTEE THAT THIS WILL STILL BE
67 TRUE IN THE NEXT ONE (A.K.A. FREETYPE 2.1).
68
69 The file <ft2build.h> is used to define the header filename
70 macros. The complete and commented list of macros is available
71 in the API reference under the section name "Header File Macros"
72 in Chapter I.
David Turnera0f89552001-03-23 12:28:59 +000073
David Turnerf876b242001-03-23 18:09:09 +000074 For more information, see section I of the following document:
David Turnerf876b242001-03-23 18:09:09 +000075
Werner Lembergab6d1072001-04-02 21:30:06 +000076 http://www.freetype.org/
77 freetype2/docs/tutorial/step1.html
David Turnerf876b242001-03-23 18:09:09 +000078
Werner Lembergab6d1072001-04-02 21:30:06 +000079 or
David Turnera0f89552001-03-23 12:28:59 +000080
Werner Lembergab6d1072001-04-02 21:30:06 +000081 http://freetype.sourceforge.net/
82 freetype2/docs/tutorial/step1.html
83
84 - Many, many comments have been added to the public source file in
85 order to automatically generate the API Reference through the
86 "docmaker.py" Python script.
87
88 The latter has been updated to support the grouping of sections
89 in chapters and better index sort. See:
90
91 http://www.freetype.org/freetype2/docs/reference/ft2-toc.html
David Turnera0f89552001-03-23 12:28:59 +000092
93
94 III. CHANGES TO THE BUILD PROCESS
David Turnerb8f56fa2001-03-20 15:04:30 +000095
96
Werner Lembergab6d1072001-04-02 21:30:06 +000097 - If you are not building FreeType 2 with its own build system
98 (but with your own Makefiles or project files), you will need to
99 be aware that the build process has changed a little bit.
David Turnera0f89552001-03-23 12:28:59 +0000100
Werner Lembergab6d1072001-04-02 21:30:06 +0000101 You don't need to put the "src" directory in the include path
102 when compiling any FT2 component. Instead, simply put the
103 component's directory in the current include path.
104
105 So, if you were doing something like:
106
107 cc -c -Iinclude -Isrc src/base/ftbase.c
108
109 change the line to:
110
111 cc -c -Iinclude -Isrc/base src/base/ftbase.c
112
113 If you were doing something like:
114
115 cd src/base
116 cc -c -I../../include -I.. ftbase.c
117
118 change it to:
119
120 cd src/base
121 cc -c -I../../include ftbase.c
122
123
124======================================================================
125
David Turneraaac8132000-12-01 18:55:22 +0000126LATEST CHANGES BETWEEN 2.0.1 and 2.0:
127
Werner Lembergab6d1072001-04-02 21:30:06 +0000128
David Turneraaac8132000-12-01 18:55:22 +0000129 2.0.1 introduces a few changes:
130
Werner Lembergab6d1072001-04-02 21:30:06 +0000131 - Fixed many bugs related to the support of CFF / OpenType fonts.
132 These formats are now much better supported though there is
133 still work planned to deal with charset tables and PDF-embedded
134 CFF files that use the old "seac" command.
135
136 - The library could not be compiled in debug mode with a very
137 small number of C compilers whose pre-processors didn't
138 implement the "##" directive correctly (i.e. per se the ANSI C
139 specification!) An elegant fix was found.
140
141 - Added support for the free Borland command-line C++ Builder
142 compiler. Use "make setup bcc32". Also fixed a few source
143 lines that generated new warnings with BCC32.
144
145 - Fixed a bug in FT_Outline_Get_BBox when computing the extrema of
Werner Lemberg2e82c932000-12-01 21:56:47 +0000146 a conic Bezier arc.
David Turneraaac8132000-12-01 18:55:22 +0000147
Werner Lembergab6d1072001-04-02 21:30:06 +0000148 - Updated the INSTALL file to add IDE compilation.
David Turneraaac8132000-12-01 18:55:22 +0000149
Werner Lembergab6d1072001-04-02 21:30:06 +0000150 - Other minor bug fixes, from invalid Type 1 style flags to
151 correct support of synthetic (obliqued) fonts in the
152 auto-hinter, better support for embedded bitmaps in a SFNT font.
David Turneraaac8132000-12-01 18:55:22 +0000153
Werner Lembergab6d1072001-04-02 21:30:06 +0000154 - Fixed some problems with "freetype-config".
David Turneraaac8132000-12-01 18:55:22 +0000155
156 Finally, the "standard" scheme for including FreeType headers is now
Werner Lembergab6d1072001-04-02 21:30:06 +0000157 gradually changing, but this will be explained in a later release
158 (probably 2.0.2).
David Turneraaac8132000-12-01 18:55:22 +0000159
Werner Lembergab6d1072001-04-02 21:30:06 +0000160 And very special thanks to Tom Kacvinsky and YAMANO-UCHI Hidetoshi
161 for their contributions!
David Turneraaac8132000-12-01 18:55:22 +0000162
Werner Lembergab6d1072001-04-02 21:30:06 +0000163
164======================================================================
165
David Turneraaac8132000-12-01 18:55:22 +0000166CHANGES BETWEEN beta8 and 2.0
David Turnerf9b8dec2000-06-16 19:34:52 +0000167
Werner Lembergab6d1072001-04-02 21:30:06 +0000168 - Changed the default installation path for public headers from
David Turner27c88272000-11-09 19:10:22 +0000169 "include/freetype" to "include/freetype2".
170
Werner Lembergab6d1072001-04-02 21:30:06 +0000171 Also added a new "freetype-config" that is automatically generated
172 and installed on Unix and Cygwin systems. The script itself is
173 used to retrieve the current install path, C compilation flags as
174 well as linker flags.
David Turner27c88272000-11-09 19:10:22 +0000175
Werner Lembergab6d1072001-04-02 21:30:06 +0000176 - Fixed several small bugs:
David Turner27c88272000-11-09 19:10:22 +0000177
Werner Lembergab6d1072001-04-02 21:30:06 +0000178 * Incorrect max advance width for fixed-pitch Type 1 fonts.
179 * Incorrect glyph names for certain TrueType fonts.
180 * The glyph advance was not copied when FT_Glyph_To_Bitmap was
181 called.
182 * The linearHoriAdvance and linerVertAdvance fields were not
183 correctly returned for glyphs processed by the auto-hinter.
184 * "type1z" renamed back to "type1"; the old "type1" module has
185 been removed.
David Turner27c88272000-11-09 19:10:22 +0000186
Werner Lembergab6d1072001-04-02 21:30:06 +0000187 - Revamped the build system to make it a lot more generic. This
188 will allow us to re-use nearly un-modified in lots of other
189 projects (including FreeType Layout).
David Turner27c88272000-11-09 19:10:22 +0000190
Werner Lembergab6d1072001-04-02 21:30:06 +0000191 - Changed "cid" to use "psaux" too.
David Turner27c88272000-11-09 19:10:22 +0000192
Werner Lembergab6d1072001-04-02 21:30:06 +0000193 - Added the cache sub-system. See <freetype/ftcache.h> as well as
194 the sources in "src/cache". Note that it compiles but is still
195 untested for now.
David Turner27c88272000-11-09 19:10:22 +0000196
Werner Lembergab6d1072001-04-02 21:30:06 +0000197 - Updated "docs/docmaker.py", a draft API reference is available at
198 http://www.freetype.org/ft2api.html.
Werner Lembergb5084e12000-10-28 17:10:06 +0000199
Werner Lembergab6d1072001-04-02 21:30:06 +0000200 - Changed "type1" to use "psaux".
David Turner046f7a02000-09-15 22:42:06 +0000201
Werner Lembergab6d1072001-04-02 21:30:06 +0000202 - Created a new module named "psaux" to hold the Type 1 & Type 2
203 parsing routines. It should be used by "type1", "cid", and "cff"
204 in the future.
David Turner34f1c2f2000-08-23 22:47:44 +0000205
Werner Lembergab6d1072001-04-02 21:30:06 +0000206 - Fixed an important bug in "FT_Glyph_Get_CBox".
David Turner3b2c50e2000-08-23 21:11:13 +0000207
Werner Lembergab6d1072001-04-02 21:30:06 +0000208 - Fixed some compiler warnings that happened since the TrueType
209 bytecode decoder was deactivated by default.
David Turnera39acf52000-08-23 02:47:57 +0000210
Werner Lembergab6d1072001-04-02 21:30:06 +0000211 - Fixed two memory leaks:
David Turnera39acf52000-08-23 02:47:57 +0000212
Werner Lembergab6d1072001-04-02 21:30:06 +0000213 * The memory manager (16 bytes) isn't released in
214 FT_Done_FreeType!
215 * Using custom input streams, the copy of the original stream was
216 never released.
David Turnera39acf52000-08-23 02:47:57 +0000217
Werner Lembergab6d1072001-04-02 21:30:06 +0000218 - Fixed the auto-hinter by performing automatic computation of the
219 "filling direction" of each glyph. This is done through a simple
220 and fast approximation, and seems to work (problems spotted by
221 Werner though). The Arphic fonts are a lot nicer though there are
222 still a lot of things to do to handle Asian fonts correctly.
David Turnera39acf52000-08-23 02:47:57 +0000223
David Turnerb1693412000-07-27 21:48:48 +0000224
Werner Lembergab6d1072001-04-02 21:30:06 +0000225======================================================================
Werner Lemberge4b32a52000-10-31 20:42:18 +0000226
David Turnerc5cdf8b2000-07-27 21:40:22 +0000227BETA-8 (RELEASE CANDIDATE) CHANGES
228
Werner Lembergab6d1072001-04-02 21:30:06 +0000229 - Deactivated the TrueType bytecode interpreter by default.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000230
Werner Lembergab6d1072001-04-02 21:30:06 +0000231 - Deactivated the "src/type1" font driver. Now "src/type1z" is used
232 by default.
David Turner5f5b4462000-07-26 19:13:51 +0000233
Werner Lembergab6d1072001-04-02 21:30:06 +0000234 - Updates to the build system. We now compile the library correctly
235 under Unix system through "configure" which is automatically
236 called on the first "make" invocation.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000237
Werner Lembergab6d1072001-04-02 21:30:06 +0000238 - Added the auto-hinting module! Fixing some bugs here and there.
David Turner5fe4c002000-07-26 19:04:08 +0000239
Werner Lembergab6d1072001-04-02 21:30:06 +0000240 - Found some bugs in the composite loader (seac) of the Type1-based
241 font drivers.
David Turner49bd4f02000-07-12 16:57:37 +0000242
Werner Lembergab6d1072001-04-02 21:30:06 +0000243 - Renamed the directory "freetype2/config" to "freetype2/builds" and
244 updated all relevant files.
David Turner1ca6f2d2000-07-08 00:49:43 +0000245
Werner Lembergab6d1072001-04-02 21:30:06 +0000246 - Found a memory leak in the "type1" driver.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000247
Werner Lembergab6d1072001-04-02 21:30:06 +0000248 - Incorporated Tom's patches to support flex operators correctly in
249 OpenType/CFF fonts. Now all I need is to support pure CFF and CEF
250 fonts to be done with this driver :-)
David Turner9b3d1c72000-07-07 19:47:34 +0000251
Werner Lembergab6d1072001-04-02 21:30:06 +0000252 - Added the Windows FNT/FON driver in "src/winfonts". For now, it
253 always "simulates" a Unicode charmap, so it shouldn't be
254 considered completed right now.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000255
Werner Lembergab6d1072001-04-02 21:30:06 +0000256 It is there to be more a proof of concept than anything else
257 anyway. The driver is a single C source file, that compiles to 3
258 Kb of code.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000259
Werner Lembergab6d1072001-04-02 21:30:06 +0000260 I'm still working on the PCF/BDF drivers, but I'm too lazy to
261 finish them now.
David Turner9b3d1c72000-07-07 19:47:34 +0000262
David Turnerc06aba22000-06-30 23:38:23 +0000263 - CHANGES TO THE HIGH-LEVEL API
Werner Lemberge4b32a52000-10-31 20:42:18 +0000264
Werner Lembergab6d1072001-04-02 21:30:06 +0000265 * FT_Get_Kerning has a new parameter that allows you to select the
266 coordinates of the kerning vector (font units, scaled, scaled +
267 grid-fitted).
268 * The outline functions are now in <freetype/ftoutln.h> and not
269 part of <freetype/freetype.h> anymore.
270 * <freetype/ftmodule.h> now contains declarations for
271 FT_New_Library, FT_Done_Library, FT_Add_Default_Modules.
272 * The so-called convenience functions have moved from "ftoutln.c"
273 to "ftglyph.c", and are thus available with this optional
274 component of the library. They are declared in
275 <freetype/ftglyph.h> now.
276 * Anti-aliased rendering is now the default for FT_Render_Glyph
David Turnerc06aba22000-06-30 23:38:23 +0000277 (i.e. corresponds to render_mode == 0 == ft_render_mode_normal).
278 To generate a monochrome bitmap, use ft_render_mode_mono, or the
Werner Lembergab6d1072001-04-02 21:30:06 +0000279 FT_LOAD_MONOCHROME flag in FT_Load_Glyph/FT_Load_Char.
David Turnerc06aba22000-06-30 23:38:23 +0000280 FT_LOAD_ANTI_ALIAS is still defined, but values to 0.
Werner Lembergab6d1072001-04-02 21:30:06 +0000281 * <freetype/freetype.h> now include <freetype/config/ftconfig.h>,
David Turnerc06aba22000-06-30 23:38:23 +0000282 solving a few headaches :-)
Werner Lembergab6d1072001-04-02 21:30:06 +0000283 * The type FT_GlyphSlotRec has now a "library" field.
David Turnerc06aba22000-06-30 23:38:23 +0000284
285 - CHANGES TO THE "ftglyph.h" API
Werner Lemberge4b32a52000-10-31 20:42:18 +0000286
Werner Lembergab6d1072001-04-02 21:30:06 +0000287 This API has been severely modified in order to make it simpler,
288 clearer, and more efficient. It certainly now looks like a real
289 "glyph factory" object, and allows client applications to manage
290 (i.e. transform, bbox and render) glyph images without ever
291 knowing their original format.
David Turnerc06aba22000-06-30 23:38:23 +0000292
Werner Lembergab6d1072001-04-02 21:30:06 +0000293 - Added support for CID-keyed fonts to the CFF driver. Maybe
294 support for pure CFF + CEF fonts should come in?
David Turner9d636b62000-06-27 23:32:27 +0000295
Werner Lembergab6d1072001-04-02 21:30:06 +0000296 - Cleaned up source code in order to avoid two functions with the
297 same name. Also changed the names of the files in "type1z" from
David Turner9d636b62000-06-27 23:32:27 +0000298 "t1XXXX" to "z1XXXX" in order to avoid any conflicts.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000299
David Turner9d636b62000-06-27 23:32:27 +0000300 "make multi" now works well :-)
Werner Lemberge4b32a52000-10-31 20:42:18 +0000301
David Turner81bb4ad2000-06-28 04:19:49 +0000302 Also removed the use of "cidafm" for now, even if the source files
Werner Lembergab6d1072001-04-02 21:30:06 +0000303 are still there. This functionality will certainly go into a
304 specific module.
David Turnerc06aba22000-06-30 23:38:23 +0000305
Werner Lemberge4b32a52000-10-31 20:42:18 +0000306 - ADDED SUPPORT FOR THE AUTO-HINTER
307
Werner Lembergab6d1072001-04-02 21:30:06 +0000308 It works :-) I have a demo program which simply is a copy of
309 "ftview" that does a `FT_Add_Module(library,
310 &autohinter_module_class)' after library initialization, and Type
311 1 & OpenType/CFF fonts are now hinted.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000312
Werner Lembergab6d1072001-04-02 21:30:06 +0000313 CID fonts are not hinted, as they include no charmap and the
314 auto-hinter doesn't include "generic" global metrics computations
315 yet.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000316
Werner Lembergab6d1072001-04-02 21:30:06 +0000317 Now, I need to release this thing to the FreeType 2 source.
David Turner9d636b62000-06-27 23:32:27 +0000318
319 - CHANGES TO THE RENDERER MODULES
Werner Lemberge4b32a52000-10-31 20:42:18 +0000320
Werner Lembergab6d1072001-04-02 21:30:06 +0000321 The monochrome and smooth renderers are now in two distinct
322 directories, namely "src/raster1" and "src/smooth". Note that the
323 old "src/renderer" is now gone.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000324
Werner Lembergab6d1072001-04-02 21:30:06 +0000325 I ditched the 5-gray-levels renderers. Basically, it involved a
326 simple #define toggle in 'src/raster1/ftraster.c'.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000327
Werner Lembergab6d1072001-04-02 21:30:06 +0000328 FT_Render_Glyph, FT_Outline_Render & FT_Outline_Get_Bitmap now
329 select the best renderer available, depending on render mode. If
330 the current renderer for a given glyph image format isn't capable
331 of supporting the render mode, another one will be found in the
332 library's list. This means that client applications do not need
333 to switch or set the renderers themselves (as in the latest
334 change), they'll get what they want automatically. At last.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000335
Werner Lembergab6d1072001-04-02 21:30:06 +0000336 Changed the demo programs accordingly.
David Turner9d636b62000-06-27 23:32:27 +0000337
David Turnerf0df85b2000-06-22 00:17:42 +0000338 - MAJOR INTERNAL REDESIGN:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000339
Werner Lembergab6d1072001-04-02 21:30:06 +0000340 A lot of internal modifications have been performed lately on the
David Turnerf0df85b2000-06-22 00:17:42 +0000341 source in order to provide the following enhancements:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000342
Werner Lembergab6d1072001-04-02 21:30:06 +0000343 * More generic module support:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000344
Werner Lembergab6d1072001-04-02 21:30:06 +0000345 The FT_Module type is now defined to represent a handle to a
346 given module. The file <freetype/ftmodule.h> contains the
347 FT_Module_Class definition, as well as the module-loading public
348 API.
David Turnerf0df85b2000-06-22 00:17:42 +0000349
Werner Lembergab6d1072001-04-02 21:30:06 +0000350 The FT_Driver type is still defined, and still represents a
351 pointer to a font driver. Note that FT_Add_Driver is replaced
352 by FT_Add_Module, FT_Get_Driver by FT_Get_Module, etc.
353
354 * Support for generic glyph image types:
355
356 The FT_Renderer type is a pointer to a module used to perform
357 various operations on glyph image.
358
359 Each renderer is capable of handling images in a single format
360 (e.g. ft_glyph_format_outline). Its functions are used to:
361
362 - transform an glyph image
363 - render a glyph image into a bitmap
364 - return the control box (dimensions) of a given glyph image
365
366 The scan converters "ftraster.c" and "ftgrays.c" have been moved
367 to the new directory "src/renderer", and are used to provide two
368 default renderer modules.
369
370 One corresponds to the "standard" scan-converter, the other to
371 the "smooth" one.
372
373 he current renderer can be set through the new function
374 FT_Set_Renderer.
375
376 The old raster-related function FT_Set_Raster, FT_Get_Raster and
377 FT_Set_Raster_Mode have now disappeared, in favor of the new:
378
379 FT_Get_Renderer
380 FT_Set_Renderer
381
382 See the file <freetype/ftrender.h> for more details.
383
384 These changes were necessary to properly support different
385 scalable formats in the future, like bi-color glyphs, etc.
386
387 * Glyph loader object:
388
389 A new internal object, called a 'glyph loader' has been
390 introduced in the base layer. It is used by all scalable format
391 font drivers to load glyphs and composites.
392
393 This object has been created to reduce the code size of each
394 driver, as each one of them basically re-implemented its
395 functionality.
396
397 See <freetype/internal/ftobjs.h> and the FT_GlyphLoader type for
398 more information.
399
400 * FT_GlyphSlot has new fields:
401
402 In order to support extended features (see below), the
403 FT_GlyphSlot structure has a few new fields:
404
405 linearHoriAdvance:
406
407 This field gives the linearly scaled (i.e. scaled but
408 unhinted) advance width for the glyph, expressed as a 16.16
409 fixed pixel value. This is useful to perform WYSIWYG text.
410
411 linearVertAdvance:
412 This field gives the linearly scaled advance height for the
413 glyph (relevant in vertical glyph layouts only). This is
414 useful to perform WYSIWYG text.
415
416 Note that the two above field replace the removed "metrics2"
417 field in the glyph slot.
418
419 advance:
420 This field is a vector that gives the transformed advance for
421 the glyph. By default, it corresponds to the advance width,
422 unless FT_LOAD_VERTICAL_LAYOUT was specified when calling
423 FT_Load_Glyph or FT_Load_Char.
424
425 bitmap_left:
426 This field gives the distance in integer pixels from the
427 current pen position to the left-most pixel of a glyph image
428 IF IT IS A BITMAP. It is only valid when the "format" field
429 is set to "ft_glyph_format_bitmap", for example, after calling
430 the new function FT_Render_Glyph.
431
432 bitmap_top:
433 This field gives the distance in integer pixels from the
434 current pen position (located on the baseline) to the top-most
435 pixel of the glyph image IF IT IS A BITMAP. Positive values
436 correspond to upwards Y.
437
438 loader:
439 This is a new private field for the glyph slot. Client
440 applications should not touch it.
David Turnerf0df85b2000-06-22 00:17:42 +0000441
442
Werner Lembergab6d1072001-04-02 21:30:06 +0000443 * Support for transforms and direct rendering in FT_Load_Glyph:
David Turnerf0df85b2000-06-22 00:17:42 +0000444
Werner Lembergab6d1072001-04-02 21:30:06 +0000445 Most of the functionality found in <freetype/ftglyph.h> has been
446 moved to the core library. Hence, the following:
Werner Lemberge4b32a52000-10-31 20:42:18 +0000447
Werner Lembergab6d1072001-04-02 21:30:06 +0000448 - A transform can be specified for a face through
449 FT_Set_Transform. this transform is applied by FT_Load_Glyph
450 to scalable glyph images (i.e. NOT TO BITMAPS) before the
451 function returns, unless the bit flag FT_LOAD_IGNORE_TRANSFORM
452 was set in the load flags.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000453
Werner Lembergab6d1072001-04-02 21:30:06 +0000454 - Once a glyph image has been loaded, it can be directly
455 converted to a bitmap by using the new FT_Render_Glyph
456 function. Note that this function takes the glyph image from
457 the glyph slot, and converts it to a bitmap whose properties
458 are returned in "face.glyph.bitmap", "face.glyph.bitmap_left"
459 and "face.glyph.bitmap_top". The original native image might
460 be lost after the conversion.
461
462 - When using the new bit flag FT_LOAD_RENDER, the FT_Load_Glyph
463 and FT_Load_Char functions will call FT_Render_Glyph
464 automatically when needed.
465
466 - Reformatted all modules source code in order to get rid of the
467 basic data types redifinitions (i.e. "TT_Int" instead of "FT_Int",
468 "T1_Fixed" instead of "FT_Fixed"). Hence the format-specific
469 prefixes like "TT_", "T1_", "T2_" and "CID_" are only used for
470 relevant structures.
David Turnerf0df85b2000-06-22 00:17:42 +0000471
472
Werner Lembergab6d1072001-04-02 21:30:06 +0000473======================================================================
Werner Lemberge4b32a52000-10-31 20:42:18 +0000474
David Turnerf9b8dec2000-06-16 19:34:52 +0000475OLD CHANGES FOR BETA 7
David Turner3475e7f2000-05-17 20:56:01 +0000476
Werner Lembergab6d1072001-04-02 21:30:06 +0000477 - bug-fixed the OpenType/CFF parser. It now loads and displays my
478 two fonts nicely, but I'm pretty certain that more testing is
479 needed :-)
Werner Lemberge4b32a52000-10-31 20:42:18 +0000480
David Turner2b9be992000-06-07 23:41:17 +0000481 - fixed the crummy Type 1 hinter, it now handles accented characters
Werner Lembergab6d1072001-04-02 21:30:06 +0000482 correctly (well, the accent is not always well placed, but that's
David Turner2b9be992000-06-07 23:41:17 +0000483 another problem..)
484
Werner Lembergab6d1072001-04-02 21:30:06 +0000485 - added the CID-keyed Type 1 driver in "src/cid". Works pretty well
486 for only 13 Kb of code ;-) Doesn't read AFM files though, nor the
487 really useful CMAP files..
David Turner04aa8002000-06-01 03:27:48 +0000488
Werner Lembergab6d1072001-04-02 21:30:06 +0000489 - fixed two bugs in the smooth renderer (src/base/ftgrays.c). Thanks
490 to Boris Letocha for spotting them and providing a fix..
David Turner04aa8002000-06-01 03:27:48 +0000491
David Turner4f99c3c2000-05-29 20:55:13 +0000492 - fixed potential "divide by zero" bugs in ftcalc.c.. my god..
493
Werner Lembergab6d1072001-04-02 21:30:06 +0000494 - added source code for the OpenType/CFF driver (still incomplete
495 though..)
David Turner4f99c3c2000-05-29 20:55:13 +0000496
Werner Lembergab6d1072001-04-02 21:30:06 +0000497 - modified the SFNT driver slightly to perform more robust header
498 checks in TT_Load_SFNT_Header. This prevents certain font files
499 (e.g. some Type 1 Multiple Masters) from being incorrectly
500 "recognized" as TrueType font files..
David Turner4f99c3c2000-05-29 20:55:13 +0000501
Werner Lembergab6d1072001-04-02 21:30:06 +0000502 - moved a lot of stuff from the TrueType driver to the SFNT module,
503 this allows greater code re-use between font drivers
504 (e.g. TrueType, OpenType, Compact-TrueType, etc..)
David Turner2e421312000-05-26 22:13:17 +0000505
506 - added a tiny segment cache to the SFNT Charmap 4 decoder, in order
507 to minimally speed it up..
508
David Turner11187202000-05-26 17:13:23 +0000509 - added support for Multiple Master fonts in "type1z". There is also
Werner Lembergab6d1072001-04-02 21:30:06 +0000510 a new file named <freetype/ftmm.h> which defines functions to
David Turner11187202000-05-26 17:13:23 +0000511 manage them from client applications.
Werner Lemberge4b32a52000-10-31 20:42:18 +0000512
David Turner11187202000-05-26 17:13:23 +0000513 The new file "src/base/ftmm.c" is also optional to the engine..
514
Werner Lembergab6d1072001-04-02 21:30:06 +0000515 - various formatting changes (e.g. EXPORT_DEF -> FT_EXPORT_DEF) +
David Turner11187202000-05-26 17:13:23 +0000516 small bug fixes in FT_Load_Glyph, the "type1" driver, etc..
517
David Turnerf5dcdd52000-05-23 22:16:27 +0000518 - a minor fix to the Type 1 driver to let them apply the font matrix
519 correctly (used for many oblique fonts..)
520
David Turner51179f02000-05-18 16:18:05 +0000521 - some fixes for 64-bit systems (mainly changing some FT_TRACE calls
522 to use %p instead of %lx).. Thanks to Karl Robillard
523
Werner Lembergab6d1072001-04-02 21:30:06 +0000524 - fixed some bugs in the sbit loader (src/base/sfnt/ttsbit.c) +
525 added a new flag, FT_LOAD_CROP_BITMAP to query that bitmaps be
526 cropped when loaded from a file (maybe I should move the bitmap
527 cropper to the base layer ??).
David Turner109fcf62000-05-17 23:35:37 +0000528
Werner Lembergab6d1072001-04-02 21:30:06 +0000529 - changed the default number of gray levels of the smooth renderer
530 to 256 (instead of the previous 128). Of course, the human eye
531 can't see any difference ;-)
David Turner3475e7f2000-05-17 20:56:01 +0000532
Werner Lembergab6d1072001-04-02 21:30:06 +0000533 - removed TT_MAX_SUBGLYPHS, there is no static limit on the number
534 of subglyphs in a TrueType font now..
David Turner3475e7f2000-05-17 20:56:01 +0000535
Werner Lembergab6d1072001-04-02 21:30:06 +0000536
537======================================================================
538
David Turner3475e7f2000-05-17 20:56:01 +0000539OLD CHANGES 16 May 2000
David Turnerefce08d2000-05-11 18:23:52 +0000540
Werner Lembergab6d1072001-04-02 21:30:06 +0000541 - tagged "BETA-6" in the CVS tree. This one is a serious release
542 candidate even though it doesn't incorporate the auto-hinter yet..
David Turner968f0c32000-05-16 23:26:01 +0000543
544 - various obsolete files were removed, and copyright header updated
545
Werner Lembergab6d1072001-04-02 21:30:06 +0000546 - finally updated the standard raster to fix the monochrome
547 rendering bug + re-enable support for 5-gray levels anti-aliasing
548 (suck, suck..)
David Turner968f0c32000-05-16 23:26:01 +0000549
550 - created new header files, and modified sources accordingly:
David Turnere49ab252000-05-16 23:44:38 +0000551
Werner Lembergab6d1072001-04-02 21:30:06 +0000552 <freetype/fttypes.h>
553 - simple FreeType types, without the API
554 <freetype/internal/ftmemory.h>
555 - definition of memory-management macros
David Turner968f0c32000-05-16 23:26:01 +0000556
Werner Lembergab6d1072001-04-02 21:30:06 +0000557 - added the "DSIG" (OpenType Digital Signature) tag to
558 <freetype/tttags.h>
David Turner968f0c32000-05-16 23:26:01 +0000559
Werner Lembergab6d1072001-04-02 21:30:06 +0000560 - light update/cleaning of the build system + changes to the sources
561 in order to get rid of _all_ compiler warnings with three
562 compilers, i.e:
David Turnerc30aea92000-05-12 15:01:18 +0000563
Werner Lembergab6d1072001-04-02 21:30:06 +0000564 gcc with "-ansi -pedantic -Wall -W", Visual C++ with "/W3 /WX" and
565 LCC
David Turnerc30aea92000-05-12 15:01:18 +0000566
Werner Lembergab6d1072001-04-02 21:30:06 +0000567 IMPORTANT NOTE FOR WIN32-LCC USERS:
568 |
569 | It seems the C pre-processor that comes with LCC is broken, it
570 | doesn't recognize the ANSI standard directives # and ##
571 | correctly when one of the argument is a macro. Also, something
572 | like:
573 |
574 | #define F(x) print##x
575 |
576 | F(("hello"))
577 |
578 | will get incorrectly translated to:
579 |
580 | print "hello")
581 |
582 | by its pre-processor. For this reason, you simply cannot build
583 | FreeType 2 in debug mode with this compiler..
David Turnerc30aea92000-05-12 15:01:18 +0000584
David Turnerbfe2f982000-05-12 12:17:15 +0000585 - yet another massive grunt work. I've changed the definition of the
Werner Lembergab6d1072001-04-02 21:30:06 +0000586 EXPORT_DEF, EXPORT_FUNC, BASE_DEF & BASE_FUNC macros. These now
587 take an argument, which is the function's return value type.
David Turnere49ab252000-05-16 23:44:38 +0000588
Werner Lembergab6d1072001-04-02 21:30:06 +0000589 This is necessary to compile FreeType as a DLL on Windows and
590 OS/2. Depending on the compiler used, a compiler-specific keyword
591 like __export or __system must be placed before (VisualC++) or
592 after (BorlandC++) the type..
David Turnere49ab252000-05-16 23:44:38 +0000593
David Turnerbfe2f982000-05-12 12:17:15 +0000594 Of course, this needed a lot of changes throughout the source code
595 to make it compile again... All cleaned up now, apparently..
596
Werner Lembergab6d1072001-04-02 21:30:06 +0000597 Note also that there is a new EXPORT_VAR macro defined to allow
598 the _declaration_ of an exportable public (constant)
599 variable. This is the case of the raster interfaces (see
600 ftraster.h and ftgrays.h), as well as each module's interface (see
601 sfdriver.h, psdriver.h, etc..)
David Turnerbfe2f982000-05-12 12:17:15 +0000602
Werner Lembergab6d1072001-04-02 21:30:06 +0000603 - new feature: it is now possible to pass extra parameters to font
604 drivers when creating a new face object. For now,
605 this capability is unused. It could however prove to
606 be useful in a near future..
David Turnerbfe2f982000-05-12 12:17:15 +0000607
Werner Lembergab6d1072001-04-02 21:30:06 +0000608 the FT_Open_Args structure was changes, as well as the internal
609 driver interface (the specific "init_face" module function has
610 now a different signature).
David Turnerbfe2f982000-05-12 12:17:15 +0000611
612 - updated the tutorial (not finished though).
Werner Lembergab6d1072001-04-02 21:30:06 +0000613
David Turnerc30aea92000-05-12 15:01:18 +0000614 - updated the top-level BUILD document
David Turnerbfe2f982000-05-12 12:17:15 +0000615
Werner Lembergab6d1072001-04-02 21:30:06 +0000616 - fixed a potential memory leak that could occur when loading
617 embedded bitmaps.
David Turnerc60c61c2000-05-12 15:26:58 +0000618
Werner Lembergab6d1072001-04-02 21:30:06 +0000619 - added the declaration of FT_New_Memory_Face in
620 <freetype/freetype.h>, as it was missing from the public header
621 (the implementation was already in "ftobjs.c").
David Turnerbfe2f982000-05-12 12:17:15 +0000622
Werner Lembergab6d1072001-04-02 21:30:06 +0000623 - the file <freetype/fterrors.h> has been seriously updated in order
624 to allow the automatic generation of error message tables. See the
625 comments within it for more information.
David Turnerbfe2f982000-05-12 12:17:15 +0000626
Werner Lembergab6d1072001-04-02 21:30:06 +0000627 - major directory hierarchy re-organisation. This was done for two
628 things:
David Turnere49ab252000-05-16 23:44:38 +0000629
Werner Lembergab6d1072001-04-02 21:30:06 +0000630 * first, to ease the "manual" compilation of the library by
631 requiring at lot less include paths :-)
David Turnerbfe2f982000-05-12 12:17:15 +0000632
Werner Lembergab6d1072001-04-02 21:30:06 +0000633 * second, to allow external programs to effectively access
634 internal data fields. For example, this can be extremely
635 useful if someone wants to write a font producer or a font
636 manager on top of FreeType.
David Turnera9c251c2000-05-11 18:36:19 +0000637
Werner Lembergab6d1072001-04-02 21:30:06 +0000638 Basically, you should now use the 'freetype/' prefix for header
639 inclusion, as in:
David Turnere49ab252000-05-16 23:44:38 +0000640
David Turnera9c251c2000-05-11 18:36:19 +0000641 #include <freetype/freetype.h>
642 #include <freetype/ftglyph.h>
643
644 Some new include sub-directories are available:
David Turnere49ab252000-05-16 23:44:38 +0000645
Werner Lembergab6d1072001-04-02 21:30:06 +0000646 a. the "freetype/config" directory, contains two files used to
David Turnera9c251c2000-05-11 18:36:19 +0000647 configure the build of the library. Client applications should
648 not need to look at these normally, but they can if they want.
David Turnere49ab252000-05-16 23:44:38 +0000649
David Turnera9c251c2000-05-11 18:36:19 +0000650 #include <freetype/config/ftoption.h>
651 #include <freetype/config/ftconfig.h>
David Turnere49ab252000-05-16 23:44:38 +0000652
Werner Lembergab6d1072001-04-02 21:30:06 +0000653 b. the "freetype/internal" directory, contains header files that
654 describes library internals. These are the header files that
655 were previously found in the "src/base" and "src/shared"
656 directories.
David Turnera9c251c2000-05-11 18:36:19 +0000657
658
Werner Lembergab6d1072001-04-02 21:30:06 +0000659 As usual, the build system and the demos have been updated to
660 reflect the change..
David Turnere49ab252000-05-16 23:44:38 +0000661
David Turnera9c251c2000-05-11 18:36:19 +0000662 Here's a layout of the new directory hierarchy:
David Turnere49ab252000-05-16 23:44:38 +0000663
David Turnera9c251c2000-05-11 18:36:19 +0000664 TOP
665 include/
666 freetype/
667 freetype.h
668 ...
669 config/
670 ftoption.h
671 ftconfig.h
672 ftmodule.h
David Turnere49ab252000-05-16 23:44:38 +0000673
David Turnera9c251c2000-05-11 18:36:19 +0000674 internal/
675 ftobjs.h
676 ftstream.h
677 ftcalc.h
678 ...
David Turnere49ab252000-05-16 23:44:38 +0000679
David Turnera9c251c2000-05-11 18:36:19 +0000680 src/
681 base/
682 ...
David Turnere49ab252000-05-16 23:44:38 +0000683
David Turnera9c251c2000-05-11 18:36:19 +0000684 sfnt/
685 psnames/
686 truetype/
687 type1/
688 type1z/
689
690
Werner Lembergab6d1072001-04-02 21:30:06 +0000691 Compiling a module is now much easier, for example, the following
692 should work when in the TOP directory on an ANSI build:
David Turnere49ab252000-05-16 23:44:38 +0000693
David Turnera9c251c2000-05-11 18:36:19 +0000694 gcc -c -I./include -I./src/base src/base/ftbase.c
695 gcc -c -I./include -I./src/sfnt src/sfnt/sfnt.c
696 etc..
697
698 (of course, using -Iconfig/<system> if you provide system-specific
699 configuration files).
David Turnerefce08d2000-05-11 18:23:52 +0000700
Werner Lembergab6d1072001-04-02 21:30:06 +0000701 - updated the structure of FT_Outline_Funcs in order to allow direct
702 coordinate scaling within the outline decomposition routine (this
703 is important for virtual "on" points with TrueType outlines) +
704 updates to the rasters to support this..
David Turnerefce08d2000-05-11 18:23:52 +0000705
Werner Lembergab6d1072001-04-02 21:30:06 +0000706 - updated the OS/2 table loading code in "src/sfnt/ttload.c" in
707 order to support version 2 of the table (see OpenType 1.2 spec)
David Turnerefce08d2000-05-11 18:23:52 +0000708
Werner Lembergab6d1072001-04-02 21:30:06 +0000709 - created "include/tttables.h" and "include/t1tables.h" to allow
710 client applications to access some of the SFNT and T1 tables of a
711 face with a procedural interface (see FT_Get_Sfnt_Table()) +
712 updates to internal source files to reflect the change..
David Turnerefce08d2000-05-11 18:23:52 +0000713
Werner Lembergab6d1072001-04-02 21:30:06 +0000714 - some cleanups in the source code to get rid of warnings when
715 compiling with the "-Wall -W -ansi -pedantic" options in gcc.
David Turnerefce08d2000-05-11 18:23:52 +0000716
717 - debugged and moved the smooth renderer to "src/base/ftgrays.c" and
718 its header to "include/ftgrays.h"
719
Werner Lembergab6d1072001-04-02 21:30:06 +0000720 - updated TT_MAX_SUBGLYPHS to 96 as some CJK fonts have composites
721 with up to 80 sub-glyphs !! Thanks to Werner
David Turnerefce08d2000-05-11 18:23:52 +0000722
Werner Lembergab6d1072001-04-02 21:30:06 +0000723
724======================================================================
725
David Turnerefce08d2000-05-11 18:23:52 +0000726OLD CHANGES - 14-apr-2000
David Turner77054f22000-04-14 20:49:52 +0000727
Werner Lembergab6d1072001-04-02 21:30:06 +0000728 - fixed a bug in the TrueType glyph loader that prevented the
729 correct loading of some CJK glyphs in mingli.ttf
David Turnere49ab252000-05-16 23:44:38 +0000730
David Turner77054f22000-04-14 20:49:52 +0000731 - improved the standard Type 1 hinter in "src/type1"
David Turnere49ab252000-05-16 23:44:38 +0000732
Werner Lembergab6d1072001-04-02 21:30:06 +0000733 - fixed two bugs in the experimental Type 1 driver in "src/type1z"
David Turner77054f22000-04-14 20:49:52 +0000734 to handle the new XFree86 4.0 fonts (and a few other ones..)
735
Werner Lembergab6d1072001-04-02 21:30:06 +0000736 - the smooth renderer is now complete and supports sub-banding to
737 render large glyphs at high speed. However, it is still located in
738 "demos/src/ftgrays.c" and should move to the library itself in the
739 next beta.. NOTE: The smooth renderer doesn't compile in
David Turner77054f22000-04-14 20:49:52 +0000740 stand-alone mode anymore, but this should be fixed RSN..
David Turnere49ab252000-05-16 23:44:38 +0000741
Werner Lembergab6d1072001-04-02 21:30:06 +0000742 - introduced convenience functions to more easily deal with glyph
743 images, see "include/ftglyph.h" for more details, as well as the
744 new demo program named "demos/src/ftstring.c" that demonstrates
David Turner77054f22000-04-14 20:49:52 +0000745 its use
746
Werner Lembergab6d1072001-04-02 21:30:06 +0000747 - implemented FT_LOAD_NO_RECURSE in both the TrueType and Type 1
748 drivers (this is required by the auto-hinter to improve its
749 results).
David Turner77054f22000-04-14 20:49:52 +0000750
Werner Lembergab6d1072001-04-02 21:30:06 +0000751 - changed the raster interface, in order to allow client
752 applications to provide their own span-drawing callbacks. However,
753 only the smooth renderer supports this. See "FT_Raster_Params" in
754 the file "include/ftimage.h"
David Turner77054f22000-04-14 20:49:52 +0000755
Werner Lembergab6d1072001-04-02 21:30:06 +0000756 - fixed a small bug in FT_MulFix that caused incorrect transform
757 computation!
David Turner77054f22000-04-14 20:49:52 +0000758
759 - Note: The tutorial is out-of-date, grumpf.. :-(
760
Werner Lembergab6d1072001-04-02 21:30:06 +0000761
762======================================================================
763
David Turner77054f22000-04-14 20:49:52 +0000764OLD CHANGES - 12-mar-2000
David Turnerc3c7e7f2000-03-13 14:19:31 +0000765
Werner Lembergab6d1072001-04-02 21:30:06 +0000766 - changed the layout of configuration files : now, all ANSI
767 configuration files are located in
768 "freetype2/config". System-specific over-rides can be placed in
769 "freetype2/config/<system>".
David Turnere49ab252000-05-16 23:44:38 +0000770
David Turnerc3c7e7f2000-03-13 14:19:31 +0000771 - moved all configuration macros to "config/ftoption.h"
David Turnere49ab252000-05-16 23:44:38 +0000772
David Turnerc3c7e7f2000-03-13 14:19:31 +0000773 - improvements in the Type 1 driver with AFM support
David Turnere49ab252000-05-16 23:44:38 +0000774
Werner Lembergab6d1072001-04-02 21:30:06 +0000775 - changed the fields in the FT_Outline structure : the old "flags"
David Turnerc3c7e7f2000-03-13 14:19:31 +0000776 array is re-named "tags", while all ancient flags are encoded into
777 a single unsigned int named "flags".
778
Werner Lembergab6d1072001-04-02 21:30:06 +0000779 - introduced new flags in FT_Outline.flags (see
780 ft_outline_.... enums in "ftimage.h").
David Turnerc3c7e7f2000-03-13 14:19:31 +0000781
782 - changed outline functions to "FT_Outline_<action>" syntax
783
784 - added a smooth anti-alias renderer to the demonstration programs
Werner Lembergab6d1072001-04-02 21:30:06 +0000785
David Turnerc3c7e7f2000-03-13 14:19:31 +0000786 - added Mac graphics driver (thanks Just)
David Turnere49ab252000-05-16 23:44:38 +0000787
Werner Lembergab6d1072001-04-02 21:30:06 +0000788 - FT_Open_Face changed in order to received a pointer to a
789 FT_Open_Args descriptor..
David Turnere49ab252000-05-16 23:44:38 +0000790
Werner Lembergab6d1072001-04-02 21:30:06 +0000791 - various cleanups, a few more API functions implemented (see
792 FT_Attach_File)
David Turnerc3c7e7f2000-03-13 14:19:31 +0000793
794 - updated some docs
795
Werner Lembergab6d1072001-04-02 21:30:06 +0000796
797======================================================================
798
David Turnerc3c7e7f2000-03-13 14:19:31 +0000799OLD CHANGES - 22-feb-2000
David Turner58c10b52000-02-22 14:31:42 +0000800
801 - introduced the "psnames" module. It is used to:
802
Werner Lembergab6d1072001-04-02 21:30:06 +0000803 o convert a Postscript glyph name into the equivalent Unicode
804 character code (used by the Type 1 driver(s) to synthetize on
805 the fly a Unicode charmap).
David Turner58c10b52000-02-22 14:31:42 +0000806
Werner Lembergab6d1072001-04-02 21:30:06 +0000807 o provide an interface to retrieve the Postscript names of the
808 Macintosh, Adobe Standard & Adobe Expert character codes.
809 (the Macintosh names are used by the SFNT-module postscript
810 names support routines, while the other two tables are used by
811 the Type 1 driver(s)).
David Turner58c10b52000-02-22 14:31:42 +0000812
Werner Lembergab6d1072001-04-02 21:30:06 +0000813 - introduced the "type1z" alternate Type 1 driver. This is a (still
814 experimental) driver for the Type 1 format that will ultimately
815 replace the one in "src/type1". It uses pattern matching to load
816 data from the font, instead of a finite state analyzer. It works
817 much better than the "old" driver with "broken" fonts. It is also
David Turner58c10b52000-02-22 14:31:42 +0000818 much smaller (under 15 Kb).
819
Werner Lembergab6d1072001-04-02 21:30:06 +0000820 - the Type 1 drivers (both in "src/type1" and "src/type1z") are
821 nearly complete. They both provide automatic Unicode charmap
822 synthesis through the "psnames" module. No re-encoding vector is
823 needed. (note that they still leak memory due to some code
David Turner58c10b52000-02-22 14:31:42 +0000824 missing, and I'm getting lazy).
825
Werner Lembergab6d1072001-04-02 21:30:06 +0000826 Trivial AFM support has been added to read kerning information but
827 wasn't exactly tested as it should ;-)
David Turner58c10b52000-02-22 14:31:42 +0000828
Werner Lembergab6d1072001-04-02 21:30:06 +0000829 - The TrueType glyph loader has been seriously rewritten (see the
830 file "src/truetype/ttgload.c". It is now much, much simpler as
831 well as easier to read, maintain and understand :-) Preliminary
832 versions introduced a memory leak that has been reported by Jack
David Turner58c10b52000-02-22 14:31:42 +0000833 Davis, and is now fixed..
834
Werner Lembergab6d1072001-04-02 21:30:06 +0000835 - introduced the new "ft_glyph_format_plotter", used to represent
836 stroked outlines like Windows "Vector" fonts, and certain Type 1
837 fonts like "Hershey". The corresponding raster will be written
David Turner58c10b52000-02-22 14:31:42 +0000838 soon.
839
Werner Lembergab6d1072001-04-02 21:30:06 +0000840 - FT_New_Memory_Face is gone. Likewise, FT_Open_Face has a new
841 interface that uses a structure to describe the input stream, the
842 driver (if required), etc..
843
David Turner58c10b52000-02-22 14:31:42 +0000844
845TODO
Werner Lembergab6d1072001-04-02 21:30:06 +0000846
David Turner58c10b52000-02-22 14:31:42 +0000847 - Write FT_Get_Glyph_Bitmap and FT_Load_Glyph_Bitmap
848
Werner Lembergab6d1072001-04-02 21:30:06 +0000849 - Add a function like FT_Load_Character( face, char_code, load_flags
850 ) that would really embbed a call to FT_Get_Char_Index then
851 FT_Load_Glyph to ease developer's work.
David Turner58c10b52000-02-22 14:31:42 +0000852
Werner Lembergab6d1072001-04-02 21:30:06 +0000853 - Update the tutorial!
854
855 - consider adding support for Multiple Master fonts in the Type 1
David Turner58c10b52000-02-22 14:31:42 +0000856 drivers.
857
Werner Lembergab6d1072001-04-02 21:30:06 +0000858 - Test the AFM routines of the Type 1 drivers to check that kerning
David Turner58c10b52000-02-22 14:31:42 +0000859 information is returned correctly.
860
Werner Lembergab6d1072001-04-02 21:30:06 +0000861 - write a decent auto-gridding component !! We need this to release
David Turner58c10b52000-02-22 14:31:42 +0000862 FreeType 2.0 gold !
863
864
Werner Lembergab6d1072001-04-02 21:30:06 +0000865less urgent needs:
866
David Turner58c10b52000-02-22 14:31:42 +0000867 - add a CFF/Type2 driver
868 - add a BDF driver
869 - add a FNT/PCF/HBF driver
870 - add a Speedo driver from the X11 sources
871
872
Werner Lembergab6d1072001-04-02 21:30:06 +0000873======================================================================
874
David Turner58c10b52000-02-22 14:31:42 +0000875OLDER CHANGES - 27-jan-2000
David Turner633da992000-01-27 14:07:33 +0000876
Werner Lembergab6d1072001-04-02 21:30:06 +0000877 - updated the "sfnt" module interface to allow several SFNT-based
David Turner633da992000-01-27 14:07:33 +0000878 drivers to co-exist peacefully
David Turnere49ab252000-05-16 23:44:38 +0000879
Werner Lembergab6d1072001-04-02 21:30:06 +0000880 - updated the "T1_Face" type to better separate Postscript font
881 content from the rest of the FT_Face structure. Might be used
882 later by the CFF/Type2 driver..
David Turnere49ab252000-05-16 23:44:38 +0000883
David Turner633da992000-01-27 14:07:33 +0000884 - added an experimental replacement Type 1 driver featuring advanced
885 (and speedy) pattern matching to retrieve the data from postscript
886 fonts.
887
Werner Lembergab6d1072001-04-02 21:30:06 +0000888 - very minor changes in the implementation of FT_Set_Char_Size and
889 FT_Set_Pixel_Sizes (they now implement default to ligthen the font
890 driver's code).
David Turner633da992000-01-27 14:07:33 +0000891
892
Werner Lembergab6d1072001-04-02 21:30:06 +0000893======================================================================
894
David Turner633da992000-01-27 14:07:33 +0000895OLD MESSAGE
896
Werner Lembergab6d1072001-04-02 21:30:06 +0000897This file summarizes the changes that occured since the last "beta" of
898FreeType 2. Because the list is important, it has been divided into
899separate sections:
David Turnerd2b1f351999-12-16 23:11:37 +0000900
David Turner5951ce91999-12-29 00:53:44 +0000901Table Of Contents:
902
903 I High-Level Interface (easier !)
904 II Directory Structure
905 III Glyph Image Formats
906 IV Build System
907 V Portability
908 VI Font Drivers
David Turnerd2b1f351999-12-16 23:11:37 +0000909
David Turnerd2b1f351999-12-16 23:11:37 +0000910
Werner Lembergab6d1072001-04-02 21:30:06 +0000911----------------------------------------------------------------------
David Turnerd2b1f351999-12-16 23:11:37 +0000912
Werner Lembergab6d1072001-04-02 21:30:06 +0000913High-Level Interface:
David Turnere49ab252000-05-16 23:44:38 +0000914
Werner Lembergab6d1072001-04-02 21:30:06 +0000915 The high-level API has been considerably simplified. Here is how:
David Turnere49ab252000-05-16 23:44:38 +0000916
Werner Lembergab6d1072001-04-02 21:30:06 +0000917 - resource objects have disappeared. this means that face objects
918 can now be created with a single function call (see FT_New_Face
919 and FT_Open_Face)
David Turnere49ab252000-05-16 23:44:38 +0000920
Werner Lembergab6d1072001-04-02 21:30:06 +0000921 - when calling either FT_New_Face & FT_Open_Face, a size object
922 and a glyph slot object are automatically created for the face,
923 and can be accessed through "face->glyph" and "face->size" if
924 one really needs to. In most cases, there's no need to call
925 FT_New_Size or FT_New_Glyph.
926
927 - similarly, FT_Load_Glyph now only takes a "face" argument
928 (instead of a glyph slot and a size). Also, it's "result"
929 parameter is gone, as the glyph image type is returned in the
930 field "face->glyph.format"
931
932 - the list of available charmaps is directly accessible through
933 "face->charmaps", counting "face->num_charmaps" elements. Each
934 charmap has an 'encoding' field which specifies which known
935 encoding it deals with. Valid values are, for example :
David Turnere49ab252000-05-16 23:44:38 +0000936
David Turnerd2b1f351999-12-16 23:11:37 +0000937 ft_encoding_unicode (for ASCII, Latin-1 and Unicode)
938 ft_encoding_apple_roman
939 ft_encoding_sjis
940 ft_encoding_adobe_standard
David Turner5951ce91999-12-29 00:53:44 +0000941 ft_encoding_adobe_expert
David Turnere49ab252000-05-16 23:44:38 +0000942
Werner Lembergab6d1072001-04-02 21:30:06 +0000943 other values may be added in the future. Each charmap still
944 holds its "platform_id" and "encoding_id" values in case the
945 encoding is too exotic for the current library
David Turnerd2b1f351999-12-16 23:11:37 +0000946
947
Werner Lembergab6d1072001-04-02 21:30:06 +0000948----------------------------------------------------------------------
949
David Turnerd2b1f351999-12-16 23:11:37 +0000950Directory Structure:
951
952 Should seem obvious to most of you:
953
954 freetype/
955 config/ -- configuration sub-makefiles
956 ansi/
David Turner5951ce91999-12-29 00:53:44 +0000957 unix/ -- platform-specific configuration files
David Turnerd2b1f351999-12-16 23:11:37 +0000958 win32/
959 os2/
960 msdos/
961
Werner Lembergab6d1072001-04-02 21:30:06 +0000962 include/ -- public header files, those to be included
963 directly by client apps
David Turnerd2b1f351999-12-16 23:11:37 +0000964
965 src/ -- sources of the library
966 base/ -- the base layer
Werner Lembergab6d1072001-04-02 21:30:06 +0000967 sfnt/ -- the sfnt "driver" (see the drivers section
968 below)
David Turnerd2b1f351999-12-16 23:11:37 +0000969 truetype/ -- the truetype driver
970 type1/ -- the type1 driver
971 shared/ -- some header files shared between drivers
972
973 demos/ -- demos/tools
974
975 docs/ -- documentation (a bit empty for now)
976
David Turnerd2b1f351999-12-16 23:11:37 +0000977
Werner Lembergab6d1072001-04-02 21:30:06 +0000978----------------------------------------------------------------------
David Turnerd2b1f351999-12-16 23:11:37 +0000979
Werner Lembergab6d1072001-04-02 21:30:06 +0000980Glyph Image Formats:
David Turnerd2b1f351999-12-16 23:11:37 +0000981
Werner Lembergab6d1072001-04-02 21:30:06 +0000982 Drivers are now able to register new glyph image formats within the
983 library. For now, the base layer supports of course bitmaps and
984 vector outlines, but one could imagine something different like
985 colored bitmaps, bi-color vectors or wathever else (Metafonts anyone
986 ??).
David Turnerd2b1f351999-12-16 23:11:37 +0000987
Werner Lembergab6d1072001-04-02 21:30:06 +0000988 See the file `include/ftimage.h'. Note also that the type
989 FT_Raster_Map is gone, and is now replaced by FT_Bitmap, which
990 should encompass all known bitmap types.
991
992 Each new image format must provide at least one "raster", i.e. a
993 module capable of transforming the glyph image into a bitmap. It's
994 also possible to change the default raster used for a given glyph
995 image format.
996
997 The default outline scan-converter now uses 128 levels of grays by
998 default, which tends to smooth many things. Note that the demo
999 programs have been updated significantly in order to display these..
David Turnerd2b1f351999-12-16 23:11:37 +00001000
1001
Werner Lembergab6d1072001-04-02 21:30:06 +00001002----------------------------------------------------------------------
David Turnerd2b1f351999-12-16 23:11:37 +00001003
Werner Lembergab6d1072001-04-02 21:30:06 +00001004Build system:
David Turnerd2b1f351999-12-16 23:11:37 +00001005
Werner Lembergab6d1072001-04-02 21:30:06 +00001006 You still need GNU Make to build the library. The build system has
1007 been very seriously re-vamped in order to provide things like :
1008
1009 - automatic host platform detection (reverting to 'config/ansi' if
1010 it is not detected, with pseudo-standard compilation flags)
David Turnerd2b1f351999-12-16 23:11:37 +00001011
1012 - the ability to compile from the Makefiles with very different and
Werner Lembergab6d1072001-04-02 21:30:06 +00001013 exotic compilers. Note that linking the library can be difficult
1014 for some platforms.
David Turnerd2b1f351999-12-16 23:11:37 +00001015
1016 For example, the file `config/win32/lcclib.bat' is invoked by the
1017 build system to create the ".lib" file with LCC-Win32 because its
Werner Lembergab6d1072001-04-02 21:30:06 +00001018 librarian has too many flaws to be invoked directly from the
1019 Makefile.
David Turnerd2b1f351999-12-16 23:11:37 +00001020
Werner Lembergab6d1072001-04-02 21:30:06 +00001021 Here's how it works:
David Turnerd2b1f351999-12-16 23:11:37 +00001022
Werner Lembergab6d1072001-04-02 21:30:06 +00001023 - the first time you type `make', the build system runs a series of
David Turnerd2b1f351999-12-16 23:11:37 +00001024 sub-makefiles in order to detect your host platform. It then dumps
Werner Lembergab6d1072001-04-02 21:30:06 +00001025 what it found, and creates a file called `config.mk' in the
1026 current directory. This is a sub-Makefile used to define many
1027 important Make variables used to build the library.
David Turnerd2b1f351999-12-16 23:11:37 +00001028
Werner Lembergab6d1072001-04-02 21:30:06 +00001029 - the second time, the build system detects the `config.mk' then use
1030 it to build the library. All object files go into 'obj' by
1031 default, as well as the library file, but this can easily be
1032 changed.
David Turnerd2b1f351999-12-16 23:11:37 +00001033
Werner Lembergab6d1072001-04-02 21:30:06 +00001034 Note that you can run "make setup" to force another host platform
1035 detection even if a `config.mk' is present in the current
1036 directory. Another solution is simply to delete the file, then
1037 re-run make.
David Turnerd2b1f351999-12-16 23:11:37 +00001038
Werner Lembergab6d1072001-04-02 21:30:06 +00001039 Finally, the default compiler for all platforms is gcc (for now,
1040 this will hopefully changed in the future). You can however specify
1041 a different compiler by specifying it after the 'setup' target as
1042 in:
David Turnerd2b1f351999-12-16 23:11:37 +00001043
1044 gnumake setup lcc on Win32 to use the LCC compiler
1045 gnumake setup visualc on Win32 to use Visual C++
1046
Werner Lembergab6d1072001-04-02 21:30:06 +00001047 See the file `config/<system>/detect.mk' for a list of supported
1048 compilers for your platforms.
David Turnerd2b1f351999-12-16 23:11:37 +00001049
Werner Lembergab6d1072001-04-02 21:30:06 +00001050 It should be relatively easy to write new detection rules files and
David Turnerd2b1f351999-12-16 23:11:37 +00001051 config.mk..
1052
Werner Lembergab6d1072001-04-02 21:30:06 +00001053 Finally, to build the demo programs, go to `demos' and launch GNU
1054 Make, it will use the `config.mk' in the top directory to build the
1055 test programs..
David Turnerd2b1f351999-12-16 23:11:37 +00001056
David Turnerd2b1f351999-12-16 23:11:37 +00001057
Werner Lembergab6d1072001-04-02 21:30:06 +00001058----------------------------------------------------------------------
David Turnerd2b1f351999-12-16 23:11:37 +00001059
Werner Lembergab6d1072001-04-02 21:30:06 +00001060Portability:
David Turnerd2b1f351999-12-16 23:11:37 +00001061
Werner Lembergab6d1072001-04-02 21:30:06 +00001062 In the previous beta, a single FT_System object was used to
1063 encompass all low-level operations like thread synchronisation,
1064 memory management and i/o access. This has been greatly simplified:
1065
1066 - thread synchronisation has been dropped, for the simple reason
1067 that the library is already re-entrant, and that if you really
1068 need two threads accessing the same FT_Library, you should
1069 really synchronize access to it yourself with a simple mutex.
1070
1071 - memory management is performed through a very simple object
1072 called "FT_Memory", which really is a table containing a table
1073 of pointers to functions like malloc, realloc and free as well
1074 as some user data (closure).
David Turnerd2b1f351999-12-16 23:11:37 +00001075
1076 - resources have disappeared (they created more problems than they
Werner Lembergab6d1072001-04-02 21:30:06 +00001077 solved), and i/o management have been simplified greatly as a
David Turnerd2b1f351999-12-16 23:11:37 +00001078 result. Streams are defined through FT_Stream objects, which can
1079 be either memory-based or disk-based.
1080
Werner Lembergab6d1072001-04-02 21:30:06 +00001081 Note that each face has its own stream, which is closed only
1082 when the face object is destroyed. Hence, a function like
1083 TT_Flush_Face in 1.x cannot be directly supported. However, if
1084 you really need something like this, you can easily tailor your
1085 own streams to achieve the same feature at a lower level (and
1086 use FT_Open_Face instead of FT_New_Face to create the face).
David Turnerd2b1f351999-12-16 23:11:37 +00001087
Werner Lembergab6d1072001-04-02 21:30:06 +00001088 See the file "include/ftsystem.h" for more details, as well as the
David Turnerd2b1f351999-12-16 23:11:37 +00001089 implementations found in "config/unix" and "config/ansi".
1090
1091
Werner Lembergab6d1072001-04-02 21:30:06 +00001092----------------------------------------------------------------------
David Turnere49ab252000-05-16 23:44:38 +00001093
Werner Lembergab6d1072001-04-02 21:30:06 +00001094Font Drivers:
David Turner5951ce91999-12-29 00:53:44 +00001095
Werner Lembergab6d1072001-04-02 21:30:06 +00001096 The Font Driver interface has been modified in order to support
David Turner5951ce91999-12-29 00:53:44 +00001097 extensions & versioning.
1098
1099
Werner Lembergab6d1072001-04-02 21:30:06 +00001100 The list of the font drivers that are statically linked to the
1101 library at compile time is managed through a new configuration file
David Turner5951ce91999-12-29 00:53:44 +00001102 called `config/<platform>/ftmodule.h'.
1103
1104 This file is autogenerated when invoking `make modules'. This target
Werner Lembergab6d1072001-04-02 21:30:06 +00001105 will parse all sub-directories of 'src', looking for a "module.mk"
David Turner5951ce91999-12-29 00:53:44 +00001106 rules file, used to describe the driver to the build system.
1107
Werner Lembergab6d1072001-04-02 21:30:06 +00001108 Hence, one should call `make modules' each time a font driver is
1109 added or removed from the `src' directory.
David Turner5951ce91999-12-29 00:53:44 +00001110
1111 Finally, this version provides a "pseudo-driver" in `src/sfnt'. This
Werner Lembergab6d1072001-04-02 21:30:06 +00001112 driver doesn't support font files directly, but provides services
1113 used by all TrueType-like font drivers. Hence, its code is shared
1114 between the TrueType & OpenType font formats, and possibly more
1115 formats to come if we're lucky..
David Turnerd2b1f351999-12-16 23:11:37 +00001116
Werner Lembergab6d1072001-04-02 21:30:06 +00001117
1118----------------------------------------------------------------------
1119
1120Extensions support:
David Turner5951ce91999-12-29 00:53:44 +00001121
1122 The extensions support is inspired by the one found in 1.x.
1123
Werner Lembergab6d1072001-04-02 21:30:06 +00001124 Now, each font driver has its own "extension registry", which lists
1125 which extensions are available for the font faces managed by the
1126 driver.
David Turner5951ce91999-12-29 00:53:44 +00001127
Werner Lembergab6d1072001-04-02 21:30:06 +00001128 Extension ids are now strings, rather than 4-byte tags, as this is
David Turner5951ce91999-12-29 00:53:44 +00001129 usually more readable..
1130
1131 Each extension has:
1132 - some data, associated to each face object
1133 - an interface (table of function pointers)
1134
Werner Lembergab6d1072001-04-02 21:30:06 +00001135 An extension that is format-specific should simply register itself
David Turner5951ce91999-12-29 00:53:44 +00001136 to the correct font driver. Here is some example code:
1137
1138 // Registering an extensions
1139 //
1140 FT_Error FT_Init_XXXX_Extension( FT_Library library )
1141 {
1142 FT_DriverInterface* tt_driver;
1143
1144 driver = FT_Get_Driver( library, "truetype" );
1145 if (!driver) return FT_Err_Unimplemented_Feature;
1146
David Turnere49ab252000-05-16 23:44:38 +00001147 return FT_Register_Extension( driver, &extension_class );
David Turner5951ce91999-12-29 00:53:44 +00001148 }
1149
David Turnere49ab252000-05-16 23:44:38 +00001150
David Turner5951ce91999-12-29 00:53:44 +00001151 // Implementing the extensions
1152 //
1153 FT_Error FT_Proceed_Extension_XXX( FT_Face face )
1154 {
1155 FT_XXX_Extension ext;
1156 FT_XXX_Extension_Interface ext_interface;
1157
1158 ext = FT_Get_Extension( face, "extensionid", &ext_interface );
1159 if (!ext) return error;
1160
1161 return ext_interface->do_it(ext);
1162 }
David Turnerd2b1f351999-12-16 23:11:37 +00001163
Werner Lembergab6d1072001-04-02 21:30:06 +00001164--- end of CHANGES ---