Revised.
This commit is contained in:
parent
0901f653db
commit
fed760b1bf
@ -62,7 +62,7 @@
|
||||
<tr bgcolor="#CCCCFF"
|
||||
valign=center><td>
|
||||
<h2>
|
||||
II. Glyph Outlines
|
||||
II. Glyph mutlines
|
||||
</h2>
|
||||
</td></tr>
|
||||
</table>
|
||||
@ -363,7 +363,7 @@
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<p><hr></p>
|
||||
<p><hr></p>
|
||||
|
||||
<center>
|
||||
<table width="100%"
|
||||
|
@ -1,12 +1,13 @@
|
||||
<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
|
||||
<!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="blob">
|
||||
<meta name="GENERATOR" content="Mozilla/4.5 [fr] (Win98; I) [Netscape]">
|
||||
<title>FreeType Glyph Conventions</title>
|
||||
<meta http-equiv="Content-Type"
|
||||
content="text/html; charset=iso-8859-1">
|
||||
<meta name="Author"
|
||||
content="David Turner">
|
||||
<title>FreeType Glyph Conventions</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<body text="#000000"
|
||||
bgcolor="#FFFFFF"
|
||||
@ -14,296 +15,416 @@
|
||||
vlink="#51188E"
|
||||
alink="#FF0000">
|
||||
|
||||
<center>
|
||||
<h1>
|
||||
FreeType Glyph Conventions</h1></center>
|
||||
<h1 align=center>
|
||||
FreeType Glyph Conventions
|
||||
</h1>
|
||||
|
||||
<h2 align=center>
|
||||
Version 2.1
|
||||
</h2>
|
||||
|
||||
<h3 align=center>
|
||||
Copyright 1998-2000 David Turner (<a
|
||||
href="mailto:david@freetype.org">david@freetype.org</a>)<br>
|
||||
Copyright 2000 The FreeType Development Team (<a
|
||||
href="mailto:devel@freetype.org">devel@freetype.org</a>)
|
||||
</h3>
|
||||
|
||||
<center>
|
||||
<h2>
|
||||
version 2.1</h2></center>
|
||||
<table width="65%">
|
||||
<tr><td>
|
||||
|
||||
<center>
|
||||
<h3>
|
||||
Copyright 1998-2000 David Turner (<a href="mailto:david@freetype.org">david@freetype.org</a>)<br>
|
||||
Copyright 2000 The FreeType Development Team (<a href="devel@freetype.org">devel@freetype.org</a>)</h3></center>
|
||||
<center>
|
||||
<table width="100%"
|
||||
border=0
|
||||
cellpadding=5>
|
||||
<tr bgcolor="#CCFFCC"
|
||||
valign=center>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="glyphs-2.html">Previous</a>
|
||||
</td>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="index.html">Contents</a>
|
||||
</td>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="glyphs-4.html">Next</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
<center><table width=650><tr><td>
|
||||
<p><hr></p>
|
||||
|
||||
<center><table width="100%" border=0 cellpadding=5><tr bgcolor="#CCFFCC" valign=center>
|
||||
<td align=center width="30%">
|
||||
<a href="glyphs-2.html">Previous</a>
|
||||
</td>
|
||||
<td align=center width="30%">
|
||||
<a href="index.html">Contents</a>
|
||||
</td>
|
||||
<td align=center width="30%">
|
||||
<a href="glyphs-4.html">Next</a>
|
||||
</td>
|
||||
</tr></table></center>
|
||||
<table width="100%">
|
||||
<tr bgcolor="#CCCCFF"
|
||||
valign=center><td>
|
||||
<h2>
|
||||
III. Glyph metrics
|
||||
</h2>
|
||||
</td></tr>
|
||||
</table>
|
||||
|
||||
<table width="100%"><tr valign=center bgcolor="#ccccff"><td><h2>
|
||||
III. Glyph metrics
|
||||
</h2></td></tr></table>
|
||||
<a name="section-1">
|
||||
<h3>
|
||||
1. Baseline, pens and layouts
|
||||
</h3>
|
||||
|
||||
<h3><a name="section-1">
|
||||
1. Baseline, Pens and Layouts
|
||||
</h3><blockquote>
|
||||
<p>The baseline is an imaginary line that is used to "guide" glyphs when
|
||||
rendering text. It can be horizontal (e.g. Roman, Cyrillic, Arabic,
|
||||
etc.) or vertical (e.g. Chinese, Japanese, Korean, etc). Moreover, to
|
||||
render text, a virtual point, located on the baseline, called the <em>pen
|
||||
position</em> or <em>origin</em>, is used to locate glyphs.</p>
|
||||
|
||||
<p>The baseline is an imaginary line that is used to "guide" glyphs when
|
||||
rendering text. It can be horizontal (e.g. Roman, Cyrillic, Arabic, etc.)
|
||||
or vertical (e.g. Chinese, Japanese, Korean, etc). Moreover, to render
|
||||
text, a virtual point, located on the baseline, called the "pen position"
|
||||
or "origin", is used to locate glyphs.
|
||||
</p>
|
||||
<p>Each layout uses a different convention for glyph placement:</p>
|
||||
|
||||
<p>Each layout uses a different convention for glyph placement:</p>
|
||||
<ul>
|
||||
<li>
|
||||
with horizontal layout, glyphs simply "rest" on the baseline. Text
|
||||
is rendered by incrementing the pen position, either to the right or
|
||||
to the left.
|
||||
</li>
|
||||
<ul>
|
||||
<li>
|
||||
<p>With horizontal layout, glyphs simply "rest" on the baseline.
|
||||
Text is rendered by incrementing the pen position, either to the
|
||||
right or to the left.</p>
|
||||
|
||||
<p>The distance between two successive pen positions is
|
||||
glyph-specific and is called the <em>advance width</em>. Note that
|
||||
its value is <em>always</em> positive, even for right-to-left
|
||||
oriented alphabets, like Arabic. This introduces some differences
|
||||
in the way text is rendered.</p>
|
||||
|
||||
<p><em>The pen position is always placed on the baseline.</em></p>
|
||||
|
||||
<p><center>
|
||||
<img src="Image1.png"
|
||||
height=179 width=458
|
||||
alt="horizontal layout">
|
||||
</center></p>
|
||||
</li>
|
||||
<li>
|
||||
<p>With a vertical layout, glyphs are centered around the
|
||||
baseline:</p>
|
||||
|
||||
<p><center>
|
||||
<img src="Image2.png"
|
||||
height=275 width=162
|
||||
alt="vertical layout">
|
||||
</center></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<p>the distance between two successive pen positions is glyph-specific
|
||||
and is called the <b>advance width</b>. Note that its value is _always_
|
||||
positive, even for right-to-left oriented alphabets, like Arabic. This
|
||||
introduces some differences in the way text is rendered.
|
||||
</p>
|
||||
<a name="section-2">
|
||||
<h3>
|
||||
2. Typographic metrics and bounding boxes
|
||||
</h3>
|
||||
|
||||
<p>IMPORTANT NOTE: The pen position is always placed on the baseline.
|
||||
</p>
|
||||
<p>A various number of face metrics are defined for all glyphs in a
|
||||
given font.</p>
|
||||
|
||||
<p><center><img SRC="Image1.png" height=179 width=458></center></p>
|
||||
<ul>
|
||||
<li>
|
||||
<p><em>Ascent</em></p>
|
||||
|
||||
<p>The distance from the baseline to the highest/upper grid
|
||||
coordinate used to place an outline point. It is a positive value,
|
||||
due to the grid's orientation with the <i>Y</i> axis
|
||||
upwards.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p><em>Descent</em></p>
|
||||
|
||||
<p>The distance from the baseline to the lowest grid coordinate used
|
||||
to place an outline point. This is a negative value, due to the
|
||||
grid's orientation.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p><em>Linegap</em></p>
|
||||
|
||||
<p>The distance that must be placed between two lines of text. The
|
||||
baseline-to-baseline distance should be computed as:
|
||||
|
||||
<center><p>
|
||||
<tt>ascent - descent + linegap</tt>
|
||||
</p></center>
|
||||
|
||||
<p>if you use the typographic values.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Other, simpler metrics are:</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<p><em>The glyph's bounding box</em>, also called <em>bbox</em></p>
|
||||
|
||||
<p>This is an imaginary box that encloses all glyphs from the font,
|
||||
usually as tightly as possible. It is represented by four fields,
|
||||
namely <tt>xMin</tt>, <tt>yMin</tt>, <tt>xMax</tt>, and
|
||||
<tt>yMax</tt>, that can be computed for any outline. Their values
|
||||
can be in font units (if measured in the original outline) or in
|
||||
fractional/integer pixel units (when measured on scaled
|
||||
outlines).</p>
|
||||
|
||||
<p>Note that if it wasn't for grid-fitting, you wouldn't need to
|
||||
know a box's complete values, but only its dimensions to know how
|
||||
big is a glyph outline/bitmap. However, correct rendering of hinted
|
||||
glyphs needs the preservation of important grid alignment on each
|
||||
glyph translation/placement on the baseline.</p>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p><em>Internal leading</em></p>
|
||||
|
||||
<p>This concept comes directly from the world of traditional
|
||||
typography. It represents the amount of space within the
|
||||
<em>leading</em> which is reserved for glyph features that lay
|
||||
outside of the EM square (like accentuation). It usually can be
|
||||
computed as:</p>
|
||||
|
||||
<center><p>
|
||||
<tt>internal leading = ascent - descent - EM_size</tt>
|
||||
</p></center>
|
||||
</li>
|
||||
|
||||
<li>
|
||||
<p><em>External leading</em></p>
|
||||
|
||||
<p>This is another name for the line gap.</p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<li>with a vertical layout, glyphs are centered around the baseline:</li>
|
||||
<a name="section-3">
|
||||
<h3>
|
||||
3. Bearings and Advances
|
||||
</h3>
|
||||
|
||||
<p><center><img SRC="Image2.png" height=275 width=162></center></p>
|
||||
Each glyph has also distances called <em>bearings</em> and
|
||||
<em>advances</em>. Their definition is constant, but their values
|
||||
depend on the layout, as the same glyph can be used to render text
|
||||
either horizontally or vertically:
|
||||
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
<p><em>Left side bearing</em> or <em>bearingX</em></p>
|
||||
|
||||
</blockquote><h3><a name="section-2">
|
||||
2. Typographic metrics and bounding boxes
|
||||
</h3><blockquote>
|
||||
<p>The horizontal distance from the current pen position to the
|
||||
glyph's left bbox edge. It is positive for horizontal layouts, and
|
||||
in most cases negative for vertical one.</p>
|
||||
</li>
|
||||
|
||||
<p>A various number of face metrics are defined for all glyphs in a given
|
||||
font.</p>
|
||||
<li>
|
||||
<p><em>Top side bearing</em> or <em>bearingY</em></p>
|
||||
|
||||
<p><b>the ascent</b></p>
|
||||
<ul>
|
||||
<p>this is the distance from the baseline to the highest/upper grid coordinate
|
||||
used to place an outline point. It is a positive value, due to the grid's
|
||||
orientation with the Y axis upwards.
|
||||
</p>
|
||||
</ul>
|
||||
<p>The vertical distance from the baseline to the top of the glyph's
|
||||
bbox. It is usually positive for horizontal layouts, and negative
|
||||
for vertical ones</p>
|
||||
</li>
|
||||
|
||||
<p><br><b>the descent</b></p>
|
||||
<ul><p>
|
||||
the distance from the baseline to the lowest grid coordinate used to
|
||||
place an outline point. This is a negative value, due to the grid's
|
||||
orientation.
|
||||
</p></ul>
|
||||
<li>
|
||||
<p><em>Advance width</em> or <em>advanceX</em></p>
|
||||
|
||||
<p><br><b>the linegap</b>
|
||||
<ul>the distance that must be placed between two lines of text. The baseline-to-baseline
|
||||
distance should be computed as:
|
||||
<center>
|
||||
<p><tt>ascent - descent + linegap</tt></center>
|
||||
if you use the typographic values.</ul>
|
||||
Other, simpler metrics are:
|
||||
<p><b>the glyph's bounding box</b>, also called "<b>bbox</b>"
|
||||
<ul>this is an imaginary box that encloses all glyphs from the font, as
|
||||
tightly as possible. It is represented by four fields, namely <tt>xMin</tt>,
|
||||
<tt>yMin</tt>,
|
||||
<tt>xMax</tt>,
|
||||
and <tt>yMax</tt>, that can be computed for any outline. Their values can
|
||||
be in font units (if measured in the original outline) or in fractional/integer
|
||||
pixel units (when measured on scaled outlines).
|
||||
<p>Note that if it wasn't for grid-fitting, you wouldn't need to know a
|
||||
box's complete values, but only its dimensions to know how big is a glyph
|
||||
outline/bitmap. However, correct rendering of hinted glyphs needs the preservation
|
||||
of important grid alignment on each glyph translation/placement on the
|
||||
baseline.</ul>
|
||||
<b>the internal leading</b>
|
||||
<ul>this concept comes directly from the world of traditional typography.
|
||||
It represents the amount of space within the "leading" which is reserved
|
||||
for glyph features that lay outside of the EM square (like accentuation).
|
||||
It usually can be computed as:
|
||||
<center>
|
||||
<p><tt>internal leading = ascent - descent - EM_size</tt></center>
|
||||
</ul>
|
||||
<b>the external leading</b>
|
||||
<ul>this is another name for the line gap.</ul>
|
||||
</ul>
|
||||
<p>The horizontal distance the pen position must be incremented (for
|
||||
left-to-right writing) or decremented (for right-to-left writing) by
|
||||
after each glyph is rendered when processing text. It is always
|
||||
positive for horizontal layouts, and null for vertical ones.</p>
|
||||
</li>
|
||||
|
||||
<h3><a name="section-3">
|
||||
3. Bearings and Advances</h3>
|
||||
<li>
|
||||
<p><em>Advance height</em> <em>advanceY</em></p>
|
||||
|
||||
<ul>Each glyph has also distances called "bearings" and "advances". Their
|
||||
definition is constant, but their values depend on the layout, as the same
|
||||
glyph can be used to render text either horizontally or vertically:
|
||||
<p><b>the left side bearing: a.k.a. bearingX</b>
|
||||
<ul>this is the horizontal distance from the current pen position to the
|
||||
glyph's left bbox edge. It is positive for horizontal layouts, and most
|
||||
generally negative for vertical one.</ul>
|
||||
<p>The vertical distance the pen position must be decremented by
|
||||
after each glyph is rendered. It is always null for horizontal
|
||||
layouts, and positive for vertical layouts.</p>
|
||||
</li>
|
||||
|
||||
<p><br><b>the top side bearing: a.k.a. bearingY</b>
|
||||
<ul>this is the vertical distance from the baseline to the top of the glyph's
|
||||
bbox. It is usually positive for horizontal layouts, and negative for vertical
|
||||
ones</ul>
|
||||
<li>
|
||||
<p><em>Glyph width</em></p>
|
||||
|
||||
<p><br><b>the advance width: a.k.a. advanceX</b>
|
||||
<ul>is the horizontal distance the pen position must be incremented (for
|
||||
left-to-right writing) or decremented (for right-to-left writing) by after
|
||||
each glyph is rendered when processing text. It is always positive for
|
||||
horizontal layouts, and null for vertical ones.</ul>
|
||||
<p>The glyph's horizontal extent. For unscaled font coordinates, it
|
||||
is <tt>bbox.xMax-bbox.xMin</tt>. For scaled glyphs, its computation
|
||||
requests specific care, described in the grid-fitting chapter
|
||||
below.</p>
|
||||
</li>
|
||||
|
||||
<p><br><b>the advance height: a.k.a. advanceY</b>
|
||||
<ul>is the vertical distance the pen position must be decremented by after
|
||||
each glyph is rendered. It is always null for horizontal layouts, and positive
|
||||
for vertical layouts.</ul>
|
||||
<li>
|
||||
<p><em>Glyph height</em>
|
||||
|
||||
<p><br><b>the glyph width</b>
|
||||
<ul>this is simply the glyph's horizontal extent. More simply it is (bbox.xMax-bbox.xMin)
|
||||
for unscaled font coordinates. For scaled glyphs, its computation requests
|
||||
specific care, described in the grid-fitting chapter below.</ul>
|
||||
<p>The glyph's vertical extent. For unscaled font coordinates, it is
|
||||
<tt>bbox.yMax-bbox.yMin</tt>. For scaled glyphs, its computation
|
||||
requests specific care, described in the grid-fitting chapter
|
||||
below.</p>
|
||||
</li>
|
||||
|
||||
<p><br><b>the glyph height</b>
|
||||
<ul>this is simply the glyph's vertical extent. More simply, it is (bbox.yMax-bbox.yMin)
|
||||
for unscaled font coordinates. For scaled glyphs, its computation requests
|
||||
specific care, described in the grid-fitting chapter below.</ul>
|
||||
<li>
|
||||
<p><em>Right side bearing</em></p>
|
||||
|
||||
<p><br><b>the right side bearing</b>
|
||||
<ul>is only used for horizontal layouts to describe the distance from the
|
||||
bbox's right edge to the advance width. It is in most cases a non-negative
|
||||
number.</ul>
|
||||
<p>Only used for horizontal layouts to describe the distance from
|
||||
the bbox's right edge to the advance width. It is in most cases a
|
||||
non-negative number:</p>
|
||||
|
||||
<center><tt>advance_width - left_side_bearing - (xMax-xMin)</tt></center>
|
||||
<p><center>
|
||||
<tt>advance_width - left_side_bearing - (xMax-xMin)</tt>
|
||||
</center></p>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>Here is a picture giving all the details for horizontal metrics :
|
||||
<center>
|
||||
<p><img SRC="Image3.png" height=253 width=388></center>
|
||||
<p>Here is a picture giving all the details for horizontal metrics:
|
||||
|
||||
<p>And here is another one for the vertical metrics :
|
||||
<center>
|
||||
<p><img SRC="Image4.png" height=278 width=294></center>
|
||||
</ul>
|
||||
<center><p>
|
||||
<img src="Image3.png"
|
||||
height=253 width=388
|
||||
alt="horizontal glyph metrics">
|
||||
</p></center>
|
||||
|
||||
<h3><a name="section-4">
|
||||
4. The effects of grid-fitting</h3>
|
||||
<p>And here is another one for the vertical metrics:</p>
|
||||
|
||||
<ul>Because hinting aligns the glyph's control points to the pixel grid,
|
||||
this process slightly modifies the dimensions of character images in ways
|
||||
that differ from simple scaling.
|
||||
<p>For example, the image of the lowercase "m" letter sometimes fits a
|
||||
square in the master grid. However, to make it readable at small pixel
|
||||
sizes, hinting tends to enlarge its scaled outline in order to keep its
|
||||
three legs distinctly visible, resulting in a larger character bitmap.
|
||||
<p>The glyph metrics are also influenced by the grid-fitting process. Mainly
|
||||
because :
|
||||
<br>
|
||||
<ul>
|
||||
<li>
|
||||
The image's width and height are altered. Even if this is only by one pixel,
|
||||
it can make a big difference at small pixel sizes</li>
|
||||
<center><p>
|
||||
<img src="Image4.png"
|
||||
height=278 width=294
|
||||
alt="vertical glyph metrics">
|
||||
</p></center>
|
||||
|
||||
<li>
|
||||
The image's bounding box is modified, thus modifying the bearings</li>
|
||||
|
||||
<li>
|
||||
The advances must be updated. For example, the advance width must be incremented
|
||||
when the hinted bitmap is larger than the scaled one, to reflect the augmented
|
||||
glyph width.</li>
|
||||
</ul>
|
||||
<a name="section-4">
|
||||
<h3>
|
||||
4. The effects of grid-fitting
|
||||
</h3>
|
||||
|
||||
<p><br>Note also that :
|
||||
<br>
|
||||
<ul>
|
||||
<li>
|
||||
Because of hinting, simply scaling the font ascent or descent might not
|
||||
give correct results. A simple solution consists in keeping the ceiling
|
||||
of the scaled ascent, and floor of the scaled descent.</li>
|
||||
</ul>
|
||||
<p>Because hinting aligns the glyph's control points to the pixel grid,
|
||||
this process slightly modifies the dimensions of character images in
|
||||
ways that differ from simple scaling.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
There is no easy way to get the hinted glyph and advance widths of a range
|
||||
of glyphs, as hinting works differently on each outline. The only solution
|
||||
is to hint each glyph separately and record the returned values. Some formats,
|
||||
like TrueType, even include a table of pre-computed values for a small
|
||||
set of common character pixel sizes.</li>
|
||||
</ul>
|
||||
<p>For example, the image of the lowercase "m" letter sometimes fits a
|
||||
square in the master grid. However, to make it readable at small pixel
|
||||
sizes, hinting tends to enlarge its scaled outline in order to keep its
|
||||
three legs distinctly visible, resulting in a larger character
|
||||
bitmap.</p>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Hinting depends on the final character width and height in pixels, which
|
||||
means that it is highly resolution-dependent. This property makes correct
|
||||
WYSIWYG layouts difficult to implement.</li>
|
||||
</ul>
|
||||
<p>The glyph metrics are also influenced by the grid-fitting process:
|
||||
|
||||
<p><br><b>IMPORTANT NOTE:</b>
|
||||
<br>Performing 2D transforms on glyph outlines is very easy with FreeType.
|
||||
However, when using translation on a hinted outlines, one should aways
|
||||
take care of <b>exclusively using integer pixel distances</b> (which
|
||||
means that the parameters to the FT_Translate_Outline API should all be
|
||||
multiples of 64, as the point coordinates are in 26.6 fixed float format).
|
||||
<p><b>Otherwise</b>, the translation will simply <b>ruin the hinter's work</b>,
|
||||
resulting in a very low quality bitmaps.
|
||||
<br>
|
||||
<br> </ul>
|
||||
<ul>
|
||||
<li>
|
||||
The image's width and height are altered. Even if this is only by
|
||||
one pixel, it can make a big difference at small pixel sizes.
|
||||
</li>
|
||||
<li>
|
||||
The image's bounding box is modified, thus modifying the bearings.
|
||||
</li>
|
||||
<li>
|
||||
The advances must be updated. For example, the advance width must
|
||||
be incremented if the hinted bitmap is larger than the scaled one,
|
||||
to reflect the augmented glyph width.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3><a name="section-5">
|
||||
5. Text widths and bounding box :</h3>
|
||||
<p>This has some implications:</p>
|
||||
|
||||
<ul>As seen before, the "origin" of a given glyph corresponds to the position
|
||||
of the pen on the baseline. It is not necessarily located on one of the
|
||||
glyph's bounding box corners, unlike many typical bitmapped font formats.
|
||||
In some cases, the origin can be out of the bounding box, in others, it
|
||||
can be within it, depending on the shape of the given glyph.
|
||||
<p>Likewise, the glyph's "advance width" is the increment to apply to the
|
||||
pen position during layout, and is not related to the glyph's "width",
|
||||
which really is the glyph's bounding width.
|
||||
<br>
|
||||
<p>The same conventions apply to strings of text. This means that :
|
||||
<br>
|
||||
<ul>
|
||||
<ul>
|
||||
<li>
|
||||
The bounding box of a given string of text doesn't necessarily contain
|
||||
the text cursor, nor is the latter located on one of its corners.</li>
|
||||
</ul>
|
||||
<ul>
|
||||
<li>
|
||||
Because of hinting, simply scaling the font ascent or descent might
|
||||
not give correct results. A possible solution is to keepthe ceiling
|
||||
of the scaled ascent, and floor of the scaled descent.
|
||||
</li>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
The string's advance width isn't related to its bounding box's dimensions.
|
||||
Especially if it contains beginning and terminal spaces or tabs.</li>
|
||||
</ul>
|
||||
<li>
|
||||
There is no easy way to get the hinted glyph and advance widths of a
|
||||
range of glyphs, as hinting works differently on each outline. The
|
||||
only solution is to hint each glyph separately and record the
|
||||
returned values. Some formats, like TrueType, even include a table
|
||||
of pre-computed values for a small set of common character pixel
|
||||
sizes.
|
||||
</li>
|
||||
<li>
|
||||
Hinting depends on the final character width and height in pixels,
|
||||
which means that it is highly resolution-dependent. This property
|
||||
makes correct WYSIWYG layouts difficult to implement.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
Finally, additional processing like kerning creates strings of text whose
|
||||
dimensions are not directly related to the simple juxtaposition of individual
|
||||
glyph metrics. For example, the advance width of "VA" isn't the sum of
|
||||
the advances of "V" and "A" taken separately.</li>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
<center><table width="100%" border=0 cellpadding=5><tr bgcolor="#CCFFCC" valign=center>
|
||||
<td align=center width="30%">
|
||||
<a href="glyphs-2.html">Previous</a>
|
||||
</td>
|
||||
<td align=center width="30%">
|
||||
<a href="index.html">Contents</a>
|
||||
</td>
|
||||
<td align=center width="30%">
|
||||
<a href="glyphs-4.html">Next</a>
|
||||
</td>
|
||||
</tr></table></center>
|
||||
<em>
|
||||
<p>Performing 2D transformations on glyph outlines is very easy with
|
||||
FreeType. However, when using translation on a hinted outlines, one
|
||||
should aways take care of <b>exclusively using integer pixel
|
||||
distances</b> (which means that the parameters to the
|
||||
<tt>FT_Translate_Outline()</tt> API should all be multiples
|
||||
of 64, as the point coordinates are in 26.6 fixed float
|
||||
format).</p>
|
||||
|
||||
</td></tr></table></center>
|
||||
<p>Otherwise, the translation will simply <em>ruin the hinter's
|
||||
work</em>, resulting in a very low quality bitmaps!</p>
|
||||
</em>
|
||||
|
||||
|
||||
<a name="section-5">
|
||||
<h3>
|
||||
5. Text widths and bounding box
|
||||
</h3>
|
||||
|
||||
<p>As seen before, the "origin" of a given glyph corresponds to the
|
||||
position of the pen on the baseline. It is not necessarily located on
|
||||
one of the glyph's bounding box corners, unlike many typical bitmapped
|
||||
font formats. In some cases, the origin can be out of the bounding box,
|
||||
in others, it can be within it, depending on the shape of the given
|
||||
glyph.</p>
|
||||
|
||||
<p>Likewise, the glyph's "advance width" is the increment to apply to
|
||||
the pen position during layout, and is not related to the glyph's
|
||||
"width", which really is the glyph's bounding width.
|
||||
|
||||
<p>The same conventions apply to strings of text. This means that:
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
The bounding box of a given string of text doesn't necessarily
|
||||
contain the text cursor, nor is the latter located on one of its
|
||||
corners.
|
||||
</li>
|
||||
|
||||
<li>
|
||||
The string's advance width isn't related to its bounding box
|
||||
dimensions. Especially if it contains beginning and terminal spaces
|
||||
or tabs.
|
||||
</li>
|
||||
<li>
|
||||
Finally, additional processing like kerning creates strings of text
|
||||
whose dimensions are not directly related to the simple
|
||||
juxtaposition of individual glyph metrics. For example, the advance
|
||||
width of "VA" isn't the sum of the advances of "V" and "A" taken
|
||||
separately.
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p><hr></p>
|
||||
|
||||
<center>
|
||||
<table width="100%"
|
||||
border=0
|
||||
cellpadding=5>
|
||||
<tr bgcolor="#CCFFCC"
|
||||
valign=center>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="glyphs-2.html">Previous</a>
|
||||
</td>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="index.html">Contents</a>
|
||||
</td>
|
||||
<td align=center
|
||||
width="30%">
|
||||
<a href="glyphs-4.html">Next</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
</td></tr>
|
||||
</table>
|
||||
</center>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
Loading…
Reference in New Issue
Block a user