|
|
|
@ -104,19 +104,19 @@ |
|
|
|
|
<ul><p> |
|
|
|
|
<li> |
|
|
|
|
<a href="#other-color">How can I set the color of text rendered |
|
|
|
|
by FreeType ?</a> |
|
|
|
|
by FreeType?</a> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<a href="#other-depth">Can I use FreeType to draw text on a pixmap |
|
|
|
|
with arbitrary depth ?</a> |
|
|
|
|
with arbitrary depth?</a> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<a href="#other-size">I set the pixel size to 8x8, but the resulting |
|
|
|
|
glyphs are larger than that. Why ?</a> |
|
|
|
|
<a href="#other-size">I set the pixel size to 8x8, but the |
|
|
|
|
resulting glyphs are larger than that. Why?</a> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<a href="#other-bbox">How can I compute the bounding box of a text |
|
|
|
|
string without loading its glyphs ?</a> |
|
|
|
|
string without loading its glyphs?</a> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<a href="#other-antialias">Which anti-aliasing algorithm is |
|
|
|
@ -567,112 +567,111 @@ |
|
|
|
|
|
|
|
|
|
<a name="other-depth"> |
|
|
|
|
<h3> |
|
|
|
|
IV.1 Can I use FreeType to draw text on a pixmap with arbitratry depth ? |
|
|
|
|
IV.1 Can I use FreeType to draw text on a pixmap with arbitratry depth? |
|
|
|
|
</h3> |
|
|
|
|
|
|
|
|
|
<p>No directly, as FreeType is a font library, not a general purpose |
|
|
|
|
graphics library or text rendering service. However, note that the |
|
|
|
|
<p>Not directly, as FreeType is a font library, not a general purpose |
|
|
|
|
graphics library or text rendering service. However, note that the |
|
|
|
|
anti-aliased renderer allows you to convert a vectorial glyph outline |
|
|
|
|
into a list of "spans" (i.e. horizontal pixel segments with same coverage) |
|
|
|
|
that can be rendered through user-provided callbacks.</p> |
|
|
|
|
|
|
|
|
|
<p>By providing the appropriate span callback, you can render anti-aliased |
|
|
|
|
text to any kind of surface. You can also use any color or fill |
|
|
|
|
pattern/image if you want to. This process is called |
|
|
|
|
<em>direct rendering</em>. For more information, please read the |
|
|
|
|
documentation contained in the following files:</p> |
|
|
|
|
into a list of "spans" (i.e. horizontal pixel segments with same |
|
|
|
|
coverage) that can be rendered through user-provided callbacks.</p> |
|
|
|
|
|
|
|
|
|
<p>By providing the appropriate span callback, you can render |
|
|
|
|
anti-aliased text to any kind of surface. You can also use any color or |
|
|
|
|
fill pattern/image if you want to. This process is called <em>direct |
|
|
|
|
rendering</em>. For more information, please read the documentation |
|
|
|
|
contained in the following files:</p> |
|
|
|
|
|
|
|
|
|
<ul> |
|
|
|
|
<li><p> |
|
|
|
|
<b><tt><freetype/ftimage.h></tt></b> contains the definition |
|
|
|
|
of the <tt>FT_Raster_Params</tt> type used with direct rendering. |
|
|
|
|
</p></li> |
|
|
|
|
|
|
|
|
|
<li><p> |
|
|
|
|
<b><tt><freetype/ftoutln.h></tt></b> contains the definition |
|
|
|
|
of the <tt>FT_Outline_Render</tt> function that can be used to |
|
|
|
|
convert vectorial outlines to span lists. |
|
|
|
|
</p></li> |
|
|
|
|
</ul> |
|
|
|
|
|
|
|
|
|
<p>Here's some code that uses them:</p> |
|
|
|
|
<font color="blue"><pre> |
|
|
|
|
|
|
|
|
|
FT_Raster_Params params; |
|
|
|
|
FT_Outline outline; |
|
|
|
|
<ul> |
|
|
|
|
<li> |
|
|
|
|
<p><tt><freetype/ftimage.h></tt> contains the definition of |
|
|
|
|
the <tt>FT_Raster_Params</tt> type used with direct rendering.</p> |
|
|
|
|
</li> |
|
|
|
|
<li> |
|
|
|
|
<p><tt><freetype/ftoutln.h></tt> contains the definition of |
|
|
|
|
the <tt>FT_Outline_Render()</tt> function that can be used to |
|
|
|
|
convert vectorial outlines to span lists.</p> |
|
|
|
|
</li> |
|
|
|
|
</ul> |
|
|
|
|
|
|
|
|
|
<p>Here's some code that uses them:</p> |
|
|
|
|
|
|
|
|
|
<font color="blue"><pre> |
|
|
|
|
FT_Raster_Params params; |
|
|
|
|
FT_Outline outline; |
|
|
|
|
|
|
|
|
|
.. load vectorial glyph in "outline" |
|
|
|
|
|
|
|
|
|
... load vectorial glyph in "outline" ... |
|
|
|
|
|
|
|
|
|
params.flags = ft_raster_flag_aa | ft_raster_flag_direct; |
|
|
|
|
params.gray_spans = (FT_Raster_Span_Func)your_own_span_function_here; |
|
|
|
|
params.user = your_own_data_pointer; |
|
|
|
|
params.flags = ft_raster_flag_aa | ft_raster_flag_direct; |
|
|
|
|
params.gray_spans = (FT_Raster_Span_Func)your_own_span_function_here; |
|
|
|
|
params.user = your_own_data_pointer; |
|
|
|
|
|
|
|
|
|
error = FT_Outline_Render( library, &outline, &params ); |
|
|
|
|
</pre></font> |
|
|
|
|
error = FT_Outline_Render( library, &outline, &params );</pre> |
|
|
|
|
</font> |
|
|
|
|
|
|
|
|
|
<p>Note that direct rendering is <em>not</em> available with monochrome |
|
|
|
|
output, as the current renderer uses a two-pass algorithm to generate |
|
|
|
|
glyphs with correct drop-out control.</p> |
|
|
|
|
<p>Note that direct rendering is <em>not</em> available with monochrome |
|
|
|
|
output, as the current renderer uses a two-pass algorithm to generate |
|
|
|
|
glyphs with correct drop-out control.</p> |
|
|
|
|
|
|
|
|
|
<hr> |
|
|
|
|
<a name="other-color"> |
|
|
|
|
<h3> |
|
|
|
|
IV.2 How can I set the color of text rendered by FreeType ? |
|
|
|
|
IV.2 How can I set the color of text rendered by FreeType? |
|
|
|
|
</h3> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>Basically, you can't do that, because FreeType is simply a font |
|
|
|
|
library. In general, you'll need to use your favorite graphics library |
|
|
|
|
to draw the FreeType glyphs with the appropriate color.</p> |
|
|
|
|
library. In general, you will need to use your favorite graphics |
|
|
|
|
library to draw the FreeType glyphs with the appropriate color.</p> |
|
|
|
|
|
|
|
|
|
<p>Note that for anti-aliased glyphs, you can "set the color" by using |
|
|
|
|
<em>direct rendering</em> as described in <a href="#other-depth">this |
|
|
|
|
answer</a></p> |
|
|
|
|
|
|
|
|
|
answer</a>.</p> |
|
|
|
|
|
|
|
|
|
<hr> |
|
|
|
|
<a name="other-size"> |
|
|
|
|
<h3> |
|
|
|
|
IV.3 I set the pixel size to 8x8, but the resulting glyphs are larger |
|
|
|
|
(or smaller) than that. Why ?? |
|
|
|
|
(or smaller) than that. Why? |
|
|
|
|
</h3> |
|
|
|
|
|
|
|
|
|
<p>A lot of people have a hard time understanding this topic, because |
|
|
|
|
they think of glyphs as fixed-width/height "cells", like those of |
|
|
|
|
fonts used in terminals/consoles. This assumption is simply not valid |
|
|
|
|
with most "modern" font formats, even bitmapped-based ones like |
|
|
|
|
PCF or BDF.</p> |
|
|
|
|
<p>A lot of people have difficulties to understand this topic, because |
|
|
|
|
they think of glyphs as fixed-width resp. fixed-height "cells", like |
|
|
|
|
those of fonts used in terminals/consoles. This assumption is simply |
|
|
|
|
not valid with most "modern" font formats, even bitmapped-based ones |
|
|
|
|
like <tt>PCF</tt> or <tt>BDF</tt>.</p> |
|
|
|
|
|
|
|
|
|
<p>Be aware that the <em>character size</em> that is set either through |
|
|
|
|
<tt>FT_Set_Char_Size</tt> or <tt>FT_Set_Pixel_Sizes</tt> isn't directly |
|
|
|
|
related to the dimension of the glyph bitmaps generated.</p> |
|
|
|
|
<tt>FT_Set_Char_Size()</tt> or <tt>FT_Set_Pixel_Sizes()</tt> isn't |
|
|
|
|
directly related to the dimension of the glyph bitmaps generated.</p> |
|
|
|
|
|
|
|
|
|
<p>Rather, the character size is indeed the size of |
|
|
|
|
<em>an abstract square</em>, called the <em>EM</em>, used by typographers |
|
|
|
|
to design fonts. Scaling two distinct fonts to the same character size, be |
|
|
|
|
it expressed in points or pixels, will generally result in bitmaps with |
|
|
|
|
<em>distinct dimensions</em> !</p> |
|
|
|
|
<p>Rather, the character size is indeed the size of <em>an abstract |
|
|
|
|
square</em>, called the <em>EM</em>, used by typographers to design |
|
|
|
|
fonts. Scaling two distinct fonts to the same character size, be it |
|
|
|
|
expressed in points or pixels, will generally result in bitmaps with |
|
|
|
|
<em>distinct dimensions</em>!</p> |
|
|
|
|
|
|
|
|
|
<p>Note that historically, the EM corresponded to the width of a capital |
|
|
|
|
"M" in Latin typefaces. However, later improvements in typography led to |
|
|
|
|
the designs that greatly detract from this rule. Today, it is not possible |
|
|
|
|
to connect the EM size to a specific font "feature" in a reliable way.</p> |
|
|
|
|
"M" in Latin typefaces. However, later improvements in typography led |
|
|
|
|
to designs that greatly detract from this rule. Today, it is not |
|
|
|
|
possible to connect the EM size to a specific font "feature" in a |
|
|
|
|
reliable way.</p> |
|
|
|
|
|
|
|
|
|
<hr> |
|
|
|
|
|
|
|
|
|
<a name="other-bbox"> |
|
|
|
|
<h3> |
|
|
|
|
IV.4 How can I compute the bounding box of a given string of text without |
|
|
|
|
loading its glyphs before ? |
|
|
|
|
IV.4 How can I compute the bounding box of a given string of text |
|
|
|
|
without loading its glyphs before? |
|
|
|
|
</h3> |
|
|
|
|
|
|
|
|
|
<p>A lot of people want to be able to compute the size in pixels of a simple |
|
|
|
|
string of text with minimal overhead. For example, that can be useful to |
|
|
|
|
draw centered text within a button.</p> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<p>A lot of people want to be able to compute the size in pixels of a |
|
|
|
|
simple string of text with minimal overhead. For example, that can be |
|
|
|
|
useful to draw centered text within a button. (to be continued...)</p> |
|
|
|
|
|
|
|
|
|
<hr> |
|
|
|
|
<a name="other-antialias"> |
|
|
|
|
<h3> |
|
|
|
|
IV.1 Which anti-aliasing algorithm is used by FreeType 2?</h3> |
|
|
|
|
IV.5 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 |
|
|
|
@ -699,7 +698,7 @@ |
|
|
|
|
<hr> |
|
|
|
|
<a name="other-opentype"> |
|
|
|
|
<h3> |
|
|
|
|
IV.2 When will FreeType 2 support OpenType? |
|
|
|
|
IV.6 When will FreeType 2 support OpenType? |
|
|
|
|
</h3> |
|
|
|
|
|
|
|
|
|
<p>Well, the engine already reads OpenType/CFF files perfectly. What it |
|
|
|
@ -707,7 +706,7 @@ |
|
|
|
|
|
|
|
|
|
<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> |
|
|
|
|
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 |
|
|
|
|