1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
|
Changes between FreeType version 1.3.1 and version 1.5
======================================================
**
** WARNING: Because of the Apple patents problem, the TrueType
** bytecode interpreter is now turned *OFF* by default. Edit
** ft_conf.h if you want to (and can) use grid-fitting.
**
Note: Version 1.4 has never been released officially.
Documentation
-------------
apiref.txt has been again revised.
apirefx.txt has been extended to document the GPOS interface.
TODO has been dropped (since we consider there will be no
further development).
API functions
-------------
TT_Char_Index() now uses TT_ULong for character codes. It now
supports cmap tables in format 8 and 12.
New error code (TT_Err_Too_Many_FDefs) when a font defines too
many functions.
Architectures
-------------
Support files for BeOS have been contributed by Chris Herborth
<cherborth@vdelta.com>.
The EXPORT_DEF/EXPORT_FUNC/etc. stuff has been replaced with a
more elaborate scheme (coming from the Freetype 2 experience)
that allows more complex cases of interface to be handled. See
ttconfig.h for details.
Cleaning up of the ft_conf.h files to remove obsolete stuff.
Extensions
----------
**
** Full support for the GPOS table has been implemented. As usual,
** the documentation is available in apirefx.txt, and ftstrtto
** demonstrates how to use it.
**
TT_GSUB_Add_String() has two additional parameters needed for
GPOS support.
TT_CharMap_Next() of the ftxcmap extension now uses `TT_ULong'
as the second parameter.
A long-lived bug in ftxpost.c (with 2.0 format, when the
additional names were out of order, the names were incorrectly
assigned) has been extermined. Thanks to Jean-Christophe Dubacq
<Jean-Christophe.Dubacq@lri.fr>.
Test programs
-------------
ftstrtto now uses `S' instead of `G' to toggle activation of
GSUB. `P' will toggle GPOS activation (this is new). UTF-8
values greater than U+FFFF are supported.
ftdump will dump some information about the GPOS table also.
ftstrpnm now supports coloured text.
Miscellaneous
-------------
**
** You can now at your option use either the FreeType license
** (usable in commercial products) or the GPL license (usable with
** other free software, but this requires any further development
** to be released to the public).
**
The library has been updated to use libtool 1.3.4.
Fixed a mutex bug in the ttraster module.
The FreeType license has been reworded to improve legibility
(thanks to Ruthanna Wilson <ruthanna@us.ibm.com>).
Fixed a property bug in the arabic module.
Various small fixes to reduce compiler warnings.
Fixed the thread-safe build. The following files didn't compile
properly when TT_CONFIG_OPTION_THREAD_SAFE is defined:
lib/arch/unix/ttmmap.c
lib/extend/ftxsbit.c
lib/extend/ftxgpos.c
lib/extend/ftxgdef.c
lib/extend/ftxgsub.c
More tests to prevent division by zero.
<ttnameid.h> has been updated.
OS/2 table version 2 is now recognized.
Contributed programs
--------------------
ttf2bdf:
Changed bitmap generation for outline glyphs to Flow_Down.
Added support for strikes (bitmaps).
Added missing parameter documentation.
Minor documentation changes and compatibility with latest
Freetype.
ttf2pk:
Added support for multiple SFD files.
New option `-L' to provide a ligature mapping file (patch from
CHO Jin-Hwan <chofchof@kias.re.kr>).
New option `-w' to emit PostScript encoding vectors for
subfont files to be used with pdfLaTeX (patch from CHO
Jin-Hwan <chofchof@kias.re.kr>).
Add support for a configuration file (ttf2pk.cfg) which can
read more than a single map file, similar to pdfTeX (patch
from CHO Jin-Hwan <chofchof@kias.re.kr>).
Support for character codes greater than 0xFFFF (patch from
Dominique Unruh <dominique@unruh.de>).
ttf2tfm no longer assumes that the x-height is always 400 PS
units.
Pascal source code
------------------
**
** The Pascal source files have been completely removed from the
** FreeType distribution. It is now available as an extra package;
** for more information please visit http://www.freetype.org.
**
Changes between FreeType version 1.3 and version 1.3.1
======================================================
Bug fixes.
Changes between FreeType version 1.2 and version 1.3
====================================================
Documentation
-------------
Improved installation instructions.
Complete revision of almost all documentation files.
**
** Added the file apirefx.txt to document all extensions to the
** FreeType library. Consequently, errstr.txt has been removed.
**
Added the file optimize.txt, explaining how to improve FreeType
on a given architecture.
**
** Documentation about possible patent restrictions added.
**
Added howto/mac.txt (stating basically that the FreeType team
can't support the Macintosh platform because of lack of
knowledge).
Added howto/msdos.txt, documenting compilation for various 16bit
and 32bit compilers.
API functions
-------------
TT_Load_Kerning_Table() now returns TT_Err_Invalid_Argument
instead of TT_Err_Bad_Argument (which is used for an internal
error only) for an invalid argument. The same holds for
TT_Get_Face_Widths() and TT_Get_Glyph_Big_Metrics().
If the glyf table is missing, the new error code
TT_Err_Glyf_Table_Missing is returned instead of
TT_Err_Table_Missing. This affects TT_Get_Face_Widths(),
TT_Load_Glyph(), and TT_Open_Face().
**
** New function TT_FreeType_Version() to get the major and minor
** version dynamically.
**
TT_Load_Glyph() has now two additional flags. TTLOAD_PEDANTIC
will force pedantic handling of the glyph instructions, and
TTLOAD_IGNORE_GLOBAL_ADVANCE_WIDTH is needed for some fonts
which have correct advance width values for the glyphs but an
incorrect global advance width value.
TT_Get_Glyph_Big_Metrics() now returns correct vertical bearing
values (both linear and pixel values).
New error code TT_Err_Glyf_Table_Missing (0x89) used to indicate
a missing `glyf' table.
The following macros have been shortened to stay within the
limit of 32 characters (the longer macro names are still
available if HAVE_LIMITS_ON_IDENTS is not defined).
TT_UCR_ARABIC_PRESENTATION_FORMS_A ->
TT_UCR_ARABIC_PRESENTATIONS_A
TT_UCR_ARABIC_PRESENTATION_FORMS_B ->
TT_UCR_ARABIC_PRESENTATIONS_B
TT_UCR_COMBINING_DIACRITICAL_MARKS ->
TT_UCR_COMBINING_DIACRITICS
TT_UCR_COMBINING_DIACRITICAL_MARKS_SYMB ->
TT_UCR_COMBINING_DIACRITICS_SYMB
freetype.h:
TT_Bool is now typedef'ed as `typedef int'.
New typedefs: TT_Int and TT_UInt.
Declarations of TT_Matrix_Multiply() and TT_Matrix_Invert()
have been removed since these functions were never
implemented.
Architectures
-------------
Added `ansi' directory to the supported architectures -- any
ANSI C compiler should compile FreeType with these files.
Added `debugger' directory to the architectures. Use this to
build a special version of FreeType for bytecode debugging
(tested with OS/2 and Unix).
Added more files to the `mac' architecture directory to make
basic support complete.
Support for VMS added (to compile the library only).
Contributed by Jouk Jansen <joukj@hrem.stm.tudelft.nl>.
Added `win16' architecture directory for older Windows versions.
A graphics driver (gw_win16.c) for the example programs is
available also.
**
** Antoine Leca contributed support for many MS-DOS and Windows
** compilers (including library fixes to make it 16bit compliant):
**
Borland C++ for MS-DOS (tested with v. 3.1, 4.02, 5.0),
Microsoft C for MS-DOS,
Turbo C (versions 1.5 and 2.0 -- version 1.0 is too old),
Borland C++ 4.0 and 5.0 for Windows (both 16bit and 32bit
versions),
gcc under Win32 (Cygwin32 or MinGW32),
Microsoft Visual C++ 2.x, 4.x, 5.0, and 6.0 for Windows
Support for the gettext package with DJGPP compiler has been
added.
Since many older compilers on both MS-DOS and Windows platforms
have problems to build dependency files automatically, scripts
for gcc under Unix have been added to do this. Similarly, a
script to produce a DLL definition file is now included in the
distribution.
Moved old win32 support to contrib/win32, replacing all CR/LF
with LF, and using only lowercase file names for consistency.
Additionally, some missing files in the FreeType 1.2
distribution have been added. Antoine Leca has written a new,
light-weight graphics driver (gw_win32.c) which fits better into
the current scheme.
Small additions have been made to the Amiga graphics driver.
The use of the ARM macro (intended for this architecture) has
been completely removed due to lack of support.
Checks for endianness have been removed completely since
FreeType isn't dependent on it.
Global compilation macros
-------------------------
The TT_HUGE_PTR macro has been added to support fonts with more
than 16000 characters or so with 16bit MS-DOS compilers.
Consequently, the files hugefile.c and hugemem.c have been added
which provide special versions for these compilers.
HAVE_LIMITS_ON_IDENTS has been introduced to overcome
restrictions with old compilers which can't digest identifiers
longer than 32 characters.
**
** Added option TT_CONFIG_OPTION_NO_INTERPRETER to desactivate the
** bytecode interpreter completely. This option is off by default.
**
Added options TT_CONFIG_OPTION_STATIC_RASTER and
TT_CONFIG_OPTION_STATIC_INTERPRETER to build static versions of
the respective components. Off by default. (It was formerly
called TT_STATIC_RASTER.)
Better debugging support (see ttconfig.h for details):
DEBUG_LEVEL_TRACE, DEBUG_LEVEL_ERROR, DEBUG_INTERPRETER,
DEBUG_MEMORY, DEBUG_FILE.
Added TT_MAX_EXTENSIONS to define the maximal number of
extensions (currently set to 8 -- this macro was previously in
ttextend.c).
Extensions
----------
**
** Full support for TrueType Open resp. OpenType GSUB tables has
** been implemented. It uses a GDEF table if available; otherwise,
** a method to construct an artificial GDEF table has been added
** (note that GDEF parts not related to GSUB are loaded but not
** further handled). An example how to use it can be found in the
** new test program ftstrtto.
**
Rudimentary GPOS support -- currently, you can load the GPOS
subtables but nothing more.
**
** Documentation for all extensions can be found in the file
** apirefx.txt.
**
Fixed a bug in TT_Load_PS_Names() which returned a local, thus
invalid pointer.
**
** Support for embedded bitmaps has been added (thanks to
** YAMANO'UCHI Hidetoshi <mer@interlink.or.jp> who has contributed
** a lot of the code). It can handle `bloc', `bdat', `EBLC', and
** `EBDT' tables. [TrueType embedded bitmaps are also called
** `sbits' (for `scaler bitmaps').]
**
Test programs
-------------
**
** A new test program called ftstrtto has been added to test
** TrueType Open features. Almost all available FreeType
** extensions are used in this program -- it displays a UTF 8
** encoded string on screen, allowing to toggle kerning, embedded
** bitmaps, GSUB support, and hinting. Additionally, it has a
** special module to handle the Arabic script properly (in
** arabic.c), i.e., it treats initial, medial, final, and isolated
** glyphs correctly.
**
The new module `blitter.c' provides the blitting function
Blit_Bitmap() for bitmaps of various depth.
The debugging program `fdebug' has been rewritten to provide a
better user interface.
ftdump has been extended to show information about embedded
bitmaps and GSUB data. It will now also show the PostScript
name of the font.
The new test program ftmetric can dump metrics and glyphs -- it
uses the gettext package for i18n support.
Another new test program is ftsbit to dump embedded bitmaps
contained in a font.
A small bug has been fixed in ftstring to compute the right
bounding box of the string.
ftview has been extended to display embedded bitmaps also
(switch `-B').
The maximal point size of glyphs in ftview has been increased to
5000pt -- this has shown some clipping bugs in the engine which
have been fixed meanwhile. As a demonstration, it also
activates tracing of the raster and gload component if
DEBUG_LEVEL_TRACE (see above) is defined.
Miscellaneous
-------------
The library has been updated to use autoconf 2.13 and libtool
1.3.3 throughout.
**
** FreeType will now install its header files in
** <prefix>/freetype/... since the number of files has grown again.
**
Added a lot of EXPORT_FUNC/EXPORT_DEF macros to functions for
correct exporting in DLLs.
**
** FreeType can now successfully load Mac fonts which don't have an
** `OS/2' table.
**
Fixed a bug in handling composite glyphs where the composite
elements use attached points.
Better debugging support for instructions.
Various workarounds have been implemented to support slightly
broken fonts (or rather, fonts not following exactly the
TrueType specifications).
Contributed programs
--------------------
ttf2bdf:
**
** Swapped all the columns in the mapping files.
**
Changed the mapping table loader to index on the second column
instead of the first.
Changed the includes to deal with compilation on Windows.
Added some new mapping tables.
Fixed an incorrect parameter for Traditional C compilers.
Added generation of the _XFREE86_GLYPH_RANGES properties.
Change all CRLF's, CR's, or LF's in copyright strings to
double spaces.
Changed it so gcc 2.8.1 likes the return type of main() again.
Changed Makefile.in a bit to make installation more
consistent.
Changed the lower limit for the vertical and horizontal
resolutions to be 10dpi instead of 50dpi.
ttf2pfb:
Has now rudimentary support for mapping tables (switch `-m')
and better PostScript name support for ordinary Type 1 fonts
-- nevertheless, it is far from finished, and there are some
plans to merge it with ttf2pt1.
configure script added.
Option `-k' added to keep output file in case of error.
`-v' is now really verbose.
ttf2pk:
**
** Support for MiKTeX's file searching mechanism added (ttf2pk
** and ttf2tfm are now part of the MiKTeX).
**
**
** Support for rotated glyphs added (only for subfonts; switches
** `-x' and `-y' to activate rotation resp. controlling the y
** offset). If a GSUB table with the `vert' feature is available
** in the font, vertical glyph presentation forms are used.
**
Added warning message to the configure script in case the
kpathsea library isn't used.
Fixed an omission in Bg5.sfd.
**
** Added UBg5plus.sfd for mapping Unicode to Bg5+ encoding.
** Similar SFD files now available: UBg5.sfd, UGB.sfd, UGBK.sfd,
** UJIS.sfd, UKS.sfd.
**
Added documentation for dvidrv.btm.
Will now compile with kpathsea version 3.3 or newer also.
Subfont ligature support added as needed in the HLaTeX package
for Korean (switch `-l').
**
** Since ttf2pk support has been added to teTeX version 1.0 and
** newer, no patch are necessary.
**
Fixed a string initialization bug in buildtfm() (file
tfmaux.c).
Added more documentation about file searching and a full
example how to use ttf2tfm.
Fixed a small bug in ttf2tfm.c which printed `(null)' instead
of nothing for the ttfonts.map entry if the font name prefix
string was empty.
ttf2tfm will now use the first type 0 kerning table only
(instead of the first kerning table only).
Both ttf2pk and ttf2tfm will now apply stretching and slanting
directly to the outline. This usually yields smaller bounding
boxes.
ttf2tfm will now output a comment string to the VPL file to
illustrate the meaning of the `HEADER' lines.
ttfbanner:
Added Makefile for emx+gcc compiler.
Added autoconf support.
Fixed a lot of compilation warnings.
Pascal source code
------------------
The Pascal source code has been seriously updated since 1.2.
Here are the most important changes.
**
** A. Support for charmaps and the name table
**
**
** The Charmap functions were not correctly implemented before
** 1.3. They are now available in the Pascal API.
**
**
** Similarly, the `name' table was not loaded, and the
** TT_Get_Name function wasn't implemented before 1.3. It is now
** done.
**
**
** The Pascal engine is now feature-complete, except that it
** provides no extensions like the C source code.
**
B. Improvements in the glyph loader and the interpreter
Several changes were made in order to be able to load more
broken fonts, as well as old Apple fonts which happened to use
some very rarely-used aspects of the specification.
Note that the Pascal bytecode interpreter, contrary to the C
version, is not able to silently accept broken glyphs yet, or
even use the flag TTLOAD_PEDANTIC. Implementing this in
Pascal would require some serious work (unlike to C, where
this feature was introduced easily with the use of a few
macros to minimize source changes). So TT_Load_Glyph might
return an error with the Pascal engine while the C one accept
the same request successfully.
C. Ports to Delphi and Free Pascal
This release has been compiled on the following compilers:
- Free Pascal 0.9 (Dos,Linux,Win32,OS/2)
- Virtual Pascal 1.1 and 2.0 (Win32 and OS/2)
- Turbo Pascal 6.0 and Borland Pascal 7.0 (Dos)
- Delphi 1, 2, and 3. It should work with D4 and D5 also.
(Windows)
Note that most of the test programs will not compile on
anything except MS-DOS or OS/2. The debugger also needs the
Turbo Vision library. The library, however, should compile
fine with all tools cited above.
Changes between FreeType 1.1 and 1.2
====================================
Mostly bug fixes and build fixes.
Changes between FreeType 1.0 and 1.1
====================================
There were various changes since the 1.0 release. Here they are
summarized:
- Added vertical layout support
The engine now loads the vertical header and metrics if available
and makes them visible through the new `vertical' field of the
face properties (it is set to NULL if no vertical data was found
in the font file).
The glyph loader now loads all metrics (horizontal and vertical),
but still returns the horizontal ones only with the API
TT_Get_Glyph_Metrics(). However, TT_Get_Glyph_Bit_Metrics() has
been added to extract them from a glyph container.
- Serialization of coordinates arrays in TT_Outline()
As announced in the previous API reference, the structure of
TT_Outline changed slightly, as well as the naming of its fields.
The points are now stored in a single array of TT_Vector, instead
of two parallel arrays (one for the Xs, the other for the Ys).
- New API function TT_Get_Face_Metrics()
Useful to access unscaled metrics like left side bearings, advance
widths, top side bearings, and advance height, for a given range
of glyphs.
- New extension: ftxcmap.c
Used by some applications to enumerate and parse the charmap
tables in an easier way.
- New extension: ftxpost.c
With this extension you can access the PostScript glyph names
given in the `post' table.
- New extension: ftxwidth.c
This extension is used to parse the `glyf' table to extract the
bounding boxes of a given range of glyphs. This is much faster
than loading individual glyphs.
- The FreeType engine is now THREAD-SAFE and REENTRANT
However, the implementation of ttmutex must be refined for your
system -- the default one is a dummy and doesn't do anything!
Beware! THIS IS STILL IN BETA.
The thread-safe and reentrant builds now compile and seem to run
well when used with a single thread. Some efforts have been spent
to check the coherency of the lock contentions within the engine,
but we haven't tested multi-threading heavily.
- Large internal re-organization
Too technical to explain shortly, but results in a much better
memory footprint and smaller code, especially when opening
multiple faces.
- Fixes/enhancements to the interpreter
The infamous Monotype.com bug (a new free font released by
Microsoft Typography a few days after the FreeType 1.0 release!)
is fixed, of course, as well as few other little and unpleasant
artifacts...
The interpreter was also seriously re-organized to allow the use
of a very large `switch' statement, instead of a jump table, which
results in smaller and faster code on some systems (depending of
the compiler too). Users of the library can experiment with the
TT_CONFIG_OPTION_INTERPRETER_SWITCH configuration macro to test
this.
- Single object compilation mode
The core engine can now be compiled into a single object file.
This allows optimizing compilers to do more global optimizations,
and get rid of many of the `intermediate' internal symbols used to
link internal engine components together.
The engine now takes only 48kByte of stripped Intel object code!
- DLL compilation mode
In order to allow the compilation of the library as a DLL, the
keyword EXPORT has been added as a prefix to all high-level API
functions found in `freetype.h'. Define it to the value you need
before `#include "freetype.h"' when building the DLL (if undefined
it will default to nothing within this header file).
(Apparently, this is only useful on Win32, maybe on OS/2.)
- Renamed configuration macros
These were renamed to forms of TT_CONFIG_OPTION_XXXXX_YYYYY.
They're located in ttconfig.h and can be defined/undefined
manually by developers who want to tune the compilation of the
engine:
TT_CONFIG_OPTION_EXTEND_ENGINE
Allows extensions to be linked with the single object engine.
If you don't need any of them, you may save one or more
kilobytes by undefining it.
TT_CONFIG_OPTION_GRAY_SCALING
Allows the compilation of the gray-scaling (font smoothing)
code in ttraster. If undefined, some APIs won't be available:
TT_Set_Raster_Palette(),
TT_Get_Glyph_Pixmap(),
TT_Get_Outline_Pixmap()
TT_CONFIG_OPTION_INTERPRETER_SWITCH
Uses a large `switch' statement in the bytecode interpreter
instead of a constant call-table. Depending on your processor
and compiler, this can lead to significant reduction of code
size and/or increase of performance.
TT_CONFIG_OPTION_THREAD_SAFE
When defined, a thread-safe version of the engine is built. A
thread-safe version is a bit bigger, probably not slower, than
a non-threaded build. ATTENTION: You must redefine the file
`lib/ttmutex.c' for your own platform to get it to work
correctly.
Some more options may come in the future...
- New API functions TT_MulDiv() and TT_MulFix()"
To help you compute `a*b/c' with 64-bit intermediate precision, or
`a*b/0x10000' with the same one...
These are not necessarily the fastest functions but they are
clearly portable and overflow-safe. Your runtime/compiler may
provide better replacements, though...
Changes between FreeType Beta and 1.0
=====================================
There were a number of changes since the public beta:
I. Bug fixes
------------
The following bugs have been fixed in this release:
- Incorrect advance width and left side bearings
The glyph loader has been re-designed to match the values found
in the pre-calc tables...
- Problems when opening multiple fonts
Fixed. A stupid bug in the i/o component.
- Problems with some Georgian fonts
Fixed. Discovered some new undocumented opcodes behaviour...
- Buglets in the test programs which made them return invalid
error codes
Fixed.
- Memory leaks when trying to open broken some font files
Fixed. Waiting for more broken fonts to test...
- Non-square resolutions don't work or display correctly
They now work very well!
- The scan-line converter, while in font-smoothing mode, doesn't
perform horizontal drop-out control
This wasn't really bug, but the feature has been correctly
added.
The remaining `features' persist, as they're not essential yet:
- The `rotated' and `stretched' flags do not work (glyph loading
will then return errors). However, it is still possible to
rotate or transform any outline without setting these flags.
- We always use drop-out mode number 2, as some of the values
returned by some `cvt programs' seem invalid for now...
Note also that an `event hook/callback' has been introduced in this
release, but is still under alpha (not even beta; it is commented
out currently). You should not rely on this...
II. Code changes
----------------
1. API Changes
A few API changes were necessary in order to support important
features, or future improvements which will come in later
releases.
- TT_Set_Instance_Resolution() was renamed to
TT_Set_Instance_Resolutions().
- TT_Set_Instance_PointSize() has disappeared. Instead, the
following APIs have been defined:
TT_Set_Instance_CharSize()
TT_Set_Instance_CharSizes()
TT_Set_Instance_PixelSizes()
- The TT_Engine class has been introduced. It models one
instance of the library, and is used to allow re-entrance and
shared library code. The functions which now depend on a
TT_Engine parameter are:
TT_Init_FreeType()
TT_Done_FreeType()
TT_Open_Face()
TT_Open_Collection()
TT_Set_Raster_Palette()
TT_Get_Outline_Bitmap()
TT_Get_Outline_Pixmap()
Note that there is _no_ sharing of objects between distinct
engines.
- Each face and instance object have an inside pointer which use
is reserved to client application. Several functions are
defined to set and read it:
TT_Set_Face_Pointer() / TT_Get_Face_Pointer()
TT_Set_Instance_Pointer() / TT_Get_Instance_Pointer()
- TT_Apply_Outline_Matrix() has been renamed to
TT_Transform_Outline().
TT_Apply_Outline_Translation() has been renamed to
TT_Translate_Outline()
TT_Apply_Vector_Matrix() has been renamed to
TT_Transform_Vector()
all for the sake of clarity.
2. Structural changes
Some structures have evolved.
- The instance metrics have now two new fields which are
`x_scale' and `y_scale'. Each one is a scaling factor,
expressed in the 16.16 fixed float format (TT_Fixed), used to
convert one distance expressed in font units into the same
distance in fractional (26.6) pixels.
- A new structure TT_BBox has been defined to describe an
outline's bounding box.
- The outlines are now full-class citizen. It is possible to
create new outlines, copy, clone, transform, translate and
render them through specific methods of the TT_Outline class
(previously called TT_Glyph_Outline). Read the API reference
for a complete listing.
- The glyph metrics have a new structure: they contain a TT_BBox
field, a TT_Outline field, as well as three metrics values,
which are `bearingX', `bearingY', and `advance'. Read the
file `glyphs.txt' for more information about their definitions
and uses.
3. Small but IMPORTANT changes
- The `max_Faces' field of a face's properties has disappeared.
It is replaced by `num_Faces' which gives the total number of
fonts embedded in a collection (the previous field gave the
total minus one).
- TT_Load_Glyph() now returns correctly placed outlines, and
computes advance widths which match the pre-calc values in the
"hdmx" table in nearly all cases.
- TT_Get_Glyph_Metrics() returns grid-fitted metrics for hinted
glyphs (i.e., loaded with the TTLOAD_HINT_GLYPH, or
TTLOAD_DEFAULT, flags). This includes the bounding box. To
get the exact bounding box of a hinted glyph, you should
extract its outline, then call TT_Get_Outline_BBox().
- Some improvements in the glyph loader, which improves
drastically the placement of glyphs (especially composite
ones) which previously caused trouble for some fonts
(e.g. goudy.ttf).
- Several minor improvements in the interpreter to improve
rendering and bounds checking...
- Up-to-date Pascal source code, with output equivalent to the C
tree...
--- END ---
|