Home | All Classes | Main Classes | Annotated | Grouped Classes | Functions |

# Fonts in TQt/Embedded

## Supported Formats

TQt/Embedded supports four font formats:

TrueType (TTF) | The scalable font technology now standard on MS-Windows and Apple Macintosh, and becoming popular on X11.
Postscript Type1 (PFA/PFB) | 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.
Bitmap Distribution Format fonts (BDF) | 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 TQt/Embedded. You should not use these in a production system: they are very slow to load and take up a lot of storage space. Instead, render the BDF to a TQPF.
TQt Prerendered Font (TQPF) | A light-weight non-scalable font format specific to TQt/Embedded.

Support for each of these font formats (except TQPF which is always enabled) can be enabled or disabled independently by using the TQt/Embedded Features Definition. There is support in TQt/Embedded for writing a TQPF font file from any font, so you can initially enable TTF and BDF formats, save TQPF files for the fonts and sizes you need, then remove TTF and BDF support.

See tools/maketqpf for a tool that helps produce TQPF files from the TTF and BDF, or just run your application with the `-savefonts` option.

## Memory Requirements

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 TQPF fonts, the characters are stored in the same format that TQt uses for drawing.

For example, a 10-point Times font containing the ASCII characters uses around 1300 bytes when stored in TQPF format.

Taking advantage of the way the TQPF format is structured, TQt/Embedded memory-maps the data rather than reading and parsing it. This reduces RAM consumption even further.

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.

## Smooth Fonts

TTF, PFA, and TQPF fonts can be rendered as smooth 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):

## Unicode

All fonts used by TQt/Embedded use the Unicode character encoding. Most fonts available today use this encoding, but they usually don't contain all the Unicode characters. A complete 16-point Unicode font uses over 1 MB of memory.

## The font definition file

When TQt/Embedded applications run, they look for a file called `$TQTDIR/lib/fonts/fontdir` or `/usr/local/qt-embedded/lib/fonts/fontdir`. This file defines the fonts available to the application. It has the following format:

> name file renderer italic weight size flags

where

Field | Value
--- | ---
name | `Helvetica`, `Times`, etc.
file | `helvR0810.bdf`, `verdana.ttf`, etc.
renderer | `BDF` or `FT`
italic | `y` or `n`
weight | `50` is normal, `75` is bold, etc.
size | `0` for scalable or point size * 10 (i.e. `120` for 12pt)
flags | `s`: smooth (anti-aliased) `u`: Unicode range when saving (default is Latin-1) `a`: ASCII range when saving (default is Latin-1)

The font definition file does not specify TQPF fonts; these are loaded directly from the directory containing the `fontdir` file, and must be named name_size_weight italicflag.qpf, where

Field | Value
--- | ---
name | `helvetica`, `times`, etc. (in lowercase)
size | point size * 10 (i.e. `120` for 12pt)
italicflag | `i` for italic, otherwise nothing.
weight | `50` is normal, `75` is bold, etc.

If an application is run with the `-savefonts` command-line option, then whenever a font other than a TQPF font is used, a corresponding TQPF file is saved. This allows you to easily find the font usage of your applications and to generate TQPF files so that you can eventually reduce the memory usage of your applications by disabling TTF and BDF support from TQt/Embedded, or by modifying the initialization of `qws_savefonts` in `kernel/qapplication_qws.cpp` of the TQt/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 NameTM") if you are certain that these are the only characters you will need from the font. See TQMemoryManager::savePrerenderedFont() for this functionality.

## Notes

The font definition file, naming conventions for font files, and the format of TQPF files may change in versions of TQt/Embedded after 3.

To generate TQPF files of different rotations, the program must be re-run with an orientation that matches the desired rotation of the TQPF output. An example to generate all 4 rotations of fonts would be to run the following at a real framebuffer:

    for dpy in LinuxFb Transformed:Rot90 Transformed:Rot180 Transformed:Rot270
    do
        TQWS_DISPLAY=$dpy ./maketqpf "$@"
    done

If programs are only ever run in one orientation on a device, only the one appropriate set of fonts is needed.

When enabled, TQt/Embedded uses the powerful FreeType2 library to implement TrueType and Type1 support.