During Font and bitmap server startup:
The Font and bitmap server calls the factory function for all
rasterizer DLLs found in \resources\fonts\
on all drives. This
will include the rasterizer DLL for TrueType fonts, freetype.dll
,
if it is present.
Files found in \resources\fonts\
on all drives are
offered to all Open Font System rasterizers, one at a time, by calling the
rasterizer's NewFontFileL()
function.
The first rasterizer that recognises and accepts the file returns a
non-null COpenFontFile
object. The COpenFontFile
object is then added to a list of Open Font files. Fonts not accepted by any
rasterizer are assumed to be Symbian-format bitmap files.
Clients request a CFont*
matching a particular font
specification using CBitmapDevice::GetNearestFontInPixels()
.
The framework then:
Modifies the font specification by reducing the size of the font if superscript or subscript is specified.
Finds the best matching Open Font System font.
It does this by calling
COpenFontFile::GetNearestFontInPixels()
for each loaded Open Font
System font file object and calculating a weighting for how well each font
matches the specification.
Finds the best matching Bitmap font.
Selects the best matching font (from between the best Open Font System font and the best Bitmap font) and returns it to the client.
If there is no Open Font System font the Bitmap font is selected, and vice versa. If both candidates exist, the best match of the two is used. If they are both perfect matches then the Bitmap font is used.
Note that there is no way for the user to request a particular type of font format, e.g. It is not possible to specifically request a TrueType font or an Adobe Type 1 font etc.
The Font and Bitmap Server gets the glyph for each character, using
this CFont
, as required. Glyphs that have already been created are
taken from a glyph cache.
New glyphs are created by implementations of the virtual function
COpenFont::RasterizeL()
, and are then added to a per-font cache.