Official mirror of https://gitlab.freedesktop.org/freetype/freetype
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
598 lines
22 KiB
598 lines
22 KiB
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" |
|
"http://www.w3.org/TR/REC-html40/loose.dtd"> |
|
<html> |
|
<head> |
|
<meta http-equiv="Content-Type" |
|
content="text/html; charset=iso-8859-1"> |
|
<meta name="Author" |
|
content="David Turner"> |
|
<title>FreeType 2 FAQ</title> |
|
</head> |
|
|
|
<body text="#000000" |
|
bgcolor="#FFFFFF" |
|
link="#0000EF" |
|
vlink="#51188E" |
|
alink="#FF0000"> |
|
|
|
|
|
<font size=1>http://www.freetype.org</font><p> |
|
|
|
<h1 align=center> |
|
<a href="freetype.html"> |
|
<img src="image/freetype.jpg" |
|
width=550 height=105 |
|
alt="The FreeType Project" |
|
border=0></a> |
|
<h1>The FreeType 2 FAQ</h1> |
|
</h1> |
|
|
|
<center> |
|
<table width="75%"> |
|
<tr><td> |
|
|
|
<hr><p> |
|
|
|
Document index |
|
|
|
<ul> |
|
<li><a href="#general">General</a> |
|
<ul><p> |
|
<li> |
|
<a href="#general-dead">I thought the FreeType project was dead. |
|
Is this true?</a> |
|
</li> |
|
<li> |
|
<a href="#general-long">Why did it take so long to release |
|
FreeType 2?</a> |
|
</li> |
|
<li> |
|
<a href="#general-unix">Is FreeType 2 a Unix-only |
|
project?</a> |
|
</li> |
|
<li> |
|
<a href="#general-x11">When will X11 support anti-aliased |
|
glyphs?</a> |
|
</li> |
|
<li> |
|
<a href="#general-ft1">Is FreeType 2 backwards compatible |
|
to FreeType 1.x?</a> |
|
</li> |
|
<li> |
|
<a href="#general-edit">Can I use FreeType 2 to edit fonts |
|
or create new ones?</a> |
|
</li> |
|
</p></ul> |
|
</li> |
|
<li><a href="#builds">Compilation & Configuration</a> |
|
<ul><p> |
|
<li> |
|
<a href="#builds-compile">How do I compile the FreeType 2 |
|
library?</a> |
|
</li> |
|
<li> |
|
<a href="#builds-config">How do I configure my library build?</a> |
|
</li> |
|
<li> |
|
<a href="#builds-modules">How do I select the modules I need?</a> |
|
</li> |
|
<li> |
|
<a href="#builds-flat">How do I compile all FreeType 2 files |
|
in a single directory?</a> |
|
</li> |
|
</p></ul> |
|
</li> |
|
<li> |
|
<a href="#autohint">The FreeType 2 autohinter</a> |
|
<ul><p> |
|
<li> |
|
<a href="#autohint-license">Under which license is the auto-hinter |
|
released?</a> |
|
</li> |
|
<li> |
|
<a href="#autohint-work">How does auto-hinting work in |
|
FreeType 2?</a> |
|
</li> |
|
<li> |
|
<a href="#autohint-cjk">Why doesn't the auto-hinter work well |
|
with CJK fonts?</a> |
|
</li> |
|
</p></ul> |
|
</li> |
|
<li> |
|
<a href="#other">Other questions</a> |
|
<ul><p> |
|
<li> |
|
<a href="#other-antialias">Which anti-aliasing algorithm is |
|
used in the FreeType 2 renderer?</a> |
|
</li> |
|
<li> |
|
<a href="#other-opentype">When will FreeType 2 support |
|
OpenType?</a> |
|
</li> |
|
</p></ul> |
|
</li> |
|
</ul> |
|
|
|
<p><hr></p> |
|
|
|
<table width="100%"> |
|
<tr bgcolor="#CCCCEE"><td> |
|
<h2 align=center> |
|
<a name="general">General questions & answers |
|
</h2> |
|
</td></tr> |
|
<tr><td> |
|
|
|
<a name="general-dead"> |
|
<h3> |
|
I.1 I though the FreeType project was dead. Is this true? |
|
</h3> |
|
|
|
<p>Well, not exactly :-) It's true that the TrueType patents |
|
issues have been less than a graceful event to handle but it didn't not |
|
really killed the project per se, as Apple hasn't made an official |
|
statement yet regarding the use of the patented "technology" in open |
|
source projects (or other products).</p> |
|
|
|
<p>We have thus continued updating FreeType 1.x, and started |
|
developing FreeType 2 with the idea of providing this time a |
|
completely patent free font engine. However, we largely preferred not |
|
to broadly communicate about it until we've got a satisfying |
|
implementation to show.</p> |
|
|
|
<a name="general-long"> |
|
<h3> |
|
I.2 Why did it take so long to release FreeType 2? |
|
</h3> |
|
|
|
<p>Several factors come to mind. The first one is that FreeType 2 |
|
is a much more complex and dense project that was mostly developed |
|
during non-working hours. And surely some important changes in the life |
|
(like marriage, new jobs and kids) of some the FreeType developers |
|
cannot be ignored :-)</p> |
|
|
|
<p>A second one is that a first version of the library was designed one |
|
year ago (and already worked with a multitude of font drivers), though |
|
with a design that was judged by its authors as well as beta testers as |
|
not enough flexible or consistent. In short, it worked well but we were |
|
not exactly proud of it (call us perfectionists). It has then be |
|
significantly reworked to become what we are now distributing as |
|
FreeType 2</p> |
|
|
|
<p>Finally, it would have been hard to distribute such a library without |
|
an alternative technology to replace the patented bytecode interpreter. |
|
This involved significant research work that could only be performed |
|
correctly full-time, and we had to found a company to fund such a |
|
development and still make it available under a BSD-like license. Huge |
|
thanks to <a href="http://www.catharon.com">Catharon Productions, |
|
Inc.</a> for their commitment to this project.</p> |
|
|
|
<p>And of course, we added support for more font files, and we will |
|
continue to as long as the specifications are available and that we find |
|
an interest in it. For example, FreeType 2 is to date the only |
|
software library available on the market that supports the new Adobe |
|
"CEF" font format.</p> |
|
|
|
<a name="general-unix"> |
|
<h3> |
|
I.3 Is FreeType 2 a Unix-only project? |
|
</h3> |
|
|
|
<p>Absolutely not, even though many people still seem to think |
|
so :-) FreeType 2, just like version 1.x, can be compiled |
|
on any platform with an ANSI compiler. Some beta versions of the |
|
library are even heavily used in brand new OSes (see the <a |
|
href="http://www.atheos.cx">AtheOS</a> screenshots for examples).</p> |
|
|
|
<p>The library is itself mainly developed on several platforms (Windows |
|
& Linux, though a great deal has also been achieved on OS/2) and the |
|
code is highly generic and modular to adapt even the most strict |
|
environments like low-memory embedded systems.</p> |
|
|
|
<a name="general-x11"> |
|
<h3> |
|
I.4 When will X11/XFree support anti-aliased text? |
|
</h3> |
|
|
|
<p>This question isn't exactly related to FreeType as we have no direct |
|
connection to the XFree people, but we have been asked so frequently |
|
about it that it deserves a prominent place in this FAQ :-)</p> |
|
|
|
<p>FreeType has been capable of anti-aliasing since version 1.0. |
|
The reason why XFree doesn't support it is directly related to the |
|
limitations of the design and specification of X11. More |
|
specifically:</p> |
|
|
|
<ul> |
|
<li> |
|
X11 assumes that all glyph images are monochrome bitmaps, hence the |
|
X font library and server are unable to send anything else to |
|
the X server. |
|
</li> |
|
<li> |
|
Even if the X font library/server was able to generate |
|
anti-aliased bitmaps (and this has been already done through |
|
extensions), the X rendering model doesn't allow translucent |
|
composition of "gray" pixmaps onto an arbitrary drawable. |
|
</li> |
|
</ul> |
|
|
|
<p>As both the font and rendering models of X11 are limited, it is |
|
basically impossible to draw anti-aliased glyphs without performing |
|
<em>huge</em> hacks within the server.</p> |
|
|
|
<p>Note that Keith Packard, from XFree fame, has recently started |
|
working on a new rendering model for X11 in order to support new |
|
features (mainly transparency and anti-aliased fonts). This will be |
|
provided through protocol extensions. The question of knowing whether |
|
legacy X applications will be able to display anti-aliased text is still |
|
very uncertain.</p> |
|
|
|
<a name="general-ft1"> |
|
<h3> |
|
I.5 Is FreeType 2 backwards compatible with FreeType 1.x? |
|
</h3> |
|
|
|
<p>Not directly, though we had the project to provide an optional binary |
|
compatibility layer on top of it in order to easily re-link applications |
|
with the new version. However, this idea has been dropped as it is |
|
possible to install and use the two versions independently on any system |
|
(read: no namespace conflicts).</p> |
|
|
|
<p>The FreeType 2 API is a lot simpler than the one in 1.x |
|
while being much more powerful. We thus encourage you to adapt your |
|
source code to it as this should not involve much work.</p> |
|
|
|
<a name="general-edit"> |
|
<h3> |
|
I.6 Can I use FreeType 2 to edit fonts or create new ones? |
|
</h3> |
|
|
|
<p>The answer is a definitive <b>no</b>, because the library was |
|
specifically designed to <em>read</em> font files with small code size |
|
and very low memory usage.</p> |
|
|
|
<p>We thus do not plan to support editing or creation in the font engine |
|
in any way, as this would imply a complete rewrite. This doesn't mean |
|
that we won't introduce a font editing/creation library in the future, |
|
as this really depends on how many people are asking for it (or how much |
|
they would be willing to pay for it), as well as the time of the |
|
FreeType developers.</p> |
|
|
|
<p>Do not expect anything in this direction until we officially announce |
|
something though. There are other axes of development for this project |
|
(like text-layout capabilities, glyph caching, etc.) that may be more |
|
important to us at the moment.</p> |
|
</td></tr> |
|
</table> |
|
|
|
<br> |
|
|
|
<table width="100%"> |
|
<tr bgcolor="#CCCCEE"><td> |
|
<h2 align=center> |
|
<a name="builds">Compilation & Configuration |
|
</h2> |
|
</td></tr> |
|
<tr><td> |
|
|
|
<a name="builds-compile"> |
|
<h3> |
|
II.1 How do I compile the FreeType 2 library? |
|
</h3> |
|
|
|
<p>The library can be compiled in various ways, and a detailed |
|
documentation is available in the file <tt>freetype2/docs/BUILD</tt>. |
|
However, we will summarize the process to a few cases:</p> |
|
|
|
<h4> |
|
a. Using the command-line 2 build system |
|
</h4> |
|
|
|
<p>The engine comes with a sophisticated build system that is used to |
|
configure and compile a build of the library. You will need <em>GNU |
|
Make</em> installed on your platform (<b>Note:</b> It will |
|
<em>not</em> work with other Make tools).</p> |
|
|
|
<p>Basically, you will need to invoke <tt>make</tt> a first time in |
|
the top-level FreeType 2 directory in order to set up the build. |
|
This will detect your current platform and choose a configuration |
|
sub-makefile to drive the build. A specific compiler can be selected |
|
on some platforms by providing an additional target. For example, on |
|
Win32:</p> |
|
|
|
<ul> |
|
<li> |
|
<b><tt>make visualc</tt></b> will select the Visual C++ |
|
compiler |
|
</li> |
|
<li> |
|
<b><tt>make lcc</tt></b> will select the Win32-lcc compiler |
|
</li> |
|
</ul> |
|
|
|
<p>Note that on Unix, when the first time make is called, a configure |
|
script located in <tt>freetype2/builds/unix</tt> will be run in order |
|
to automatically detect the platform & compiler.</p> |
|
|
|
<p>A summary will be displayed showing the detected platform and |
|
compiler selected. You will then be able to start the build by |
|
invoking <tt>make</tt> a second time. In case of problem, consult the |
|
<tt>BUILD</tt> document.</p> |
|
|
|
<h4> |
|
b. Direct compilation |
|
</h4> |
|
|
|
<p>You can also directly compile the library from the command line by |
|
using these simple rules:</p> |
|
|
|
<ul> |
|
<li> |
|
You should place the directories <tt>freetype2/include</tt> and |
|
<tt>freetype2/src</tt> in your include path in order to compile |
|
any component of the library. You can also add the |
|
system-specific build directory (i.e. |
|
<tt>builds/<em>system</em>/</tt>) in the case where an alternate |
|
implementation of some of the components is available there (e.g. |
|
the memory-mapped i/o implementation on some Unix systems). |
|
</li> |
|
<li> |
|
The components of the library are located in sub-directories of |
|
<tt>src</tt>, for example: <tt>src/base</tt>, |
|
<tt>src/truetype</tt>, etc. |
|
</li> |
|
<li> |
|
Each component is normally compiled through a single C file that |
|
<em>wraps</em> other sources in the component's directory. For |
|
example, you should build the TrueType font driver by compiling |
|
the file <tt>src/truetype/truetype.c</tt>. The list of |
|
C files to compile for a feature-complete build of the |
|
library is given in the <tt>BUILD</tt> document. |
|
</li> |
|
</ul> |
|
|
|
<h4> |
|
c. Using a graphical IDE |
|
</h4> |
|
|
|
<p>Well, the process is vastly similar to the one described in b., |
|
except that you need to set the include paths, source code paths, etc. |
|
in dialog boxes before running the compilation.</p> |
|
|
|
<a name="builds-config"> |
|
<h3> |
|
II.2 How do I configure my build of the library? |
|
</h3> |
|
|
|
<p>Each build of the library is configured through two header files |
|
located in <tt>include/freetype/config</tt>:</p> |
|
|
|
<ul> |
|
<li> |
|
<tt>ftoption.h</tt> |
|
<br> |
|
This file contains various configuration macros whose definition can |
|
be toggled on a per-build basis. Each macro is heavily commented in |
|
this file's comment, and we invite you to refer to it directly. |
|
</li> |
|
<li> |
|
<tt>ftmodule.h</tt> |
|
<br> |
|
This file contains the list of all the modules that are initially |
|
registered (added) when the function <tt>FT_Init_FreeType()</tt> is |
|
called. See the next answer to know how to change it and why it may |
|
be important. |
|
</li> |
|
</ul> |
|
|
|
<p>Alternatively, some specific implementations of some FreeType 2 |
|
components can be provided in a <tt>builds/<em>system</em>/</tt> |
|
directory (e.g. the Unix-specific <tt>ftsystem.c</tt> that uses |
|
memory-mapped file for i/o).</p> |
|
|
|
<a name="builds-modules"> |
|
<h3> |
|
II.3 How do I select the modules I need in my build? |
|
</h3> |
|
|
|
<p>The function <tt>FT_Init_FreeType()</tt> creates a new instance of |
|
the FreeType 2 library and registers a set of "default" modules |
|
before returning to the calling application. Its default implementation |
|
is in the file <tt>src/base/ftinit.c</tt>.</p> |
|
|
|
<p>The list of default modules used by <tt>ftinit.c</tt> is located in |
|
the configuration file <tt>include/freetype/config/ftmodule.h</tt>. |
|
Normally, it is automatically generated by the build system by invoking |
|
the "<tt><b>make modules</b></tt>" command in the top level |
|
FreeType 2 directory (Note: this only works with GNU Make; you can |
|
edit the file by hand otherwise). It does so by parsing all |
|
sub-directories of <tt>src</tt> that contain a file named |
|
<tt>module.mk</tt>.</p> |
|
|
|
<p>Note that a specific port or project is free to provide its own |
|
implementation of <tt>ftinit.c</tt> in order to ensure a different |
|
initialization sequence. For example, one could do something like:</p> |
|
|
|
<ul> |
|
<li> |
|
Compile each module as a shared library (DLL or <tt>.so</tt>) with a |
|
common "entry point" to retrieve a pointer to its module class |
|
(there is already some code that allows this when compiling each |
|
module). |
|
</li> |
|
<li> |
|
Place these modules in a directory like |
|
<tt>/usr/lib/freetype2/modules/</tt>. |
|
</li> |
|
<li> |
|
Provide an implementation of <tt>ftinit.c</tt> that would scan the |
|
directory for valid modules. |
|
</li> |
|
</ul> |
|
|
|
<p>This example only emphasizes the flexibility that is left to |
|
developers when building the library.</p> |
|
|
|
<a name="builds-flat"> |
|
<h3> |
|
II.4 How do I compile all FreeType 2 files in a single |
|
directory? |
|
</h3> |
|
|
|
<p>Some projects may need, for the sake of simplicity or ease of |
|
building, to compile the FreeType 2 library with all source files |
|
copied to a single directory. This is possible.</p> |
|
|
|
<p>To do so, you have to copy all source files located under |
|
<tt>src</tt> to your own directory (you must retain the include files in |
|
a distinct hierarchy though), then compile each of the FreeType 2 |
|
component with the macro <tt>FT_FLAT_COMPILE</tt>. This will change the |
|
way <tt>#include</tt> works during the build.</p> |
|
|
|
</td></tr> |
|
</table> |
|
|
|
<br> |
|
|
|
<table width="100%"> |
|
<tr bgcolor="#CCCCEE"><td> |
|
<h2 align=center> |
|
<a name="autohint">The FreeType 2 auto-hinter |
|
</h2> |
|
</td></tr> |
|
<tr><td> |
|
|
|
<a name="autohint-license"> |
|
<h3> |
|
III.1 Under which license is the FreeType 2 auto-hinter released? |
|
</h3> |
|
|
|
<p>The auto-hinter was initially designed and implemented under contract |
|
for <a href="http://www.catharon.com">Catharon Productions, Inc</a> |
|
which gladly accepted to released it under an open-source license |
|
compatible with the FreeType one.</p> |
|
|
|
<p>This license can be found in |
|
<tt>src/autohint/CatharonLicense.txt</tt> and requires that you cite |
|
Catharon Productions in your documentation (just like you do with |
|
FreeType) when using the auto-hinting module.</p> |
|
|
|
<p>Other than that, you still have the same freedom than with the good |
|
old FreeType license. Enjoy!</p> |
|
|
|
<a name="autohint-work"> |
|
<h3> |
|
III.2 How does the auto-hinter work? |
|
</h3> |
|
|
|
<p>Well, a complete description would be difficult. Have a look at the |
|
dedicated <a href="autohinting/index.html">auto-hinter pages</a> on the |
|
FreeType site, as they describe most of its details with graphics and |
|
explanations. You could also look at the source code if you want |
|
to :-)</p> |
|
|
|
<p>To give a few details, the auto-hinter is used to perform |
|
grid-fitting on scalable font formats that use Bézier outlines as |
|
their primary glyph image format (this means nearly all scalable font |
|
formats today). If a given font driver doesn't provide its own hinter, |
|
the auto-hinter is used by default. If a format-specific hinter is |
|
provided, it is still possible to use the auto-hinter using the |
|
<tt>FT_LOAD_FORCE_AUTOHINT</tt> bit flag when calling |
|
<tt>FT_Load_Glyph()</tt>.</p> |
|
|
|
<p>The auto-hinter currently doesn't use external hints to do its job, |
|
as it automatically computes global metrics (when it "opens" a font for |
|
the first time) and glyph "hints" from their outline. Note that we plan |
|
the ability to specify external hints, given that it is based on a |
|
constraint system. That could be used to support native hints in |
|
Type 1/Type 2 fonts, for example.</p> |
|
|
|
<a name="autohint-cjk"> |
|
<h3> |
|
III.3 Why does the auto-hinter doesn't work correctly with CJK |
|
fonts? |
|
</h3> |
|
|
|
<p>The auto-hinter was first designed to manage and hint Latin-based |
|
fonts, as they consist of most of the fonts available today. It doesn't |
|
hint Asian fonts, as well as a few other complex scripts, because we |
|
didn't put enough research on the topic yet. Hinting CJK isn't really |
|
more difficult than Latin, just different, with a set of different |
|
constraints (basically, more distortion of glyphs is acceptable as long |
|
as certain features like triple-stem positions are respected more |
|
strictly).</p> |
|
|
|
<p>We thus plan to handle such a case in the near future. Please be |
|
patient.</p> |
|
</td></tr> |
|
</table> |
|
|
|
<br> |
|
|
|
<table width="100%"> |
|
<tr bgcolor="#CCCCEE"><td> |
|
<h2 align=center> |
|
<a name="other">Other questions |
|
</h2> |
|
</td></tr> |
|
<tr><td> |
|
|
|
<a name="other-antialias"> |
|
<h3> |
|
IV.1 Which anti-aliasing algorithm is used by FreeType 2?</h3> |
|
|
|
<p>The algorithm has been specifically designed for FreeType. It is |
|
based on ideas that were originally found in the implementation of the |
|
<a href="http://www.levien.com/libart">libArt</a> graphics library to |
|
compute the <em>exact pixel coverage</em> of a vector image with |
|
absolutely no sub-sampling/filtering.</p> |
|
|
|
<p>However, these two implementations are radically distinct and use |
|
vastly different models. The FreeType 2 renderer is optimized |
|
specifically for rendering small complex shapes, like glyphs, at very |
|
high speed while using very few memory; while libArt shines at general |
|
shape/polygon processing, especially large ones.</p> |
|
|
|
<p>The FreeType 2 anti-aliasing renderer is indeed <em>faster</em> |
|
than the monochrome renderer for small character sizes (typically |
|
<20 pixels). The reason is that the monochrome renderer must |
|
perform two passes on the outline in order to perform drop-out control |
|
according to the TrueType specification (we could drop this requirement |
|
later though).</p> |
|
|
|
<p>We will try to document its design in a later document, though this |
|
is not a priority for now.</p> |
|
|
|
<a name="other-opentype"> |
|
<h3> |
|
IV.2 When will FreeType 2 support OpenType? |
|
</h3> |
|
|
|
<p>Well, the engine already reads OpenType/CFF files perfectly. What it |
|
doesn't do is handle "OpenType Layout" tables yet.</p> |
|
|
|
<p>FreeType 1 comes with a set of extensions that are used to load |
|
and manage OpenType Layout tables. It even has a demonstration program |
|
named "<tt>ftstrtto</tt>" to show its capabilities.</p> |
|
|
|
<p>For FreeType 2, we have decided that the layout operations |
|
provided through these tables are better placed in a specific |
|
text-layout library, (many people having asked for such a thing). This |
|
new engine will not depend on FreeType2 explicitly and will be developed |
|
as a separate project. We plan to announce it in a few weeks with all |
|
gory details, once the definitive 2.0 release of FreeType has been |
|
made.</p> |
|
|
|
</td></tr> |
|
</table> |
|
|
|
<p><hr></p> |
|
|
|
<a href="index.html">Back to FreeType homepage</a><p> |
|
|
|
</td></tr> |
|
</table> |
|
</body> |
|
</html>
|
|
|