* docs/*: serious rewriting of the documentation
* include/freetype/internal/ftobjs.h, src/base/ftobjs.c, src/bdf/bdfdrivr.c, src/pcf/pcfdriver.c, src/pfr/pfrsbit.c, src/sfnt/ttsbit.c, src/type42/t42objs.c, src/winfonts/winfnt.c: introduced three new functions to deal with glyph bitmaps within FT_GlyphSlot objects. these are: ft_glyphslot_free_bitmap ft_glyphslot_alloc_bitmap ft_glyphslot_set_bitmap these are much more convenient to use than managing the FT_GLYPH_OWN_BITMAP flag manually. the font drivers have been modified to use them as well. * src/cache/ftlru.c: fixed an invalid assertion check
This commit is contained in:
parent
1c044d7d29
commit
66cbc20978
|
@ -1,3 +1,8 @@
|
||||||
|
2003-03-20 David Turner <david@freetype.org>
|
||||||
|
|
||||||
|
* docs/*: serious rewriting of the documentation
|
||||||
|
|
||||||
|
|
||||||
2003-03-15 David Turner <david@freetype.org>
|
2003-03-15 David Turner <david@freetype.org>
|
||||||
|
|
||||||
* src/truetyoe/ttdriver.c (Set_Char_Sizes): fixed a small rounding bug.
|
* src/truetyoe/ttdriver.c (Set_Char_Sizes): fixed a small rounding bug.
|
||||||
|
|
5
Jamfile
5
Jamfile
|
@ -103,10 +103,9 @@ if $(DEBUG_HINTER)
|
||||||
HDRS += $(FT2_INCLUDE) ;
|
HDRS += $(FT2_INCLUDE) ;
|
||||||
|
|
||||||
|
|
||||||
#SubDirHdr += $(FT2_INCLUDE) ;
|
|
||||||
|
|
||||||
# Uncomment the following line if you want to build individual source files
|
# Uncomment the following line if you want to build individual source files
|
||||||
# for each FreeType 2 module.
|
# for each FreeType 2 module. this is only useful during development, and
|
||||||
|
# is better defined as an environment variable anyway !
|
||||||
#
|
#
|
||||||
# FT2_MULTI = true ;
|
# FT2_MULTI = true ;
|
||||||
|
|
||||||
|
|
275
docs/BUGS
275
docs/BUGS
|
@ -1,275 +0,0 @@
|
||||||
List of known FreeType 2 Bugs
|
|
||||||
-----------------------------
|
|
||||||
|
|
||||||
"Identifier" is a string to uniquely identify the bug. A more detailed
|
|
||||||
description of the bug is found below the table of opened bugs.
|
|
||||||
|
|
||||||
"Date" is the date when the bug was first reported or entered in this
|
|
||||||
document. Dates are in _European_ format, i.e day/month/year.
|
|
||||||
|
|
||||||
"Opened By" is the name of the person who first spotted the bug. Note that
|
|
||||||
we can use abbreviations here, like:
|
|
||||||
|
|
||||||
"David" for David Turner
|
|
||||||
"Werner" for Werner Lemberg
|
|
||||||
etc.
|
|
||||||
|
|
||||||
"Reproduceable" indicates whether the bug could be reproduced by the
|
|
||||||
development team or not (it can be specific to a given platform), whether it
|
|
||||||
always happens, or only sporadically, etc.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
I. Open bugs
|
|
||||||
============
|
|
||||||
|
|
||||||
|
|
||||||
Identifier Date Opened by Reproduceable
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
NO-CID-CMAPS 13-09-2001 David always
|
|
||||||
BAD-TT-RENDERING 12-09-2001 Paul Pedriana ?
|
|
||||||
BAD-THIN-LINES 13-09-2001 David ?
|
|
||||||
NOT-WINDOWS-METRICS 07-10-2001 David always
|
|
||||||
ADVANCED-COMPOSITES 25-10-2001 George Williams always
|
|
||||||
|
|
||||||
--------------------END-OF-OPENED-BUGS-TABLE----------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
II. Closed bugs
|
|
||||||
===============
|
|
||||||
|
|
||||||
|
|
||||||
Identifier Date Closed by Closure date
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
BAD-TTNAMEID.H 12-09-2001 Antoine N/A
|
|
||||||
BAD-T1-CHARMAP 15-06-2001 David 2.0.5
|
|
||||||
BAD-UNIXXXX-NAMES 30-07-2001 David 2.0.5
|
|
||||||
GLYPH_TO_BITMAP-BUG 05-12-2001 David 05-12-2001
|
|
||||||
AUTOHINT-NO-SBITS 13-09-2001 David 2.0.6
|
|
||||||
TT-GLYPH-CRASH 01-01-2002 David 2.0.6
|
|
||||||
T1-FONT-CRASH 01-01-2002 David 2.0.6
|
|
||||||
BAD-ADVANCES 30-11-2001 David 2.0.6
|
|
||||||
GLYPH-TO-BITMAP-BUG 15-12-2001 David 2.0.6
|
|
||||||
--------------------END-OF-CLOSED-BUGS-TABLE----------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
III. Bug descriptions
|
|
||||||
=====================
|
|
||||||
|
|
||||||
|
|
||||||
--- START OF OPEN BUGS ---
|
|
||||||
|
|
||||||
|
|
||||||
NO-CID-CMAPS
|
|
||||||
|
|
||||||
Not exactly a bug, but the CFF font driver doesn't build a Unicode charmap
|
|
||||||
from the contents of font files, which prevents efficiently using fonts in
|
|
||||||
this format.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-TT-RENDERING
|
|
||||||
|
|
||||||
According to Paul Pedriana <PPedriana@maxis.com>, there is a rather
|
|
||||||
important difference between the rendering of TrueType-hinted glyphs of
|
|
||||||
current FT2 and old betas.
|
|
||||||
|
|
||||||
Tests and comparisons show a _major_ discrepancy of monochrome truetype
|
|
||||||
bytecode-hinted glyphs! Something seems to be really broken here!
|
|
||||||
|
|
||||||
Some of this has been fixed in 2.0.6; there was a bug in the TrueType
|
|
||||||
loader that prevented it from loading composites correctly. However,
|
|
||||||
there are still _subtle_ differences between FT1 and FT2 when it comes to
|
|
||||||
monochrome TrueType-hinted glyphs (the major differences are gone though).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-THIN-LINES
|
|
||||||
|
|
||||||
It seems that the anti-aliased renderer in FreeType has problems rendering
|
|
||||||
extremely thin straight lines correctly, at least when using the
|
|
||||||
FT_Outline_Render() function.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
NOT-WINDOWS-METRICS
|
|
||||||
|
|
||||||
FreeType doesn't always return the same metrics as Windows for ascender,
|
|
||||||
descender, and text height, depending on character pixel sizes. A lot of
|
|
||||||
testing on Windows is needed to debug this properly. It might be due to a
|
|
||||||
rounding bug when computing the "x_scale" and "y_scale" values.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ADVANCED-COMPOSITES
|
|
||||||
|
|
||||||
Provided by George Williams <pfaedit@users.sourceforge.net>:
|
|
||||||
|
|
||||||
I notice that truetype/ttgload.c only supports Apple's definition of
|
|
||||||
offsets for composite glyphs. Apple and Microsoft behave differently if
|
|
||||||
there is a scale factor. OpenType defines some bits to disambiguate.
|
|
||||||
|
|
||||||
(A problem in both 2.0.4 and 2.0.5.)
|
|
||||||
|
|
||||||
Apple says (http://fonts.apple.com/TTRefMan/RM06/Chap6glyf.html) that if
|
|
||||||
flags&ARGS_ARE_XY is set then the offsets should be scaled by the scale
|
|
||||||
factors (as you have done), but they also say something very cryptic
|
|
||||||
about what happens when the component is rotated at 45° (which you do
|
|
||||||
not support) -- See the "Important" note at the bottom.
|
|
||||||
|
|
||||||
The old truetype spec from Microsoft did not mention this. The OpenType
|
|
||||||
spec (http://www.microsoft.com/typography/otspec/glyf.htm,
|
|
||||||
http://partners.adobe.com/asn/developer/opentype/glyf.html) defines two
|
|
||||||
new bits to disambiguate:
|
|
||||||
|
|
||||||
SCALED_COMPONENT_OFFSET 11
|
|
||||||
Composite designed to have the component offset scaled (designed for
|
|
||||||
Apple rasterizer)
|
|
||||||
|
|
||||||
UNSCALED_COMPONENT_OFFSET 12
|
|
||||||
Composite designed not to have the component offset scaled (designed
|
|
||||||
for the Microsoft TrueType rasterizer)
|
|
||||||
|
|
||||||
Perhaps you could add a load_flag to allow the user to define the
|
|
||||||
default setting?
|
|
||||||
|
|
||||||
David says:
|
|
||||||
|
|
||||||
Wow, I was not even aware of this, it will probably take a little time
|
|
||||||
to implement since I don't have any font that implement these
|
|
||||||
"features", and also because I believe that we're running out of bits
|
|
||||||
for "load_flag", some other way to set preferences is probably needed.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
--- END OF OPEN BUGS ---
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-TTNAMEID.H
|
|
||||||
|
|
||||||
The file "ttnameid.h" contains various constant macro definitions
|
|
||||||
corresponding to important values defined by the TrueType specification.
|
|
||||||
|
|
||||||
Joe Man <trmetal@yahoo.com.hk> reports that:
|
|
||||||
|
|
||||||
According to the information from TrueType v1.66:
|
|
||||||
|
|
||||||
Platform ID = 3 (Microsoft)
|
|
||||||
the Encoding ID of GB2312 = 4
|
|
||||||
the Encoding ID of big5 = 3
|
|
||||||
|
|
||||||
However, I have found that in ttnameid.h:
|
|
||||||
|
|
||||||
TT_MS_ID_GB2312 = 3
|
|
||||||
TT_MS_ID_BIG_5 = 4
|
|
||||||
|
|
||||||
Which one is correct?
|
|
||||||
|
|
||||||
Antoine replied that this was a bug in the TT 1.66 specification, and that
|
|
||||||
FreeType followed the most recent TrueType/OpenType specification here.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
AUTOHINT-SBITS
|
|
||||||
|
|
||||||
When trying to load a glyph, with the auto-hinter activated (i.e., when
|
|
||||||
using FT_LOAD_FORCE_AUTOHINT, or when the font driver doesn't provide its
|
|
||||||
own hinter), embedded bitmaps are _never_ loaded, unlike the default
|
|
||||||
behaviour described by the API specification.
|
|
||||||
|
|
||||||
This seems to be a bug in FT_Load_Glyph(), but there is no way to solve it
|
|
||||||
efficiently without making a few important internal changes to the
|
|
||||||
library's design (more importantly, to the font driver interface).
|
|
||||||
|
|
||||||
This has been corrected with a hack in FT_Load_Glyph(). More important
|
|
||||||
internal changes should help get rid of it with a clean solution in a
|
|
||||||
further release like FreeType 2.1.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-T1-CHARMAP
|
|
||||||
|
|
||||||
Type1 driver doesn't read "cacute" and "lslash" characters from iso8859-2
|
|
||||||
charset. Those characters are mapped as MAC-one in glnames.py, so they
|
|
||||||
cannot be shown in Adobe Type1 fonts.
|
|
||||||
|
|
||||||
(This was due to a bug in the "glnames.py" script used to generate the
|
|
||||||
table of glyph names in 'src/psaux/pstables.h'.)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-UNIXXXX-NAMES
|
|
||||||
|
|
||||||
Glyph names like uniXXXX are not recognized as they should be. It seems
|
|
||||||
that code in psmodule.c for uniXXXX glyph names was never tested. The
|
|
||||||
patch is very simple.
|
|
||||||
|
|
||||||
(A simple bug that was left un-noticed due to the fact that I don't have
|
|
||||||
any Postscript font that use this convention, unfortunately.)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GLYPH_TO_BITMAP-BUG
|
|
||||||
|
|
||||||
Calling FT_Glyph_To_Bitmap() sometimes modifies the original glyph
|
|
||||||
outline, creating weird alignment artefacts.
|
|
||||||
|
|
||||||
This subtle bug was really in the file `src/smooth/ftsmooth.c'.
|
|
||||||
Basically, the outline was shifted before rendering it into a new bitmap
|
|
||||||
buffer. However, it wasn't properly un-shifted after that operation.
|
|
||||||
|
|
||||||
This was only noticeable with certain glyphs or certain fonts; it crept in
|
|
||||||
a long time ago.
|
|
||||||
|
|
||||||
The same bug has been fixed in src/raster/ftrender1.c also.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TT-GLYPH-CRASH
|
|
||||||
|
|
||||||
The library crashed when trying to load certain glyphs from an
|
|
||||||
automatically generated TrueType file (tt1095m_.ttf submitted by Scott
|
|
||||||
Long).
|
|
||||||
|
|
||||||
It turned out that the font contained invalid glyph data (i.e. was
|
|
||||||
broken), but the TrueType glyph loader in FreeType wasn't paranoid enough,
|
|
||||||
which resulted in nasty memory overwrites all over the place.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
T1-FONT-CRASH
|
|
||||||
|
|
||||||
The library crashed when trying to load the "Stalingrad Regular" face from
|
|
||||||
the "sadn.pfb" font file provided by Anthony Fok (and the Gnome-Print team
|
|
||||||
I believe).
|
|
||||||
|
|
||||||
This was due to the fact that the font missed a full font name entry,
|
|
||||||
though boasted a family name and postscript name. The Type 1 face loader
|
|
||||||
didn't check for these pathetic cases and seg-faulted.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BAD-ADVANCES
|
|
||||||
|
|
||||||
All scalable font drivers returned un-fitted glyph advances when
|
|
||||||
FT_LOAD_DEFAULT was used, which was incorrect. This problem was pretty
|
|
||||||
old but hadn't been spotted because all test programs actually explicitly
|
|
||||||
or implicitly (i.e. through the cache) rounded the advance widths of
|
|
||||||
glyphs.
|
|
||||||
|
|
||||||
This resulted in poor rendering of a number of client applications however
|
|
||||||
(it is strange to see they took so long to notify the FreeType team).
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
GLYPH-TO-BITMAP-BUG
|
|
||||||
|
|
||||||
FT_Glyph_To_Bitmap() did incorrectly modify the source glyph in certain
|
|
||||||
cases, which resulted in random behaviour and bad text rendering. This
|
|
||||||
was spotted to bugs in both the monochrome and smooth rasterizer.
|
|
||||||
|
|
||||||
|
|
||||||
=== end of file ===
|
|
276
docs/BUILD
276
docs/BUILD
|
@ -1,276 +0,0 @@
|
||||||
|
|
||||||
FreeType 2 compilation how-to
|
|
||||||
=============================
|
|
||||||
|
|
||||||
|
|
||||||
Introduction
|
|
||||||
------------
|
|
||||||
|
|
||||||
Welcome to the FreeType 2 library. You'll find in this document
|
|
||||||
instructions on how to compile the library on your favorite platform.
|
|
||||||
|
|
||||||
|
|
||||||
I. QUICK COMMAND-LINE GUIDE
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
THE FOLLOWING WILL ONLY WORK WITH GNU MAKE, IT WILL FAIL MISERABLY
|
|
||||||
WITH OTHER MAKE TOOLS, FOR EXAMPLE "BSD MAKE".
|
|
||||||
|
|
||||||
Install GNU Make (version 3.78.1 or newer), then try the following
|
|
||||||
on Unix or Cygwin:
|
|
||||||
|
|
||||||
./configure <youroptions> // this will setup the build
|
|
||||||
make // this will build the library
|
|
||||||
|
|
||||||
or even:
|
|
||||||
|
|
||||||
make setup unix
|
|
||||||
make
|
|
||||||
|
|
||||||
On Win32 + Visual C++:
|
|
||||||
|
|
||||||
make setup visualc // setup the build for VisualC++ on Win32
|
|
||||||
make // build the library
|
|
||||||
|
|
||||||
Then, go to the `demos' directory and type
|
|
||||||
|
|
||||||
make
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
If this doesn't work, read the following.
|
|
||||||
|
|
||||||
|
|
||||||
II. COMMAND-LINE COMPILATION
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
Note that if you do not want to compile FreeType 2 from a command
|
|
||||||
line shell, please skip to section III below (DETAILED COMPILATION).
|
|
||||||
|
|
||||||
FreeType 2 includes a powerful and flexible build system that allows
|
|
||||||
you to easily compile it on a great variety of platforms from the
|
|
||||||
command line. To do so, just follow these simple instructions:
|
|
||||||
|
|
||||||
a. Install GNU Make
|
|
||||||
|
|
||||||
Because GNU Make is the only Make tool supported to compile
|
|
||||||
FreeType 2, you should install it on your machine.
|
|
||||||
|
|
||||||
The FreeType 2 build system relies on many features special to GNU
|
|
||||||
Make -- trying to build the library with any other Make tool will
|
|
||||||
*fail*.
|
|
||||||
|
|
||||||
NEARLY ALL OTHER MAKE TOOLS WILL FAIL, INCLUDING "BSD MAKE", SO
|
|
||||||
REALLY INSTALL A RECENT VERSION OF GNU MAKE ON YOUR SYSTEM!
|
|
||||||
|
|
||||||
Make sure that you are invoking GNU Make from the command line, by
|
|
||||||
typing something like:
|
|
||||||
|
|
||||||
make -v
|
|
||||||
|
|
||||||
to display its version number.
|
|
||||||
|
|
||||||
VERSION 3.78.1 OR NEWER IS NEEDED!
|
|
||||||
|
|
||||||
b. Invoke `make'
|
|
||||||
|
|
||||||
Go to the root directory of FreeType 2, then simply invoke GNU
|
|
||||||
Make from the command line. This will launch the FreeType 2 host
|
|
||||||
platform detection routines. A summary will be displayed, for
|
|
||||||
example, on Win32:
|
|
||||||
|
|
||||||
|
|
||||||
==============================================================
|
|
||||||
FreeType build system -- automatic system detection
|
|
||||||
|
|
||||||
The following settings are used:
|
|
||||||
|
|
||||||
platform win32
|
|
||||||
compiler gcc
|
|
||||||
configuration directory ./builds/win32
|
|
||||||
configuration rules ./builds/win32/w32-gcc.mk
|
|
||||||
|
|
||||||
If this does not correspond to your system or settings please
|
|
||||||
remove the file 'config.mk' from this directory then read the
|
|
||||||
INSTALL file for help.
|
|
||||||
|
|
||||||
Otherwise, simply type 'make' again to build the library.
|
|
||||||
=============================================================
|
|
||||||
|
|
||||||
|
|
||||||
If the detected settings correspond to your platform and compiler,
|
|
||||||
skip to step e. Note that if your platform is completely alien to
|
|
||||||
the build system, the detected platform will be `ansi'.
|
|
||||||
|
|
||||||
|
|
||||||
c. Configure the build system for a different compiler
|
|
||||||
|
|
||||||
If the build system correctly detected your platform, but you want
|
|
||||||
to use a different compiler than the one specified in the summary
|
|
||||||
(for most platforms, gcc is the defaut compiler), invoke GNU Make
|
|
||||||
with
|
|
||||||
|
|
||||||
make setup <compiler>
|
|
||||||
|
|
||||||
For example:
|
|
||||||
|
|
||||||
to use Visual C++ on Win32, type: "make setup visualc"
|
|
||||||
to use LCC-Win32 on Win32, type: "make setup lcc"
|
|
||||||
to use Cygwin on Win32, type "make setup unix"
|
|
||||||
|
|
||||||
The <compiler> name to use is platform-dependent. The list of
|
|
||||||
available compilers for your system is available in the file
|
|
||||||
`builds/<system>/detect.mk' (note that we hope to make the list
|
|
||||||
displayed at user demand in the final release).
|
|
||||||
|
|
||||||
If you are satisfied by the new configuration summary, skip to
|
|
||||||
step e.
|
|
||||||
|
|
||||||
d. Configure the build system for an unknown platform/compiler
|
|
||||||
|
|
||||||
The auto-detection/setup phase of the build system copies a file
|
|
||||||
to the current directory under the name `config.mk'.
|
|
||||||
|
|
||||||
For example, on OS/2+gcc, it would simply copy
|
|
||||||
`builds/os2/os2-gcc.mk' to `./config.mk'.
|
|
||||||
|
|
||||||
If for some reason your platform isn't correctly detected, copy
|
|
||||||
manually the configuration sub-makefile to `./config.mk' and go to
|
|
||||||
step e.
|
|
||||||
|
|
||||||
Note that this file is a sub-Makefile used to specify Make
|
|
||||||
variables for compiler and linker invocation during the build.
|
|
||||||
You can easily create your own version from one of the existing
|
|
||||||
configuration files, then copy it to the current directory under
|
|
||||||
the name `./config.mk'.
|
|
||||||
|
|
||||||
e. Build the library
|
|
||||||
|
|
||||||
The auto-detection/setup phase should have copied a file in the
|
|
||||||
current directory, called `./config.mk'. This file contains
|
|
||||||
definitions of various Make variables used to invoke the compiler
|
|
||||||
and linker during the build.
|
|
||||||
|
|
||||||
To launch the build, simply invoke GNU Make again: The top
|
|
||||||
Makefile will detect the configuration file and run the build with
|
|
||||||
it.
|
|
||||||
|
|
||||||
f. Build the demonstration programs
|
|
||||||
|
|
||||||
|
|
||||||
III. DETAILED COMPILATION PROCEDURE
|
|
||||||
-----------------------------------
|
|
||||||
|
|
||||||
If you don't want to compile FreeType 2 from the command-line (for
|
|
||||||
example if you use a graphical IDE on a Mac or Windows), you will
|
|
||||||
need to understand how the FreeType files are organized.
|
|
||||||
|
|
||||||
FreeType 2 has a very modular design, and it is made of several
|
|
||||||
components. Each component must be compiled as a stand-alone object
|
|
||||||
file, even if it is really made of several C source files. For
|
|
||||||
example, the `base layer' component is made of the following C
|
|
||||||
files:
|
|
||||||
|
|
||||||
src/
|
|
||||||
base/
|
|
||||||
ftcalc.c - computations
|
|
||||||
ftextend.c - extensions support
|
|
||||||
ftlist.c - simple list management
|
|
||||||
ftobjs.c - object management
|
|
||||||
ftoutln.c - simple outline processing
|
|
||||||
ftstream.c - stream input
|
|
||||||
|
|
||||||
However, you can create a single object file by compiling the file
|
|
||||||
`src/base/ftbase.c', which basically contains
|
|
||||||
|
|
||||||
#include "ftcalc.c"
|
|
||||||
#include "ftobjs.c"
|
|
||||||
#include "ftstream.c"
|
|
||||||
#include "ftlist.c"
|
|
||||||
#include "ftoutln.c"
|
|
||||||
#include "ftextend.c"
|
|
||||||
|
|
||||||
Similarly, each component has a single `englobing' C file to compile
|
|
||||||
it as a stand-alone object:
|
|
||||||
|
|
||||||
src/autohint/autohint.c - the autohinting module
|
|
||||||
src/base/ftbase.c - the base layer, high-level interface
|
|
||||||
src/cache/ftcache.c - a glyph and image caching system
|
|
||||||
(still experimental)
|
|
||||||
src/cff/cff.c - the OpenType font driver
|
|
||||||
src/cid/type1cid.c - the CID-keyed font driver
|
|
||||||
src/psaux/psaux.c - the PS support module
|
|
||||||
src/psnames/psnames.c - a support module to handle PS glyph
|
|
||||||
names
|
|
||||||
src/raster1/raster1.c - the monochrome raster module
|
|
||||||
src/sfnt/sfnt.c - the `sfnt' module
|
|
||||||
src/smooth/smooth.c - the anti-aliasing raster module
|
|
||||||
src/truetype/truetype.c - the TrueType font driver
|
|
||||||
src/type1/type1.c - the Type 1 font driver
|
|
||||||
|
|
||||||
The last module of FreeType 2, `winfonts' (implementing support for
|
|
||||||
Windows FNT format), is a single file.
|
|
||||||
|
|
||||||
To compile one component, do the following:
|
|
||||||
|
|
||||||
- Add the top-level `include' directory to your compilation
|
|
||||||
include path
|
|
||||||
|
|
||||||
- Add the `src/<component>' directory to your compilation include
|
|
||||||
path, or simply `cd' to the component's source directory.
|
|
||||||
|
|
||||||
- Compile the component `source' file (see list below); you don't
|
|
||||||
need to be in the component's directory if you added
|
|
||||||
`src/<component>' to your include path.
|
|
||||||
|
|
||||||
For example, the following line can be used to compile the truetype
|
|
||||||
driver on Unix:
|
|
||||||
|
|
||||||
cd freetype2/
|
|
||||||
cc -c -Iinclude -Isrc/truetype src/truetype/truetype.c
|
|
||||||
|
|
||||||
Alternatively:
|
|
||||||
|
|
||||||
cd freetype2/src/truetype
|
|
||||||
cc -c -I../../include truetype.c
|
|
||||||
|
|
||||||
Finally, FreeType 2 contains some other components:
|
|
||||||
|
|
||||||
src/base/ftsystem.c - system-specific memory and i/o support
|
|
||||||
src/base/ftinit.c - initialization layer
|
|
||||||
src/base/ftdebug.c - debugging component (empty in release
|
|
||||||
build)
|
|
||||||
src/base/ftglyph.c - optional convenience functions
|
|
||||||
|
|
||||||
All font drivers are optional. The `sfnt', `psaux', and `psnames'
|
|
||||||
modules are mandatory for certain drivers. However, you may need to
|
|
||||||
update the list of drivers that are statically linked to the
|
|
||||||
library, which is located in the configuration file
|
|
||||||
`include/freetype/config/ftmodule.h'.
|
|
||||||
|
|
||||||
|
|
||||||
IV. Support for flat-directory compilation
|
|
||||||
------------------------------------------
|
|
||||||
|
|
||||||
It is possible to put all FreeType 2 source files into a single
|
|
||||||
directory, with the exception of the `include' hierarchy.
|
|
||||||
|
|
||||||
1. Copy all files in current directory:
|
|
||||||
|
|
||||||
cp freetype2/src/base/*.[hc] .
|
|
||||||
cp freetype2/src/raster1/*.[hc] .
|
|
||||||
cp freetype2/src/smooth/*.[hc] .
|
|
||||||
etc.
|
|
||||||
|
|
||||||
2. Compile sources:
|
|
||||||
|
|
||||||
cc -c -Ifreetype2/include ftsystem.c
|
|
||||||
cc -c -Ifreetype2/include ftinit.c
|
|
||||||
cc -c -Ifreetype2/include ftdebug.c
|
|
||||||
cc -c -Ifreetype2/include ftbase.c
|
|
||||||
etc.
|
|
||||||
|
|
||||||
You don't need to define the FT_FLAT_COMPILATION macro (as this was
|
|
||||||
required in previous releases of FreeType 2).
|
|
||||||
|
|
||||||
End of file
|
|
|
@ -33,6 +33,11 @@ LATEST CHANGES BETWEEN 2.1.4 and 2.1.3
|
||||||
- the CMap cache is now capable of managing UCS-4 character codes that
|
- the CMap cache is now capable of managing UCS-4 character codes that
|
||||||
are mapped through extended charmaps in recent TrueType/OpenType fonts
|
are mapped through extended charmaps in recent TrueType/OpenType fonts
|
||||||
|
|
||||||
|
- the cache sub-system now properly manages out-of-memory conditions,
|
||||||
|
instead of blindly reporting them to the caller. This means that it
|
||||||
|
will try to empty the cache before restarting its allocations to see
|
||||||
|
if that can help.
|
||||||
|
|
||||||
- the PFR driver didn't return the list of available embedded bitmaps
|
- the PFR driver didn't return the list of available embedded bitmaps
|
||||||
properly.
|
properly.
|
||||||
|
|
||||||
|
@ -72,6 +77,9 @@ LATEST CHANGES BETWEEN 2.1.4 and 2.1.3
|
||||||
with FreeType (i.e. comparing release/libtool/so numbers, and how
|
with FreeType (i.e. comparing release/libtool/so numbers, and how
|
||||||
to use them in Autoconf scripts)
|
to use them in Autoconf scripts)
|
||||||
|
|
||||||
|
- the installation documentation has been seriously revamped. Everything
|
||||||
|
is now in the "docs" directory.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
LATEST CHANGES BETWEEN 2.1.3 and 2.1.2
|
LATEST CHANGES BETWEEN 2.1.3 and 2.1.2
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,117 @@
|
||||||
|
How to customize the compilation of the library:
|
||||||
|
================================================
|
||||||
|
|
||||||
|
FreeType is highly customizable to fit various needs, and this document
|
||||||
|
details how it is possible to select options and components at compilation
|
||||||
|
time.
|
||||||
|
|
||||||
|
|
||||||
|
I. Configuration macros:
|
||||||
|
|
||||||
|
the file found in "include/freetype/config/ftoption.h" contains a list
|
||||||
|
of commented configuration macros that can be toggled by developers to
|
||||||
|
indicate which features to activate in their build of the library.
|
||||||
|
|
||||||
|
these options range from debug level to availability of certain
|
||||||
|
features, like native TrueType hinting through a bytecode interpreter.
|
||||||
|
|
||||||
|
we invite you to read this file for more information. You can change
|
||||||
|
the file's content to suit your needs, or override it with one of the
|
||||||
|
techniques described below..
|
||||||
|
|
||||||
|
|
||||||
|
II. Modules list:
|
||||||
|
|
||||||
|
the file found in "include/freetype/config/ftmodule.h" contains a list
|
||||||
|
of names corresponding to the modules / font drivers to be statically
|
||||||
|
compiled in the FreeType library during the build.
|
||||||
|
|
||||||
|
you can change it to suit your own preferences. Be aware that certain
|
||||||
|
modules depend on others, as described by the file "modules.txt" in
|
||||||
|
this directory.
|
||||||
|
|
||||||
|
you can modify the file's content to suit your needs, or override it
|
||||||
|
at compile time with one of the methods described below
|
||||||
|
|
||||||
|
|
||||||
|
III. System interface:
|
||||||
|
|
||||||
|
FreeType's default interface to the system (i.e. the parts that deal with
|
||||||
|
memory management and i/o streams) is located in "src/base/ftsystem.c".
|
||||||
|
|
||||||
|
the current implementation uses standard C library calls to manage
|
||||||
|
memory and read font files. It is however possible to write custom
|
||||||
|
implementations to suit specific systems.
|
||||||
|
|
||||||
|
to tell the GNU Make-based build system to use a custom system interface,
|
||||||
|
you'll need to define the environment variable FTSYS_SRC to point to
|
||||||
|
the relevant implementation, like in:
|
||||||
|
|
||||||
|
on Unix:
|
||||||
|
./configure <youroptions>
|
||||||
|
export FTSYS_SRC=foo/my_ftsystem.c
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
on Windows:
|
||||||
|
make setup <compiler>
|
||||||
|
set FTSYS_SRC=foo/my_ftsystem.c
|
||||||
|
make
|
||||||
|
|
||||||
|
|
||||||
|
IV. Overriding default configuration and module headers:
|
||||||
|
|
||||||
|
it is possible to over-ride the default configuration and module headers
|
||||||
|
without changing the original files. There are two ways to do that:
|
||||||
|
|
||||||
|
1. Using the C include path:
|
||||||
|
|
||||||
|
use the C include path to ensure that your own versions of the
|
||||||
|
files are used at compile time when the lines:
|
||||||
|
|
||||||
|
#include FT_CONFIG_OPTIONS_H
|
||||||
|
#include FT_CONFIG_MODULES_H
|
||||||
|
|
||||||
|
are compiled. Their default values being <freetype/config/ftoption.h>
|
||||||
|
and <freetype/config/ftmodule.h>, you can do something like:
|
||||||
|
|
||||||
|
custom/
|
||||||
|
freetype/
|
||||||
|
config/
|
||||||
|
ftoption.h => custom options header
|
||||||
|
ftmodule.h => custom modules list
|
||||||
|
|
||||||
|
include/ => normal FreeType 2 include
|
||||||
|
freetype/
|
||||||
|
...
|
||||||
|
|
||||||
|
then change the C include path to always give the path to "custom"
|
||||||
|
before the FreeType 2 "include"
|
||||||
|
|
||||||
|
|
||||||
|
2. Re-defining FT_CONFIG_OPTIONS_H and FT_CONFIG_MODULES_H
|
||||||
|
|
||||||
|
another way to do the same thing is to re-define the macros used
|
||||||
|
to name the configuration headers. To do so, you'll need a custom
|
||||||
|
"ft2build.h", whose content can be as simple as:
|
||||||
|
|
||||||
|
#ifndef __FT2_BUILD_GENERIC_H__
|
||||||
|
#define __FT2_BUILD_GENERIC_H__
|
||||||
|
|
||||||
|
#define FT_CONFIG_OPTIONS_H <custom/my-ftoption.h>
|
||||||
|
#define FT_CONFIG_MACROS_H <custom/my-ftmodule.h>
|
||||||
|
|
||||||
|
#include <freetype/config/ftheader.h>
|
||||||
|
|
||||||
|
#endif /* __FT2_BUILD_GENERIC_H__ */
|
||||||
|
|
||||||
|
place them in:
|
||||||
|
|
||||||
|
custom/
|
||||||
|
ft2build.h => custom version described above
|
||||||
|
my-ftoption.h => custom options header
|
||||||
|
my-ftmodule.h => custom modules list header
|
||||||
|
|
||||||
|
and change the C include path to ensure that "custom" is always placed
|
||||||
|
before the FT2 "include" during compilation.
|
||||||
|
|
|
@ -14,7 +14,7 @@ located in the file "ftoptions.h". The macros are:
|
||||||
#define this macro if you want to compile the FT_ERROR macro calls
|
#define this macro if you want to compile the FT_ERROR macro calls
|
||||||
used to print error messages during program execution. This will
|
used to print error messages during program execution. This will
|
||||||
not stop the program, but is very useful to spot invalid fonts
|
not stop the program, but is very useful to spot invalid fonts
|
||||||
during development and code wordarounds for them.
|
during development and code workarounds for them.
|
||||||
|
|
||||||
FT_DEBUG_LEVEL_TRACE
|
FT_DEBUG_LEVEL_TRACE
|
||||||
|
|
226
docs/INSTALL
226
docs/INSTALL
|
@ -1,185 +1,65 @@
|
||||||
In order to build the library, read the `BUILD' document in the `docs'
|
Welcome
|
||||||
directory. This is only a quick starter.
|
|
||||||
|
There are several ways to build the FreeType library, depending on your
|
||||||
|
system and the level of customization you need. Here's a short overview
|
||||||
|
of the documentation available:
|
||||||
|
|
||||||
|
I. Normal installation and upgrades:
|
||||||
|
|
||||||
|
1. Native TrueType Hinting:
|
||||||
|
|
||||||
|
Native TrueType hinting is disabled by default[1]. If you really need it,
|
||||||
|
read the file "TRUETYPE" for information.
|
||||||
|
|
||||||
|
|
||||||
|
2. Unix Systems (as well as Cygwin or MSys on Windows):
|
||||||
|
|
||||||
|
Please read *both* UPGRADE.UNX and INSTALL.UNX to install or upgrade
|
||||||
|
FreeType 2 on a Unix system. Note that you *will* need GNU Make, since
|
||||||
|
other make tools won't work (this includes BSD Make !!)
|
||||||
|
|
||||||
|
3. On VMS with the "mms" build tool:
|
||||||
|
|
||||||
|
see INSTALL.VMS for installation instructions on this platform
|
||||||
|
|
||||||
|
4. Other systems using GNU Make:
|
||||||
|
|
||||||
|
on non-Unix platforms, it's possible to build the library using
|
||||||
|
GNU Make utility. Note that *NO OTHER MAKE TOOL WILL WORK* !!
|
||||||
|
This methods supports several compilers on Windows, OS/2 and BeOS,
|
||||||
|
including Mingw, Visual C++, Borland C++, and more.
|
||||||
|
|
||||||
|
instructions are provided in the file "INSTALL.GNU"
|
||||||
|
|
||||||
|
|
||||||
I. Unix systems
|
5. With an IDE Project File (e.g. for Visual Studio or CodeWarrior):
|
||||||
---------------
|
|
||||||
|
we provide a small number of "project files" for various IDEs to
|
||||||
If you have GNU Make installed, simply type
|
automatically build the library as well. Note that these files are
|
||||||
|
not supported and sporadically maintained by FreeType developers,
|
||||||
./configure
|
so don't expect them to work in each release.
|
||||||
make
|
|
||||||
make install
|
to find them, have a look at the content of the "builds/<system>"
|
||||||
|
directory, where <system> stands for your OS or environment.
|
||||||
on the command line to configure, build and install FreeType on your
|
|
||||||
system. Note that the default installation path is "/usr/local".
|
|
||||||
|
|
||||||
Please read the file README.UNX, it contains _critical_ information
|
|
||||||
regarding the installation of FreeType on many Unix systems.
|
|
||||||
|
|
||||||
|
|
||||||
II. From the command line
|
6. From you own IDE, or own Makefiles:
|
||||||
-------------------------
|
|
||||||
|
If you want to create your own project file, follow the instructions
|
||||||
If you are not using Unix, there are two ways to quickly build
|
given in the "INSTALL.ANY" document of this directory.
|
||||||
FreeType 2 from the command line.
|
|
||||||
|
|
||||||
The first, and favorite one, is to use the "Jam" build tool. Jam is
|
|
||||||
a highly portable replacement for Make whose control files do not
|
|
||||||
depend on the current platform or compiler toolset.
|
|
||||||
|
|
||||||
For more information, please see:
|
|
||||||
|
|
||||||
http://www.freetype.org/jam/index.html
|
|
||||||
|
|
||||||
The second one is to use "GNU Make" (and NO OTHER MAKE TOOL).
|
|
||||||
|
|
||||||
|
|
||||||
1. Building FT2 with "Jam"
|
II. Custom builds of the library:
|
||||||
--------------------------
|
|
||||||
|
|
||||||
Once you've got *our version* of the Jam tool installed on your
|
Customizing the compilation of FreeType is easy, and allows you to select
|
||||||
system, simply go to the top-level FT2 directory, then type
|
only the components of the font engine that you really need. For more details
|
||||||
|
read the file "CUSTOMIZE"
|
||||||
"jam"
|
|
||||||
|
|
||||||
on the command line. This will build the library and place it in
|
|
||||||
the "objs" directory.
|
|
||||||
|
|
||||||
By default, a static library is built. On Unix systems, it is
|
|
||||||
possible to build a shared library through the "libtool" script.
|
|
||||||
You need to have libtool installed on your system, then re-define
|
|
||||||
a few environment variables before invoking Jam, as in
|
|
||||||
|
|
||||||
export CC="libtool --mode=compile cc"
|
|
||||||
export LINK="libtool --mode=link cc"
|
|
||||||
jam
|
|
||||||
|
|
||||||
In later releases of FT2, building shared libraries with Jam
|
|
||||||
should become automatic on Unix systems.
|
|
||||||
|
|
||||||
|
|
||||||
2. Building FT2 with "GNU Make"
|
--------------------------------------------------------------------
|
||||||
-------------------------------
|
|
||||||
|
|
||||||
You need to have GNU Make (version 3.78.1 or newer) installed on
|
[1] More details on: http://www.freetype.org/patents.html
|
||||||
your system to compile the library from the command line. This will
|
|
||||||
_NOT_ work with other make tools (including BSD make)!
|
|
||||||
|
|
||||||
[Well, this is not really correct. Recently, a perl implementation
|
End of file
|
||||||
of make called `makepp' has appeared which can also build FreeType 2
|
|
||||||
successfully on Unix platforms. See http://makepp.sourceforge.net
|
|
||||||
for more details.]
|
|
||||||
|
|
||||||
- Go to the `freetype2' directory.
|
|
||||||
|
|
||||||
- Unix (any C compiler should work):
|
|
||||||
|
|
||||||
- make setup (don't worry, this will invoke a configure script)
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
|
|
||||||
Alternatively, you can pass parameters to the configure script
|
|
||||||
within the CFG variable, as in:
|
|
||||||
|
|
||||||
- make setup CFG="--prefix=/usr"
|
|
||||||
- make
|
|
||||||
- make install
|
|
||||||
|
|
||||||
If the configure script isn't run, try to add `unix' as a target
|
|
||||||
on the command line, e.g.:
|
|
||||||
|
|
||||||
- make setup unix CFG="--prefix=/opt/experimental"
|
|
||||||
|
|
||||||
|
|
||||||
- Windows:
|
|
||||||
|
|
||||||
We provide a version of GNU Make for Win32 on the FreeType site.
|
|
||||||
See http://www.freetype.org/download.html for details.
|
|
||||||
|
|
||||||
- gcc (Mingw, _not_ CygWin):
|
|
||||||
|
|
||||||
- make setup
|
|
||||||
- make
|
|
||||||
|
|
||||||
|
|
||||||
- Visual C++:
|
|
||||||
|
|
||||||
- make setup visualc
|
|
||||||
- make
|
|
||||||
|
|
||||||
|
|
||||||
- other compilers:
|
|
||||||
|
|
||||||
- make setup bcc32 -> Borland C++ 32 bits
|
|
||||||
- make setup intelc -> Intel C++
|
|
||||||
- make setup watcom -> Watcom C++
|
|
||||||
- make setup lcc -> Win32-LCC
|
|
||||||
|
|
||||||
|
|
||||||
If you want to build FreeType 2 in another directory, you must set
|
|
||||||
two environment variables, `OJB_DIR' and `TOP_DIR'. The former
|
|
||||||
gives the directory where the object files and the library should be
|
|
||||||
created (this directory must exist), the latter the top directory of
|
|
||||||
the FreeType 2 source tree. Example:
|
|
||||||
|
|
||||||
OBJ_DIR=~/freetype2.compiled TOP_DIR=~/freetype2 \
|
|
||||||
make -f$TOP_DIR/Makefile setup ansi
|
|
||||||
OBJ_DIR=~/freetype2.compiled TOP_DIR=~/freetype2 \
|
|
||||||
make -f$TOP_DIR/Makefile
|
|
||||||
|
|
||||||
On Unix boxes, calling `configure' from the build directory is
|
|
||||||
sufficient; it will build a small Makefile which calls the
|
|
||||||
FreeType 2 Makefile with the necessary parameters.
|
|
||||||
|
|
||||||
|
|
||||||
III. In your own environment (IDE)
|
|
||||||
----------------------------------
|
|
||||||
|
|
||||||
You need to add the directories "freetype2/include" to your include
|
|
||||||
path when compiling the library.
|
|
||||||
|
|
||||||
FreeType 2 is made of several components; each one of them is
|
|
||||||
located in a subdirectory of "freetype2/src". For example,
|
|
||||||
`freetype2/src/truetype/' contains the TrueType font driver.
|
|
||||||
|
|
||||||
DO NOT COMPILE ALL C FILES! Rather, compile the following ones:
|
|
||||||
|
|
||||||
-- base components (required)
|
|
||||||
|
|
||||||
src/base/ftsystem.c
|
|
||||||
src/base/ftinit.c
|
|
||||||
src/base/ftdebug.c
|
|
||||||
src/base/ftbase.c
|
|
||||||
src/base/ftglyph.c
|
|
||||||
src/base/ftbbox.c
|
|
||||||
src/base/ftmm.c
|
|
||||||
|
|
||||||
src/base/ftmac.c -- only on the Macintosh
|
|
||||||
|
|
||||||
-- other components are optional
|
|
||||||
|
|
||||||
src/autohint/autohint.c -- auto hinting module
|
|
||||||
src/cache/ftcache.c -- cache sub-system (in beta)
|
|
||||||
src/sfnt/sfnt.c -- SFNT files support
|
|
||||||
(TrueType & OpenType)
|
|
||||||
src/cff/cff.c -- CFF/OpenType font driver
|
|
||||||
src/psnames/psnames.c -- Postscript glyph names support
|
|
||||||
src/psaux/psaux.c -- Postscript Type 1 parsing
|
|
||||||
src/truetype/truetype.c -- TrueType font driver
|
|
||||||
src/type1/type1.c -- Type 1 font driver
|
|
||||||
src/cid/type1cid.c -- Type 1 CID-keyed font driver
|
|
||||||
src/winfonts/winfonts.c -- Windows FONT / FNT font driver
|
|
||||||
|
|
||||||
Note:
|
|
||||||
|
|
||||||
`truetype.c' needs `sfnt.c' and `psnames.c'
|
|
||||||
`type1.c' needs `psaux.c' and `psnames.c'
|
|
||||||
`type1cid.c' needs `psaux.c' and `psnames.c'
|
|
||||||
`cff.c' needs `sfnt.c', `psaux.c', and `psnames.c'
|
|
||||||
|
|
||||||
etc.
|
|
||||||
|
|
||||||
For more information, please consult "docs/BUILD".
|
|
||||||
|
|
||||||
--- end of INSTALL --
|
|
|
@ -0,0 +1,96 @@
|
||||||
|
Instructions on how to build FreeType with your own build tool:
|
||||||
|
|
||||||
|
see the file "CUSTOMIZE" to learn how to customize FreeType to
|
||||||
|
specific environments.
|
||||||
|
|
||||||
|
follow these simple steps:
|
||||||
|
|
||||||
|
I. Normal way:
|
||||||
|
--------------
|
||||||
|
|
||||||
|
* DISABLE PRE-COMPILED HEADERS ! This is very important for Visual
|
||||||
|
C++, because FreeType uses lines like:
|
||||||
|
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
|
||||||
|
which are not correctly supported by this compiler, while being
|
||||||
|
ISO C compliant !!
|
||||||
|
|
||||||
|
* You need to add the directories "freetype2/include" to your include
|
||||||
|
path when compiling the library.
|
||||||
|
|
||||||
|
* FreeType 2 is made of several components; each one of them is
|
||||||
|
located in a subdirectory of "freetype2/src". For example,
|
||||||
|
'freetype2/src/truetype/' contains the TrueType font driver.
|
||||||
|
|
||||||
|
* DO NOT COMPILE ALL C FILES! Rather, compile the following ones:
|
||||||
|
|
||||||
|
-- base components (required)
|
||||||
|
|
||||||
|
src/base/ftsystem.c
|
||||||
|
src/base/ftinit.c
|
||||||
|
src/base/ftdebug.c
|
||||||
|
src/base/ftbase.c
|
||||||
|
src/base/ftglyph.c
|
||||||
|
src/base/ftbbox.c
|
||||||
|
src/base/ftmm.c
|
||||||
|
src/base/ftpfr.c -- optional, see <freetype/ftpfr.h>
|
||||||
|
src/base/ftbdf.c -- optional, see <freetype/ftbdf.h>
|
||||||
|
src/base/ftwinfnt.c -- optional, see <freetype/ftwinfnt.h>
|
||||||
|
|
||||||
|
src/base/ftmac.c -- only on the Macintosh
|
||||||
|
|
||||||
|
-- other components are optional
|
||||||
|
|
||||||
|
src/autohint/autohint.c -- auto hinting module
|
||||||
|
src/cache/ftcache.c -- cache sub-system (in beta)
|
||||||
|
src/sfnt/sfnt.c -- SFNT files support
|
||||||
|
(TrueType & OpenType)
|
||||||
|
src/cff/cff.c -- CFF/OpenType font driver
|
||||||
|
src/pfr/pfr.c -- PFR/TrueDoc font driver
|
||||||
|
src/bdf/bdf.c -- BDF font driver
|
||||||
|
src/pcf/pcf.c -- PCF font driver
|
||||||
|
src/psnames/psnames.c -- Postscript glyph names support
|
||||||
|
src/psaux/psaux.c -- Postscript Type 1 parsing
|
||||||
|
src/truetype/truetype.c -- TrueType font driver
|
||||||
|
src/type1/type1.c -- Type 1 font driver
|
||||||
|
src/cid/type1cid.c -- Type 1 CID-keyed font driver
|
||||||
|
src/winfonts/winfonts.c -- Windows FONT / FNT font driver
|
||||||
|
src/raster1/raster1.c -- monochrome rasterizer
|
||||||
|
src/smooth/smooth.c -- anti-aliasing rasterizer
|
||||||
|
|
||||||
|
Note:
|
||||||
|
|
||||||
|
`truetype.c' needs `sfnt.c' and `psnames.c'
|
||||||
|
`type1.c' needs `psaux.c' and `psnames.c'
|
||||||
|
`type1cid.c' needs `psaux.c' and `psnames.c'
|
||||||
|
`cff.c' needs `sfnt.c', `psaux.c', and `psnames.c'
|
||||||
|
|
||||||
|
that should be it ! in case of problems, see the archives of
|
||||||
|
the FreeType development mailing list.
|
||||||
|
|
||||||
|
|
||||||
|
II. Support for flat-directory compilation
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
It is possible to put all FreeType 2 source files into a single
|
||||||
|
directory, with the *exception* of the `include' hierarchy.
|
||||||
|
|
||||||
|
1. Copy all files in current directory:
|
||||||
|
|
||||||
|
cp freetype2/src/base/*.[hc] .
|
||||||
|
cp freetype2/src/raster1/*.[hc] .
|
||||||
|
cp freetype2/src/smooth/*.[hc] .
|
||||||
|
etc.
|
||||||
|
|
||||||
|
2. Compile sources:
|
||||||
|
|
||||||
|
cc -c -Ifreetype2/include ftsystem.c
|
||||||
|
cc -c -Ifreetype2/include ftinit.c
|
||||||
|
cc -c -Ifreetype2/include ftdebug.c
|
||||||
|
cc -c -Ifreetype2/include ftbase.c
|
||||||
|
etc.
|
||||||
|
|
||||||
|
You don't need to define the FT_FLAT_COMPILATION macro (as this was
|
||||||
|
required in previous releases of FreeType 2).
|
||||||
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
This document contains instructions on how to build the FreeType library
|
||||||
|
on non-Unix systems with the help of GNU Make. Note that if you're running
|
||||||
|
Cygwin or MSys in Windows, you should follow the instructions of INSTALL.UNX
|
||||||
|
instead.
|
||||||
|
|
||||||
|
|
||||||
|
FreeType 2 includes a powerful and flexible build system that allows
|
||||||
|
you to easily compile it on a great variety of platforms from the
|
||||||
|
command line. To do so, just follow these simple instructions:
|
||||||
|
|
||||||
|
a. Install GNU Make
|
||||||
|
|
||||||
|
Because GNU Make is the only Make tool supported to compile
|
||||||
|
FreeType 2, you should install it on your machine.
|
||||||
|
|
||||||
|
The FreeType 2 build system relies on many features special to GNU
|
||||||
|
Make -- trying to build the library with any other Make tool will
|
||||||
|
*fail*.
|
||||||
|
|
||||||
|
NEARLY ALL OTHER MAKE TOOLS WILL FAIL, INCLUDING "BSD MAKE", SO
|
||||||
|
REALLY INSTALL A RECENT VERSION OF GNU MAKE ON YOUR SYSTEM!
|
||||||
|
|
||||||
|
Make sure that you are invoking GNU Make from the command line, by
|
||||||
|
typing something like:
|
||||||
|
|
||||||
|
make -v
|
||||||
|
|
||||||
|
to display its version number.
|
||||||
|
|
||||||
|
VERSION 3.78.1 OR NEWER IS NEEDED!
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
b. Invoke 'make'
|
||||||
|
|
||||||
|
Go to the root directory of FreeType 2, then simply invoke GNU
|
||||||
|
Make from the command line. This will launch the FreeType 2 host
|
||||||
|
platform detection routines. A summary will be displayed, for
|
||||||
|
example, on Win32:
|
||||||
|
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
FreeType build system -- automatic system detection
|
||||||
|
|
||||||
|
The following settings are used:
|
||||||
|
|
||||||
|
platform win32
|
||||||
|
compiler gcc
|
||||||
|
configuration directory ./builds/win32
|
||||||
|
configuration rules ./builds/win32/w32-gcc.mk
|
||||||
|
|
||||||
|
If this does not correspond to your system or settings please
|
||||||
|
remove the file 'config.mk' from this directory then read the
|
||||||
|
INSTALL file for help.
|
||||||
|
|
||||||
|
Otherwise, simply type 'make' again to build the library.
|
||||||
|
=============================================================
|
||||||
|
|
||||||
|
|
||||||
|
If the detected settings correspond to your platform and compiler,
|
||||||
|
skip to step e. Note that if your platform is completely alien to
|
||||||
|
the build system, the detected platform will be 'ansi'.
|
||||||
|
|
||||||
|
|
||||||
|
c. Configure the build system for a different compiler
|
||||||
|
|
||||||
|
If the build system correctly detected your platform, but you want
|
||||||
|
to use a different compiler than the one specified in the summary
|
||||||
|
(for most platforms, gcc is the defaut compiler), invoke GNU Make
|
||||||
|
with
|
||||||
|
|
||||||
|
make setup <compiler>
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
to use Visual C++ on Win32, type: "make setup visualc"
|
||||||
|
to use Borland C++ on Win32, type "make setup bcc32"
|
||||||
|
to use Watcom C++ on Win32, type "make setup watcom"
|
||||||
|
to use Intel C++ on Win32, type "make setup intelc"
|
||||||
|
to use LCC-Win32 on Win32, type: "make setup lcc"
|
||||||
|
to use Watcom C++ on OS/2, type "make setup watcom"
|
||||||
|
to use VisualAge C++ on OS/2, type "make setup visualage"
|
||||||
|
|
||||||
|
The <compiler> name to use is platform-dependent. The list of
|
||||||
|
available compilers for your system is available in the file
|
||||||
|
`builds/<system>/detect.mk'
|
||||||
|
|
||||||
|
If you are satisfied by the new configuration summary, skip to
|
||||||
|
step e.
|
||||||
|
|
||||||
|
d. Configure the build system for an unknown platform/compiler
|
||||||
|
|
||||||
|
The auto-detection/setup phase of the build system copies a file
|
||||||
|
to the current directory under the name `config.mk'.
|
||||||
|
|
||||||
|
For example, on OS/2+gcc, it would simply copy
|
||||||
|
`builds/os2/os2-gcc.mk' to `./config.mk'.
|
||||||
|
|
||||||
|
If for some reason your platform isn't correctly detected, copy
|
||||||
|
manually the configuration sub-makefile to `./config.mk' and go to
|
||||||
|
step e.
|
||||||
|
|
||||||
|
Note that this file is a sub-Makefile used to specify Make
|
||||||
|
variables for compiler and linker invocation during the build.
|
||||||
|
You can easily create your own version from one of the existing
|
||||||
|
configuration files, then copy it to the current directory under
|
||||||
|
the name `./config.mk'.
|
||||||
|
|
||||||
|
e. Build the library
|
||||||
|
|
||||||
|
The auto-detection/setup phase should have copied a file in the
|
||||||
|
current directory, called `./config.mk'. This file contains
|
||||||
|
definitions of various Make variables used to invoke the compiler
|
||||||
|
and linker during the build.
|
||||||
|
|
||||||
|
To launch the build, simply invoke GNU Make again: The top
|
||||||
|
Makefile will detect the configuration file and run the build with
|
||||||
|
it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Final note:
|
||||||
|
|
||||||
|
the build system builds a statically linked library of the font engine
|
||||||
|
in the "objs" directory. It does _not_ support the build of DLLs on
|
||||||
|
Windows and OS/2, if you need these, you'll have to either use
|
||||||
|
a IDE-specific project file, or follow the instructions in
|
||||||
|
"INSTALL.ANY" to create your own Makefiles.
|
|
@ -0,0 +1,181 @@
|
||||||
|
This document contains instructions on how to build the FreeType library
|
||||||
|
on Unix systems. This also works for emulations like Cygwin or MSys on
|
||||||
|
Win32:
|
||||||
|
|
||||||
|
|
||||||
|
I. Ensure that you are using GNU Make
|
||||||
|
-------------------------------------
|
||||||
|
|
||||||
|
The FreeType build system _exclusively_ works with GNU Make. You
|
||||||
|
will not be able to compile the library with the instructions
|
||||||
|
below using any other alternative (including BSD Make).
|
||||||
|
|
||||||
|
Trying to compile the library with a different Make tool will
|
||||||
|
print a message like:
|
||||||
|
|
||||||
|
Sorry, GNU make is required to build FreeType2.
|
||||||
|
|
||||||
|
and the build process will be aborted. If this happens, install
|
||||||
|
GNU Make on your system, and use the GNUMAKE environment variable
|
||||||
|
to name it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IV. Build and install the library
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
The following should work on all Unix systems where the 'make'
|
||||||
|
command invokes GNU Make:
|
||||||
|
|
||||||
|
./configure --prefix=<yourprefix>
|
||||||
|
make
|
||||||
|
make install (as root)
|
||||||
|
|
||||||
|
where "<yourprefix>" must be replaced by the prefix returned by
|
||||||
|
the "freetype-config" command.
|
||||||
|
|
||||||
|
When using a different command to invoke GNU Make, use the GNUMAKE
|
||||||
|
variable. For example, if `gmake' is the command to use on your
|
||||||
|
system, do something like:
|
||||||
|
|
||||||
|
GNUMAKE=gmake ./configure --prefix=<yourprefix>
|
||||||
|
gmake
|
||||||
|
gmake install (as root)
|
||||||
|
|
||||||
|
If this still doesn't work, something's rotten on your system(
|
||||||
|
(e.g. you're using a very old version of GNU Make)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
I. Unix systems
|
||||||
|
---------------
|
||||||
|
|
||||||
|
If you have GNU Make installed, simply type
|
||||||
|
|
||||||
|
./configure
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
|
on the command line to configure, build and install FreeType on your
|
||||||
|
system. Note that the default installation path is "/usr/local".
|
||||||
|
|
||||||
|
Please read the file README.UNX, it contains _critical_ information
|
||||||
|
regarding the installation of FreeType on many Unix systems.
|
||||||
|
|
||||||
|
|
||||||
|
II. From the command line
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
If you are not using Unix, there are two ways to quickly build
|
||||||
|
FreeType 2 from the command line.
|
||||||
|
|
||||||
|
The first, and favorite one, is to use the "Jam" build tool. Jam is
|
||||||
|
a highly portable replacement for Make whose control files do not
|
||||||
|
depend on the current platform or compiler toolset.
|
||||||
|
|
||||||
|
For more information, please see:
|
||||||
|
|
||||||
|
http://www.freetype.org/jam/index.html
|
||||||
|
|
||||||
|
The second one is to use "GNU Make" (and NO OTHER MAKE TOOL).
|
||||||
|
|
||||||
|
|
||||||
|
1. Building FT2 with "Jam"
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Once you've got *our version* of the Jam tool installed on your
|
||||||
|
system, simply go to the top-level FT2 directory, then type
|
||||||
|
|
||||||
|
"jam"
|
||||||
|
|
||||||
|
on the command line. This will build the library and place it in
|
||||||
|
the "objs" directory.
|
||||||
|
|
||||||
|
By default, a static library is built. On Unix systems, it is
|
||||||
|
possible to build a shared library through the "libtool" script.
|
||||||
|
You need to have libtool installed on your system, then re-define
|
||||||
|
a few environment variables before invoking Jam, as in
|
||||||
|
|
||||||
|
export CC="libtool --mode=compile cc"
|
||||||
|
export LINK="libtool --mode=link cc"
|
||||||
|
jam
|
||||||
|
|
||||||
|
In later releases of FT2, building shared libraries with Jam
|
||||||
|
should become automatic on Unix systems.
|
||||||
|
|
||||||
|
|
||||||
|
2. Building FT2 with "GNU Make"
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
You need to have GNU Make (version 3.78.1 or newer) installed on
|
||||||
|
your system to compile the library from the command line. This will
|
||||||
|
_NOT_ work with other make tools (including BSD make)!
|
||||||
|
|
||||||
|
[Well, this is not really correct. Recently, a perl implementation
|
||||||
|
of make called `makepp' has appeared which can also build FreeType 2
|
||||||
|
successfully on Unix platforms. See http://makepp.sourceforge.net
|
||||||
|
for more details.]
|
||||||
|
|
||||||
|
- Go to the `freetype2' directory.
|
||||||
|
|
||||||
|
- Unix (any C compiler should work):
|
||||||
|
|
||||||
|
- make setup (don't worry, this will invoke a configure script)
|
||||||
|
- make
|
||||||
|
- make install
|
||||||
|
|
||||||
|
Alternatively, you can pass parameters to the configure script
|
||||||
|
within the CFG variable, as in:
|
||||||
|
|
||||||
|
- make setup CFG="--prefix=/usr"
|
||||||
|
- make
|
||||||
|
- make install
|
||||||
|
|
||||||
|
If the configure script isn't run, try to add `unix' as a target
|
||||||
|
on the command line, e.g.:
|
||||||
|
|
||||||
|
- make setup unix CFG="--prefix=/opt/experimental"
|
||||||
|
|
||||||
|
|
||||||
|
- Windows:
|
||||||
|
|
||||||
|
We provide a version of GNU Make for Win32 on the FreeType site.
|
||||||
|
See http://www.freetype.org/download.html for details.
|
||||||
|
|
||||||
|
- gcc (Mingw, _not_ CygWin):
|
||||||
|
|
||||||
|
- make setup
|
||||||
|
- make
|
||||||
|
|
||||||
|
|
||||||
|
- Visual C++:
|
||||||
|
|
||||||
|
- make setup visualc
|
||||||
|
- make
|
||||||
|
|
||||||
|
|
||||||
|
- other compilers:
|
||||||
|
|
||||||
|
- make setup bcc32 -> Borland C++ 32 bits
|
||||||
|
- make setup intelc -> Intel C++
|
||||||
|
- make setup watcom -> Watcom C++
|
||||||
|
- make setup lcc -> Win32-LCC
|
||||||
|
|
||||||
|
|
||||||
|
If you want to build FreeType 2 in another directory, you must set
|
||||||
|
two environment variables, `OJB_DIR' and `TOP_DIR'. The former
|
||||||
|
gives the directory where the object files and the library should be
|
||||||
|
created (this directory must exist), the latter the top directory of
|
||||||
|
the FreeType 2 source tree. Example:
|
||||||
|
|
||||||
|
OBJ_DIR=~/freetype2.compiled TOP_DIR=~/freetype2 \
|
||||||
|
make -f$TOP_DIR/Makefile setup ansi
|
||||||
|
OBJ_DIR=~/freetype2.compiled TOP_DIR=~/freetype2 \
|
||||||
|
make -f$TOP_DIR/Makefile
|
||||||
|
|
||||||
|
On Unix boxes, calling `configure' from the build directory is
|
||||||
|
sufficient; it will build a small Makefile which calls the
|
||||||
|
FreeType 2 Makefile with the necessary parameters.
|
||||||
|
|
||||||
|
|
||||||
|
--- end of INSTALL --
|
|
@ -0,0 +1,23 @@
|
||||||
|
How to enable the TrueType native hinter if you need it
|
||||||
|
--------------------------------------------------------
|
||||||
|
|
||||||
|
The TrueType bytecode interpreter is disabled in all public
|
||||||
|
releases of the FreeType packages for patents reasons (see
|
||||||
|
http://www.freetype.org/patents.html for more details).
|
||||||
|
|
||||||
|
However, many Linux distributions do enable the interpreter in the
|
||||||
|
FreeType packages (DEB/RPM/etc.) they produce for their platforms.
|
||||||
|
If you are using TrueType fonts on your system, you most probably
|
||||||
|
want to enable it manually by doing the following:
|
||||||
|
|
||||||
|
- open the file "include/freetype/config/ftoption.h"
|
||||||
|
|
||||||
|
- locate a line that says:
|
||||||
|
|
||||||
|
#undef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||||
|
|
||||||
|
- change it to:
|
||||||
|
|
||||||
|
#define TT_CONFIG_OPTION_BYTECODE_INTERPRETER
|
||||||
|
|
||||||
|
of course, this must be done _before_ compiling the library
|
|
@ -0,0 +1,124 @@
|
||||||
|
|
||||||
|
SPECIAL NOTE FOR UNIX USERS
|
||||||
|
===========================
|
||||||
|
|
||||||
|
If you are installing this release of FreeType on a system that
|
||||||
|
already uses release 2.0.5 (or even an older version), you have to
|
||||||
|
perform a few special steps to ensure that everything goes well.
|
||||||
|
|
||||||
|
|
||||||
|
I. Enable the TrueType bytecode hinter if you need it
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
See the instructions in the file "TRUETYPE" of this directory.
|
||||||
|
|
||||||
|
Note that FreeType supports TrueType fonts without the bytecode
|
||||||
|
interpreter through its auto-hinter, which now generate relatively good
|
||||||
|
results with most fonts.
|
||||||
|
|
||||||
|
|
||||||
|
II. Determine the correct installation path
|
||||||
|
--------------------------------------------
|
||||||
|
|
||||||
|
By default, the source package will install the library in
|
||||||
|
"/usr/local". However, many Unix distributions now install the
|
||||||
|
library in "/usr", since FreeType is becoming a critical system
|
||||||
|
component.
|
||||||
|
|
||||||
|
If FreeType is already installed on your system, type
|
||||||
|
|
||||||
|
freetype-config --prefix
|
||||||
|
|
||||||
|
on the command line. This should return the installation path to
|
||||||
|
use below (e.g. "/usr" or "/usr/local"). Otherwise, simply use
|
||||||
|
"/usr" (or what you think is adequate for your installation).
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
III. Ensure that you are using GNU Make
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
The FreeType build system _exclusively_ works with GNU Make. You
|
||||||
|
will not be able to compile the library with the instructions
|
||||||
|
below using any other alternative (including BSD Make).
|
||||||
|
|
||||||
|
Trying to compile the library with a different Make tool will
|
||||||
|
print a message like:
|
||||||
|
|
||||||
|
Sorry, GNU make is required to build FreeType2.
|
||||||
|
|
||||||
|
and the build process will be aborted. If this happens, install
|
||||||
|
GNU Make on your system, and use the GNUMAKE environment variable
|
||||||
|
to name it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
IV. Build and install the library
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
The following should work on all Unix systems where the `make'
|
||||||
|
command invokes GNU Make:
|
||||||
|
|
||||||
|
./configure --prefix=<yourprefix>
|
||||||
|
make
|
||||||
|
make install (as root)
|
||||||
|
|
||||||
|
where "<yourprefix>" must be replaced by the prefix returned by
|
||||||
|
the "freetype-config" command.
|
||||||
|
|
||||||
|
When using a different command to invoke GNU Make, use the GNUMAKE
|
||||||
|
variable. For example, if `gmake' is the command to use on your
|
||||||
|
system, do something like:
|
||||||
|
|
||||||
|
GNUMAKE=gmake ./configure --prefix=<yourprefix>
|
||||||
|
gmake
|
||||||
|
gmake install (as root)
|
||||||
|
|
||||||
|
If this still doesn't work, read the detailed compilation
|
||||||
|
procedure available in the file "docs/BUILD" for troubleshooting.
|
||||||
|
|
||||||
|
|
||||||
|
V. Take care of XFree86 version 4
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Certain recent Linux distributions will install _several_ versions
|
||||||
|
of FreeType on your system. For example, on a fresh Mandrake 8.1
|
||||||
|
system, you can find the following files:
|
||||||
|
|
||||||
|
/usr/lib/libfreetype.so which links to
|
||||||
|
/usr/lib/libfreetype.6.1.0.so
|
||||||
|
|
||||||
|
and
|
||||||
|
|
||||||
|
/usr/X11R6/lib/libfreetype.so which links to
|
||||||
|
/usr/X11R6/lib/libfreetype.6.0.so
|
||||||
|
|
||||||
|
Note that these files correspond to two distinct versions of the
|
||||||
|
library! It seems that this surprising issue is due to the
|
||||||
|
install scripts of recent XFree86 servers (from 4.1.0) which
|
||||||
|
irremediably install their own (dated) version of the library in
|
||||||
|
"/usr/X11R6/lib".
|
||||||
|
|
||||||
|
In certain _rare_ cases you may experience minor problems if you
|
||||||
|
install this release of the library in "/usr" only, namely, that
|
||||||
|
certain applications will not benefit from the bug fixes and
|
||||||
|
rendering improvements you'd expect.
|
||||||
|
|
||||||
|
There are two good ways to deal with this situation:
|
||||||
|
|
||||||
|
- Install the library _twice_, in "/usr" and in "/usr/X11R6"
|
||||||
|
(you have to do that each time you install a new FreeType
|
||||||
|
release though).
|
||||||
|
|
||||||
|
- Change the link in /usr/X11R6/lib/libfreetype.so to point to
|
||||||
|
|
||||||
|
/usr/lib/libfreetype.so,
|
||||||
|
|
||||||
|
and get rid of
|
||||||
|
|
||||||
|
/usr/X11R6/lib/libfreetype.6.0.so
|
||||||
|
|
||||||
|
The FreeType Team is not responsible for this problem, so please
|
||||||
|
contact either the XFree86 development team or your Linux
|
||||||
|
distributor to help clear this issue in case the information given
|
||||||
|
here doesn't help.
|
|
@ -1,11 +1,28 @@
|
||||||
|
|
||||||
FreeType comes with two licenses from which you can choose the one which
|
The FreeType 2 font engine is copyrighted work, and cannot be
|
||||||
fits your needs best:
|
used legally without a software license. In order to make this
|
||||||
|
project usable to a vast majority of developers, we distribute it
|
||||||
|
under two dual licenses.
|
||||||
|
|
||||||
. The FreeType License, in file `docs/FTL.txt'.
|
What this means is that *you* must choose *one* license among those
|
||||||
|
described below, then obey all its terms and conditions when using
|
||||||
|
FreeType 2 in any of your projects or products:
|
||||||
|
|
||||||
. The GNU General Public License, in file `docs/GPL.txt'.
|
|
||||||
|
|
||||||
The contributed PCF driver comes with a license similar to that of X Window
|
- The FreeType License, found in the file "FTL.TXT", which is
|
||||||
System which is compatible to the above two licenses (see file
|
an BSD-style open-source license *with* an advertising
|
||||||
src/pcf/readme).
|
clause that forces you to explicitely cite the
|
||||||
|
FreeType project in your product's documentation. All
|
||||||
|
details are in the license file
|
||||||
|
|
||||||
|
|
||||||
|
- The GNU General Public License, found in "GPL.TXT", which is
|
||||||
|
the traditionnal and "viral" GPL license, that
|
||||||
|
forces you to redistribute the _complete_ sources of all
|
||||||
|
your products that simply use FreeType 2.
|
||||||
|
|
||||||
|
|
||||||
|
Note that the contributed PCF driver comes with a license similar to
|
||||||
|
that of X Window System which is compatible to the above two
|
||||||
|
licenses (see file src/pcf/readme).
|
||||||
|
|
||||||
|
|
|
@ -536,6 +536,30 @@ FT_BEGIN_HEADER
|
||||||
FT_BASE( void )
|
FT_BASE( void )
|
||||||
FT_Done_GlyphSlot( FT_GlyphSlot slot );
|
FT_Done_GlyphSlot( FT_GlyphSlot slot );
|
||||||
|
|
||||||
|
/* */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* free the bitmap of a given glyphslot when needed
|
||||||
|
* (i.e. only when it was allocated with ft_glyphslot_alloc_bitmap)
|
||||||
|
*/
|
||||||
|
FT_BASE( void )
|
||||||
|
ft_glyphslot_free_bitmap( FT_GlyphSlot slot );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* allocate a new bitmap buffer in a glyph slot
|
||||||
|
*/
|
||||||
|
FT_BASE( FT_Error )
|
||||||
|
ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot,
|
||||||
|
FT_ULong size );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* set the bitmap buffer in a glyph slot to a given pointer.
|
||||||
|
* the buffer will not be freed by a later call to ft_glyphslot_free_bitmap
|
||||||
|
*/
|
||||||
|
FT_BASE( void )
|
||||||
|
ft_glyphslot_set_bitmap( FT_GlyphSlot slot,
|
||||||
|
FT_Pointer buffer );
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
/*************************************************************************/
|
/*************************************************************************/
|
||||||
|
|
|
@ -198,19 +198,59 @@
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FT_BASE_DEF( void )
|
||||||
|
ft_glyphslot_free_bitmap( FT_GlyphSlot slot )
|
||||||
|
{
|
||||||
|
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
||||||
|
{
|
||||||
|
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
||||||
|
|
||||||
|
|
||||||
|
FT_FREE( slot->bitmap.buffer );
|
||||||
|
slot->flags &= ~FT_GLYPH_OWN_BITMAP;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* assume that the bitmap buffer was stolen or not */
|
||||||
|
/* allocated from the heap */
|
||||||
|
slot->bitmap.buffer = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_BASE_DEF( void )
|
||||||
|
ft_glyphslot_set_bitmap( FT_GlyphSlot slot,
|
||||||
|
FT_Pointer buffer )
|
||||||
|
{
|
||||||
|
ft_glyphslot_free_bitmap( slot );
|
||||||
|
|
||||||
|
slot->bitmap.buffer = buffer;
|
||||||
|
|
||||||
|
FT_ASSERT( (slot->flags & FT_GLYPH_OWN_BITMAP) == 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
FT_BASE_DEF( FT_Error )
|
||||||
|
ft_glyphslot_alloc_bitmap( FT_GlyphSlot slot,
|
||||||
|
FT_ULong size )
|
||||||
|
{
|
||||||
|
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
||||||
|
|
||||||
|
|
||||||
|
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
||||||
|
FT_FREE( slot->bitmap.buffer );
|
||||||
|
else
|
||||||
|
slot->flags |= FT_GLYPH_OWN_BITMAP;
|
||||||
|
|
||||||
|
return FT_MEM_ALLOC( slot->bitmap.buffer, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ft_glyphslot_clear( FT_GlyphSlot slot )
|
ft_glyphslot_clear( FT_GlyphSlot slot )
|
||||||
{
|
{
|
||||||
/* free bitmap if needed */
|
/* free bitmap if needed */
|
||||||
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
ft_glyphslot_free_bitmap( slot );
|
||||||
{
|
|
||||||
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
|
||||||
|
|
||||||
|
|
||||||
FT_FREE( slot->bitmap.buffer );
|
|
||||||
slot->flags &= ~FT_GLYPH_OWN_BITMAP;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* clear all public fields in the glyph slot */
|
/* clear all public fields in the glyph slot */
|
||||||
FT_ZERO( &slot->metrics );
|
FT_ZERO( &slot->metrics );
|
||||||
|
@ -248,8 +288,7 @@
|
||||||
clazz->done_slot( slot );
|
clazz->done_slot( slot );
|
||||||
|
|
||||||
/* free bitmap buffer if needed */
|
/* free bitmap buffer if needed */
|
||||||
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
ft_glyphslot_free_bitmap( slot );
|
||||||
FT_FREE( slot->bitmap.buffer );
|
|
||||||
|
|
||||||
/* free glyph loader */
|
/* free glyph loader */
|
||||||
if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
||||||
|
|
|
@ -489,8 +489,6 @@ THE SOFTWARE.
|
||||||
int i, j, count;
|
int i, j, count;
|
||||||
unsigned char *p, *pp;
|
unsigned char *p, *pp;
|
||||||
|
|
||||||
FT_Memory memory = face->bdffont->memory;
|
|
||||||
|
|
||||||
FT_UNUSED( load_flags );
|
FT_UNUSED( load_flags );
|
||||||
|
|
||||||
|
|
||||||
|
@ -514,9 +512,9 @@ THE SOFTWARE.
|
||||||
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
||||||
bitmap->pitch = glyph.bpr;
|
bitmap->pitch = glyph.bpr;
|
||||||
|
|
||||||
if ( FT_NEW_ARRAY( bitmap->buffer, glyph.bytes ) )
|
/* note: we don't allocate a new array to hold the bitmap, we */
|
||||||
goto Exit;
|
/* can simply point to it */
|
||||||
FT_MEM_COPY( bitmap->buffer, glyph.bitmap, glyph.bytes );
|
ft_glyphslot_set_bitmap( slot, glyph.bitmap );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -524,7 +522,8 @@ THE SOFTWARE.
|
||||||
bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
|
bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
|
||||||
bitmap->pitch = bitmap->width;
|
bitmap->pitch = bitmap->width;
|
||||||
|
|
||||||
if ( FT_NEW_ARRAY( bitmap->buffer, bitmap->rows * bitmap->pitch ) )
|
error = ft_glyphslot_alloc_bitmap( slot, bitmap->rows * bitmap->pitch );
|
||||||
|
if ( error )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
|
|
||||||
switch ( bpp )
|
switch ( bpp )
|
||||||
|
@ -625,7 +624,6 @@ THE SOFTWARE.
|
||||||
|
|
||||||
slot->linearHoriAdvance = (FT_Fixed)glyph.dwidth << 16;
|
slot->linearHoriAdvance = (FT_Fixed)glyph.dwidth << 16;
|
||||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
|
||||||
|
|
||||||
Exit:
|
Exit:
|
||||||
return error;
|
return error;
|
||||||
|
|
|
@ -236,7 +236,7 @@
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
FT_ASSERT( list->nodes > 0 );
|
FT_ASSERT( list->num_nodes > 0 );
|
||||||
|
|
||||||
while ( node->next )
|
while ( node->next )
|
||||||
{
|
{
|
||||||
|
|
|
@ -355,7 +355,6 @@ THE SOFTWARE.
|
||||||
PCF_Face face = (PCF_Face)FT_SIZE_FACE( size );
|
PCF_Face face = (PCF_Face)FT_SIZE_FACE( size );
|
||||||
FT_Stream stream = face->root.stream;
|
FT_Stream stream = face->root.stream;
|
||||||
FT_Error error = PCF_Err_Ok;
|
FT_Error error = PCF_Err_Ok;
|
||||||
FT_Memory memory = FT_FACE( face )->memory;
|
|
||||||
FT_Bitmap* bitmap = &slot->bitmap;
|
FT_Bitmap* bitmap = &slot->bitmap;
|
||||||
PCF_Metric metric;
|
PCF_Metric metric;
|
||||||
int bytes;
|
int bytes;
|
||||||
|
@ -411,7 +410,8 @@ THE SOFTWARE.
|
||||||
/* XXX: to do: are there cases that need repadding the bitmap? */
|
/* XXX: to do: are there cases that need repadding the bitmap? */
|
||||||
bytes = bitmap->pitch * bitmap->rows;
|
bytes = bitmap->pitch * bitmap->rows;
|
||||||
|
|
||||||
if ( FT_ALLOC( bitmap->buffer, bytes ) )
|
error = ft_glyphslot_alloc_bitmap( slot, bytes );
|
||||||
|
if ( error )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
|
|
||||||
if ( FT_STREAM_SEEK( metric->bits ) ||
|
if ( FT_STREAM_SEEK( metric->bits ) ||
|
||||||
|
@ -451,7 +451,6 @@ THE SOFTWARE.
|
||||||
|
|
||||||
slot->linearHoriAdvance = (FT_Fixed)bitmap->width << 16;
|
slot->linearHoriAdvance = (FT_Fixed)bitmap->width << 16;
|
||||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
|
||||||
|
|
||||||
FT_TRACE4(( " --- ok\n" ));
|
FT_TRACE4(( " --- ok\n" ));
|
||||||
|
|
||||||
|
|
|
@ -645,11 +645,10 @@
|
||||||
|
|
||||||
/* Allocate and read bitmap data */
|
/* Allocate and read bitmap data */
|
||||||
{
|
{
|
||||||
FT_Memory memory = face->root.memory;
|
FT_ULong len = glyph->root.bitmap.pitch * ysize;
|
||||||
FT_Long len = glyph->root.bitmap.pitch * ysize;
|
|
||||||
|
|
||||||
|
error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
|
||||||
if ( !FT_ALLOC( glyph->root.bitmap.buffer, len ) )
|
if ( !error )
|
||||||
{
|
{
|
||||||
error = pfr_load_bitmap_bits( p,
|
error = pfr_load_bitmap_bits( p,
|
||||||
stream->limit,
|
stream->limit,
|
||||||
|
|
|
@ -1212,14 +1212,16 @@
|
||||||
TT_SBit_Range range,
|
TT_SBit_Range range,
|
||||||
FT_ULong ebdt_pos,
|
FT_ULong ebdt_pos,
|
||||||
FT_ULong glyph_offset,
|
FT_ULong glyph_offset,
|
||||||
FT_Bitmap* map,
|
FT_GlyphSlot slot,
|
||||||
FT_Int x_offset,
|
FT_Int x_offset,
|
||||||
FT_Int y_offset,
|
FT_Int y_offset,
|
||||||
FT_Stream stream,
|
FT_Stream stream,
|
||||||
TT_SBit_Metrics metrics )
|
TT_SBit_Metrics metrics,
|
||||||
|
FT_Int depth )
|
||||||
{
|
{
|
||||||
FT_Memory memory = stream->memory;
|
FT_Memory memory = stream->memory;
|
||||||
FT_Error error;
|
FT_Bitmap* map = &slot->bitmap;
|
||||||
|
FT_Error error;
|
||||||
|
|
||||||
|
|
||||||
/* place stream at beginning of glyph data and read metrics */
|
/* place stream at beginning of glyph data and read metrics */
|
||||||
|
@ -1230,11 +1232,10 @@
|
||||||
if ( error )
|
if ( error )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
|
|
||||||
/* this function is recursive. At the top-level call, the */
|
/* this function is recursive. At the top-level call, we */
|
||||||
/* field map.buffer is NULL. We thus begin by finding the */
|
/* compute the dimensions of the higher-level glyph to */
|
||||||
/* dimensions of the higher-level glyph to allocate the */
|
/* allocate the final pixmap buffer */
|
||||||
/* final pixmap buffer */
|
if ( depth == 0 )
|
||||||
if ( map->buffer == 0 )
|
|
||||||
{
|
{
|
||||||
FT_Long size;
|
FT_Long size;
|
||||||
|
|
||||||
|
@ -1274,7 +1275,8 @@
|
||||||
if ( size == 0 )
|
if ( size == 0 )
|
||||||
goto Exit; /* exit successfully! */
|
goto Exit; /* exit successfully! */
|
||||||
|
|
||||||
if ( FT_ALLOC( map->buffer, size ) )
|
error = ft_glyphslot_alloc_bitmap( slot, size );
|
||||||
|
if (error)
|
||||||
goto Exit;
|
goto Exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1348,11 +1350,12 @@
|
||||||
elem_range,
|
elem_range,
|
||||||
ebdt_pos,
|
ebdt_pos,
|
||||||
elem_offset,
|
elem_offset,
|
||||||
map,
|
slot,
|
||||||
x_offset + comp->x_offset,
|
x_offset + comp->x_offset,
|
||||||
y_offset + comp->y_offset,
|
y_offset + comp->y_offset,
|
||||||
stream,
|
stream,
|
||||||
&elem_metrics );
|
&elem_metrics,
|
||||||
|
depth+1 );
|
||||||
if ( error )
|
if ( error )
|
||||||
goto Fail_Memory;
|
goto Fail_Memory;
|
||||||
}
|
}
|
||||||
|
@ -1409,7 +1412,6 @@
|
||||||
TT_SBit_MetricsRec *metrics )
|
TT_SBit_MetricsRec *metrics )
|
||||||
{
|
{
|
||||||
FT_Error error;
|
FT_Error error;
|
||||||
FT_Memory memory = stream->memory;
|
|
||||||
FT_ULong ebdt_pos, glyph_offset;
|
FT_ULong ebdt_pos, glyph_offset;
|
||||||
|
|
||||||
TT_SBit_Strike strike;
|
TT_SBit_Strike strike;
|
||||||
|
@ -1432,20 +1434,11 @@
|
||||||
|
|
||||||
ebdt_pos = FT_STREAM_POS();
|
ebdt_pos = FT_STREAM_POS();
|
||||||
|
|
||||||
/* clear the bitmap & load the bitmap */
|
|
||||||
if ( face->root.glyph->flags & FT_GLYPH_OWN_BITMAP )
|
|
||||||
FT_FREE( map->buffer );
|
|
||||||
|
|
||||||
map->rows = map->pitch = map->width = 0;
|
|
||||||
|
|
||||||
error = Load_SBit_Image( strike, range, ebdt_pos, glyph_offset,
|
error = Load_SBit_Image( strike, range, ebdt_pos, glyph_offset,
|
||||||
map, 0, 0, stream, metrics );
|
face->root.glyph, 0, 0, stream, metrics, 0 );
|
||||||
if ( error )
|
if ( error )
|
||||||
goto Exit;
|
goto Exit;
|
||||||
|
|
||||||
/* the glyph slot owns this bitmap buffer */
|
|
||||||
face->root.glyph->flags |= FT_GLYPH_OWN_BITMAP;
|
|
||||||
|
|
||||||
/* setup vertical metrics if needed */
|
/* setup vertical metrics if needed */
|
||||||
if ( strike->flags & 1 )
|
if ( strike->flags & 1 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -560,17 +560,10 @@
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
ft_glyphslot_clear( FT_GlyphSlot slot )
|
t42_glyphslot_clear( FT_GlyphSlot slot )
|
||||||
{
|
{
|
||||||
/* free bitmap if needed */
|
/* free bitmap if needed */
|
||||||
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
ft_glyphslot_free_bitmap( slot );
|
||||||
{
|
|
||||||
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
|
||||||
|
|
||||||
|
|
||||||
FT_FREE( slot->bitmap.buffer );
|
|
||||||
slot->flags &= ~FT_GLYPH_OWN_BITMAP;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* clear all public fields in the glyph slot */
|
/* clear all public fields in the glyph slot */
|
||||||
FT_ZERO( &slot->metrics );
|
FT_ZERO( &slot->metrics );
|
||||||
|
@ -603,7 +596,7 @@
|
||||||
FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
|
FT_Driver_Class ttclazz = ((T42_Driver)glyph->face->driver)->ttclazz;
|
||||||
|
|
||||||
|
|
||||||
ft_glyphslot_clear( t42slot->ttslot );
|
t42_glyphslot_clear( t42slot->ttslot );
|
||||||
error = ttclazz->load_glyph( t42slot->ttslot,
|
error = ttclazz->load_glyph( t42slot->ttslot,
|
||||||
t42size->ttsize,
|
t42size->ttsize,
|
||||||
glyph_index,
|
glyph_index,
|
||||||
|
|
|
@ -618,32 +618,18 @@
|
||||||
|
|
||||||
/* allocate and build bitmap */
|
/* allocate and build bitmap */
|
||||||
{
|
{
|
||||||
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
|
||||||
FT_Int pitch = ( bitmap->width + 7 ) >> 3;
|
FT_Int pitch = ( bitmap->width + 7 ) >> 3;
|
||||||
FT_Byte* column;
|
|
||||||
FT_Byte* write;
|
|
||||||
|
|
||||||
|
|
||||||
bitmap->pitch = pitch;
|
bitmap->pitch = pitch;
|
||||||
bitmap->rows = font->header.pixel_height;
|
bitmap->rows = font->header.pixel_height;
|
||||||
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
||||||
|
|
||||||
if ( FT_ALLOC( bitmap->buffer, pitch * bitmap->rows ) )
|
/* note: we don't allocate a new buffer for the bitmap since we */
|
||||||
goto Exit;
|
/* already store the images in the FT_Face */
|
||||||
|
ft_glyphslot_set_bitmap( slot, p );
|
||||||
column = (FT_Byte*)bitmap->buffer;
|
|
||||||
|
|
||||||
for ( ; pitch > 0; pitch--, column++ )
|
|
||||||
{
|
|
||||||
FT_Byte* limit = p + bitmap->rows;
|
|
||||||
|
|
||||||
|
|
||||||
for ( write = column; p < limit; p++, write += bitmap->pitch )
|
|
||||||
write[0] = p[0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
|
||||||
slot->bitmap_left = 0;
|
slot->bitmap_left = 0;
|
||||||
slot->bitmap_top = font->header.ascent;
|
slot->bitmap_top = font->header.ascent;
|
||||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||||
|
|
Loading…
Reference in New Issue