During Font and bitmap server startup:
The Font and bitmap server calls the factory function for all rasterizer DLLs found in \system\fonts
on all drives. This will include the rasterizer DLL for TrueType fonts, freetype.dll
, if it is present.
Files found in \system\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.