зеркало из https://github.com/stride3d/freetype.git
* 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:
Родитель
1c044d7d29
Коммит
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>
|
||||
|
||||
* 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) ;
|
||||
|
||||
|
||||
#SubDirHdr += $(FT2_INCLUDE) ;
|
||||
|
||||
# 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 ;
|
||||
|
||||
|
|
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
|
||||
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
|
||||
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
|
||||
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
|
||||
|
||||
|
|
|
@ -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
|
||||
used to print error messages during program execution. This will
|
||||
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
|
||||
|
226
docs/INSTALL
226
docs/INSTALL
|
@ -1,185 +1,65 @@
|
|||
In order to build the library, read the `BUILD' document in the `docs'
|
||||
directory. This is only a quick starter.
|
||||
Welcome
|
||||
|
||||
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
|
||||
---------------
|
||||
|
||||
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.
|
||||
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
|
||||
automatically build the library as well. Note that these files are
|
||||
not supported and sporadically maintained by FreeType developers,
|
||||
so don't expect them to work in each release.
|
||||
|
||||
to find them, have a look at the content of the "builds/<system>"
|
||||
directory, where <system> stands for your OS or environment.
|
||||
|
||||
|
||||
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).
|
||||
6. From you own IDE, or own Makefiles:
|
||||
|
||||
If you want to create your own project file, follow the instructions
|
||||
given in the "INSTALL.ANY" document of this directory.
|
||||
|
||||
|
||||
1. Building FT2 with "Jam"
|
||||
--------------------------
|
||||
II. Custom builds of the library:
|
||||
|
||||
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.
|
||||
Customizing the compilation of FreeType is easy, and allows you to select
|
||||
only the components of the font engine that you really need. For more details
|
||||
read the file "CUSTOMIZE"
|
||||
|
||||
|
||||
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)!
|
||||
[1] More details on: http://www.freetype.org/patents.html
|
||||
|
||||
[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.]
|
||||
End of file
|
||||
|
||||
- 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
|
||||
fits your needs best:
|
||||
The FreeType 2 font engine is copyrighted work, and cannot be
|
||||
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
|
||||
System which is compatible to the above two licenses (see file
|
||||
src/pcf/readme).
|
||||
- The FreeType License, found in the file "FTL.TXT", which is
|
||||
an BSD-style open-source license *with* an advertising
|
||||
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_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;
|
||||
}
|
||||
|
||||
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
|
||||
ft_glyphslot_clear( FT_GlyphSlot slot )
|
||||
{
|
||||
/* free bitmap if needed */
|
||||
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;
|
||||
}
|
||||
ft_glyphslot_free_bitmap( slot );
|
||||
|
||||
/* clear all public fields in the glyph slot */
|
||||
FT_ZERO( &slot->metrics );
|
||||
|
@ -248,8 +288,7 @@
|
|||
clazz->done_slot( slot );
|
||||
|
||||
/* free bitmap buffer if needed */
|
||||
if ( slot->flags & FT_GLYPH_OWN_BITMAP )
|
||||
FT_FREE( slot->bitmap.buffer );
|
||||
ft_glyphslot_free_bitmap( slot );
|
||||
|
||||
/* free glyph loader */
|
||||
if ( FT_DRIVER_USES_OUTLINES( driver ) )
|
||||
|
|
|
@ -489,8 +489,6 @@ THE SOFTWARE.
|
|||
int i, j, count;
|
||||
unsigned char *p, *pp;
|
||||
|
||||
FT_Memory memory = face->bdffont->memory;
|
||||
|
||||
FT_UNUSED( load_flags );
|
||||
|
||||
|
||||
|
@ -514,9 +512,9 @@ THE SOFTWARE.
|
|||
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
||||
bitmap->pitch = glyph.bpr;
|
||||
|
||||
if ( FT_NEW_ARRAY( bitmap->buffer, glyph.bytes ) )
|
||||
goto Exit;
|
||||
FT_MEM_COPY( bitmap->buffer, glyph.bitmap, glyph.bytes );
|
||||
/* note: we don't allocate a new array to hold the bitmap, we */
|
||||
/* can simply point to it */
|
||||
ft_glyphslot_set_bitmap( slot, glyph.bitmap );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -524,7 +522,8 @@ THE SOFTWARE.
|
|||
bitmap->pixel_mode = FT_PIXEL_MODE_GRAY;
|
||||
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;
|
||||
|
||||
switch ( bpp )
|
||||
|
@ -625,7 +624,6 @@ THE SOFTWARE.
|
|||
|
||||
slot->linearHoriAdvance = (FT_Fixed)glyph.dwidth << 16;
|
||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
||||
|
||||
Exit:
|
||||
return error;
|
||||
|
|
|
@ -236,7 +236,7 @@
|
|||
goto Exit;
|
||||
}
|
||||
|
||||
FT_ASSERT( list->nodes > 0 );
|
||||
FT_ASSERT( list->num_nodes > 0 );
|
||||
|
||||
while ( node->next )
|
||||
{
|
||||
|
|
|
@ -355,7 +355,6 @@ THE SOFTWARE.
|
|||
PCF_Face face = (PCF_Face)FT_SIZE_FACE( size );
|
||||
FT_Stream stream = face->root.stream;
|
||||
FT_Error error = PCF_Err_Ok;
|
||||
FT_Memory memory = FT_FACE( face )->memory;
|
||||
FT_Bitmap* bitmap = &slot->bitmap;
|
||||
PCF_Metric metric;
|
||||
int bytes;
|
||||
|
@ -411,7 +410,8 @@ THE SOFTWARE.
|
|||
/* XXX: to do: are there cases that need repadding the bitmap? */
|
||||
bytes = bitmap->pitch * bitmap->rows;
|
||||
|
||||
if ( FT_ALLOC( bitmap->buffer, bytes ) )
|
||||
error = ft_glyphslot_alloc_bitmap( slot, bytes );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
if ( FT_STREAM_SEEK( metric->bits ) ||
|
||||
|
@ -451,7 +451,6 @@ THE SOFTWARE.
|
|||
|
||||
slot->linearHoriAdvance = (FT_Fixed)bitmap->width << 16;
|
||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
||||
|
||||
FT_TRACE4(( " --- ok\n" ));
|
||||
|
||||
|
|
|
@ -645,11 +645,10 @@
|
|||
|
||||
/* Allocate and read bitmap data */
|
||||
{
|
||||
FT_Memory memory = face->root.memory;
|
||||
FT_Long len = glyph->root.bitmap.pitch * ysize;
|
||||
FT_ULong len = glyph->root.bitmap.pitch * ysize;
|
||||
|
||||
|
||||
if ( !FT_ALLOC( glyph->root.bitmap.buffer, len ) )
|
||||
error = ft_glyphslot_alloc_bitmap( &glyph->root, len );
|
||||
if ( !error )
|
||||
{
|
||||
error = pfr_load_bitmap_bits( p,
|
||||
stream->limit,
|
||||
|
|
|
@ -1212,14 +1212,16 @@
|
|||
TT_SBit_Range range,
|
||||
FT_ULong ebdt_pos,
|
||||
FT_ULong glyph_offset,
|
||||
FT_Bitmap* map,
|
||||
FT_GlyphSlot slot,
|
||||
FT_Int x_offset,
|
||||
FT_Int y_offset,
|
||||
FT_Stream stream,
|
||||
TT_SBit_Metrics metrics )
|
||||
TT_SBit_Metrics metrics,
|
||||
FT_Int depth )
|
||||
{
|
||||
FT_Memory memory = stream->memory;
|
||||
FT_Error error;
|
||||
FT_Memory memory = stream->memory;
|
||||
FT_Bitmap* map = &slot->bitmap;
|
||||
FT_Error error;
|
||||
|
||||
|
||||
/* place stream at beginning of glyph data and read metrics */
|
||||
|
@ -1230,11 +1232,10 @@
|
|||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
/* this function is recursive. At the top-level call, the */
|
||||
/* field map.buffer is NULL. We thus begin by finding the */
|
||||
/* dimensions of the higher-level glyph to allocate the */
|
||||
/* final pixmap buffer */
|
||||
if ( map->buffer == 0 )
|
||||
/* this function is recursive. At the top-level call, we */
|
||||
/* compute the dimensions of the higher-level glyph to */
|
||||
/* allocate the final pixmap buffer */
|
||||
if ( depth == 0 )
|
||||
{
|
||||
FT_Long size;
|
||||
|
||||
|
@ -1274,7 +1275,8 @@
|
|||
if ( size == 0 )
|
||||
goto Exit; /* exit successfully! */
|
||||
|
||||
if ( FT_ALLOC( map->buffer, size ) )
|
||||
error = ft_glyphslot_alloc_bitmap( slot, size );
|
||||
if (error)
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
|
@ -1348,11 +1350,12 @@
|
|||
elem_range,
|
||||
ebdt_pos,
|
||||
elem_offset,
|
||||
map,
|
||||
slot,
|
||||
x_offset + comp->x_offset,
|
||||
y_offset + comp->y_offset,
|
||||
stream,
|
||||
&elem_metrics );
|
||||
&elem_metrics,
|
||||
depth+1 );
|
||||
if ( error )
|
||||
goto Fail_Memory;
|
||||
}
|
||||
|
@ -1409,7 +1412,6 @@
|
|||
TT_SBit_MetricsRec *metrics )
|
||||
{
|
||||
FT_Error error;
|
||||
FT_Memory memory = stream->memory;
|
||||
FT_ULong ebdt_pos, glyph_offset;
|
||||
|
||||
TT_SBit_Strike strike;
|
||||
|
@ -1432,20 +1434,11 @@
|
|||
|
||||
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,
|
||||
map, 0, 0, stream, metrics );
|
||||
face->root.glyph, 0, 0, stream, metrics, 0 );
|
||||
if ( error )
|
||||
goto Exit;
|
||||
|
||||
/* the glyph slot owns this bitmap buffer */
|
||||
face->root.glyph->flags |= FT_GLYPH_OWN_BITMAP;
|
||||
|
||||
/* setup vertical metrics if needed */
|
||||
if ( strike->flags & 1 )
|
||||
{
|
||||
|
|
|
@ -560,17 +560,10 @@
|
|||
|
||||
|
||||
static void
|
||||
ft_glyphslot_clear( FT_GlyphSlot slot )
|
||||
t42_glyphslot_clear( FT_GlyphSlot slot )
|
||||
{
|
||||
/* free bitmap if needed */
|
||||
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;
|
||||
}
|
||||
ft_glyphslot_free_bitmap( slot );
|
||||
|
||||
/* clear all public fields in the glyph slot */
|
||||
FT_ZERO( &slot->metrics );
|
||||
|
@ -603,7 +596,7 @@
|
|||
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,
|
||||
t42size->ttsize,
|
||||
glyph_index,
|
||||
|
|
|
@ -618,32 +618,18 @@
|
|||
|
||||
/* allocate and build bitmap */
|
||||
{
|
||||
FT_Memory memory = FT_FACE_MEMORY( slot->face );
|
||||
FT_Int pitch = ( bitmap->width + 7 ) >> 3;
|
||||
FT_Byte* column;
|
||||
FT_Byte* write;
|
||||
|
||||
|
||||
bitmap->pitch = pitch;
|
||||
bitmap->rows = font->header.pixel_height;
|
||||
bitmap->pixel_mode = FT_PIXEL_MODE_MONO;
|
||||
|
||||
if ( FT_ALLOC( bitmap->buffer, pitch * bitmap->rows ) )
|
||||
goto Exit;
|
||||
|
||||
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];
|
||||
}
|
||||
/* note: we don't allocate a new buffer for the bitmap since we */
|
||||
/* already store the images in the FT_Face */
|
||||
ft_glyphslot_set_bitmap( slot, p );
|
||||
}
|
||||
|
||||
slot->flags = FT_GLYPH_OWN_BITMAP;
|
||||
slot->bitmap_left = 0;
|
||||
slot->bitmap_top = font->header.ascent;
|
||||
slot->format = FT_GLYPH_FORMAT_BITMAP;
|
||||
|
|
Загрузка…
Ссылка в новой задаче