summaryrefslogtreecommitdiffstats
path: root/doc/html/emb-fonts.html
blob: 6583963aa5876ac20e7e011bfdab26be475dddd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- /home/espenr/tmp/qt-3.3.8-espenr-2499/qt-x11-free-3.3.8/doc/qws.doc:185 -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Fonts in Qt/Embedded</title>
<style type="text/css"><!--
fn { margin-left: 1cm; text-indent: -1cm; }
a:link { color: #004faf; text-decoration: none }
a:visited { color: #672967; text-decoration: none }
body { background: #ffffff; color: black; }
--></style>
</head>
<body>

<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr bgcolor="#E5E5E5">
<td valign=center>
 <a href="index.html">
<font color="#004faf">Home</font></a>
 | <a href="classes.html">
<font color="#004faf">All&nbsp;Classes</font></a>
 | <a href="mainclasses.html">
<font color="#004faf">Main&nbsp;Classes</font></a>
 | <a href="annotated.html">
<font color="#004faf">Annotated</font></a>
 | <a href="groups.html">
<font color="#004faf">Grouped&nbsp;Classes</font></a>
 | <a href="functions.html">
<font color="#004faf">Functions</font></a>
</td>
<td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>Fonts in Qt/Embedded</h1>

 
<p> <h2> Supported Formats
</h2>
<a name="1"></a><p> Qt/Embedded supports four font formats:
<p> <center><table cellpadding="4" cellspacing="2" border="0">
<tr bgcolor="#f0f0f0">
<td valign="top"><b>TrueType (TTF)</b>
<td valign="top">The scalable font technology now standard on MS-Windows and Apple
Macintosh, and becoming popular on X11.
<tr bgcolor="#d0d0d0">
<td valign="top"><b>Postscript Type1 (PFA/PFB)</b>
<td valign="top">Scalable fonts often used by printers, also popular on X11. These
are similar in functionality to TTF fonts and are not discussed
further in this document.
<tr bgcolor="#f0f0f0">
<td valign="top"><b>Bitmap Distribution Format<br>fonts (BDF)</b>
<td valign="top">A standard format for non-scalable fonts. A large number of BDF
fonts are supplied as part of standard X11 distributions - most of
these can be used with Qt/Embedded. You should <em>not</em> use these in a
production system: they are very slow to load and take up a <em>lot</em> of
storage space. Instead, render the BDF to a QPF.
<tr bgcolor="#d0d0d0">
<td valign="top"><b>Qt Prerendered Font (QPF)</b>
<td valign="top">A light-weight non-scalable font format specific to Qt/Embedded.
</table></center>
<p> Support for each of these font formats (except QPF which is always
enabled) can be enabled or disabled independently by using the <a href="emb-features.html">Qt/Embedded Features Definition</a>. There is
support in Qt/Embedded for writing a QPF font file from any font, so
you can initially enable TTF and BDF formats, save QPF files for the
fonts and sizes you need, then remove TTF and BDF support.
<p> See <a href="makeqpf.html">tools/makeqpf</a> for a tool that helps
produce QPF files from the TTF and BDF, or just run your application
with the <tt>-savefonts</tt> option.
<p> <h2> Memory Requirements
</h2>
<a name="2"></a><p> With TTF fonts, each character in the font at a given point size is
only rendered when first used in a drawing or metrics operation. With
BDF fonts all characters are rendered when the font is used.
With QPF fonts, the characters are stored in the same format that Qt
uses for drawing.
<p> For example, a 10-point Times font containing the ASCII characters uses
around 1300 bytes when stored in QPF format.
<p> Taking advantage of the way the QPF format is structured, Qt/Embedded
memory-maps the data rather than reading and parsing it.
This reduces RAM consumption even further.
<p> Scalable fonts use a larger amount of memory per font, but
these fonts provide a memory saving if many different sizes of each
font are needed.
<p> <h2> Smooth Fonts
</h2>
<a name="3"></a><p> TTF, PFA, and QPF fonts can be rendered as <em>smooth</em> anti-aliased
fonts to give superior readability, especially on low-resolution
devices. The difference between smooth and non-smooth fonts is
illustrated below (you may need to change your display to low
resolution to see the difference):
<p> <center><img src="unsmooth.png" alt="unsmooth"></center> 
<p> <center><img src="smooth.png" alt="smooth"></center> 
<p> <h2> Unicode
</h2>
<a name="4"></a><p> All fonts used by Qt/Embedded use the Unicode character encoding.
Most fonts available today use this encoding, but they usually don't
contain all the Unicode characters. A <em>complete</em> 16-point Unicode
font uses over 1 MB of memory.
<p> <h2> The font definition file
</h2>
<a name="5"></a><p> When Qt/Embedded applications run, they look for a file called
<tt>$QTDIR/lib/fonts/fontdir</tt> or
<tt>/usr/local/qt-embedded/lib/fonts/fontdir</tt>. This file defines the
fonts available to the application. It has the following format:
<blockquote>
<em>name</em> <em>file</em> <em>renderer</em> <em>italic</em> <em>weight</em> <em>size</em> <em>flags</em>
</blockquote>
where
<p> <center><table cellpadding="4" cellspacing="2" border="0">
<tr bgcolor="#a2c511"> <th valign="top">Field <th valign="top">Value
<tr bgcolor="#f0f0f0"> <td valign="top"><em>name</em> <td valign="top"><tt>Helvetica</tt>, <tt>Times</tt>, etc.
<tr bgcolor="#d0d0d0"> <td valign="top"><em>file</em> <td valign="top"><tt>helvR0810.bdf</tt>, <tt>verdana.ttf</tt>, etc.
<tr bgcolor="#f0f0f0"> <td valign="top"><em>renderer</em> <td valign="top"><tt>BDF</tt> or <tt>FT</tt>
<tr bgcolor="#d0d0d0"> <td valign="top"><em>italic</em> <td valign="top"><tt>y</tt> or <tt>n</tt>
<tr bgcolor="#f0f0f0"> <td valign="top"><em>weight</em> <td valign="top"><tt>50</tt> is normal, <tt>75</tt> is bold, etc.
<tr bgcolor="#d0d0d0"> <td valign="top"><em>size</em> <td valign="top"><tt>0</tt> for scalable or point size * 10 (i.e. <tt>120</tt>
for 12pt)
<tr bgcolor="#f0f0f0"> <td valign="top"><em>flags</em> <td valign="top"><ul>
<li> <tt>s</tt>: smooth (anti-aliased)
<li> <tt>u</tt>: Unicode range when saving (default is Latin-1)
<li> <tt>a</tt>: ASCII range when saving (default is Latin-1)
</ul>
</table></center>
<p> The font definition file does not specify QPF fonts; these are loaded 
directly from the directory containing the <tt>fontdir</tt> file, and must
be named <em>name</em>_<em>size</em>_<em>weight</em><em>italicflag</em>.qpf, where
<p> <center><table cellpadding="4" cellspacing="2" border="0">
<tr bgcolor="#a2c511"> <th valign="top">Field <th valign="top">Value
<tr bgcolor="#d0d0d0"> <td valign="top"><em>name</em> <td valign="top"><tt>helvetica</tt>, <tt>times</tt>, etc. (in lowercase)
<tr bgcolor="#f0f0f0"> <td valign="top"><em>size</em> <td valign="top">point size * 10 (i.e. <tt>120</tt> for 12pt)
<tr bgcolor="#d0d0d0"> <td valign="top"><em>italicflag</em> <td valign="top"><tt>i</tt> for italic, otherwise nothing.
<tr bgcolor="#f0f0f0"> <td valign="top"><em>weight</em> <td valign="top"><tt>50</tt> is normal, <tt>75</tt> is bold, etc.
</table></center>
<p> If an application is run with the <tt>-savefonts</tt> command-line option,
then whenever a font other than a QPF font is used, a corresponding QPF file
is saved. This allows you to easily find the font usage of your applications
and to generate QPF files so that you can eventually reduce the memory
usage of your applications by disabling TTF and BDF support from Qt/Embedded,
or by modifying the initialization of <tt>qws_savefonts</tt> in
<tt>kernel/qapplication_qws.cpp</tt> of the Qt/Embedded library source code.
In extreme cases of memory-saving, it is possible to save partially-rendered
fonts (i.e. only the characters in "Product Name<sup>TM</sup>") if you are
certain that these are the only characters you will need from the font.
See QMemoryManager::savePrerenderedFont() for this functionality.
<p> <h2> Notes
</h2>
<a name="6"></a><p> The font definition file, naming conventions for font files, and the format
of QPF files may change in versions of Qt/Embedded after 3.
<p>
To generate QPF files of different rotations, the program must be re-run with
an orientation that matches the desired rotation of the QPF output. An example to
generate all 4 rotations of fonts would be to run the following at a real framebuffer:
<pre>
for dpy in LinuxFb Transformed:Rot90 Transformed:Rot180 Transformed:Rot270
do
    QWS_DISPLAY=$dpy ./makeqpf "$@"
done
</pre><p> If programs are only ever run in one orientation on a device, only the one
appropriate set of fonts is needed.
<p>
When enabled, Qt/Embedded uses the powerful FreeType2 library to implement
TrueType and Type1 support.
<p> 
<!-- eof -->
<p><address><hr><div align=center>
<table width=100% cellspacing=0 border=0><tr>
<td>Copyright &copy; 2007
<a href="troll.html">Trolltech</a><td align=center><a href="trademarks.html">Trademarks</a>
<td align=right><div align=right>Qt 3.3.8</div>
</table></div></address></body>
</html>