Return to Unit Reference
Description
Ultibo Font Interface unit
The fonts supported by Ultibo are a bitmap format that contains a block of data where each character is represented by a number of consecutive bytes.
Fonts can either be statically compiled as a pascal unit and loaded during startup or can be dynamically loaded by passing a header and data block to the FontLoad() function. A Font Builder tool is available to convert common bitmap font formats into a pascal unit for compiling with a project.
For an 8x16 (8 pixels wide and 16 pixels high) font the data contains 8 bits (1 byte) for each of the 16 rows that make up a character and each character would be 16 bytes long.
For a 12x22 font the data contains 12 bits padded to 16 bits (2 bytes) for each of the 22 rows that make up a character. Therefore each character would be 44 bytes in length.
This unit can support any size font from 8x6 to 32x64 including every combination in between. For fonts where the bits per row is greater than one byte both little endian and big endian format is supported. Allowance has been made for including a Unicode translation table with each font so that writing of Unicode text to the console can be supported as well as an extended bitmap format where character data includes alpha or color information or both. These
features are yet to be fully implemented.
Constants
[Expand]
Font specific constants FONT_*
FONT_MIN_COUNT = 256;
|
|
|
FONT_MIN_WIDTH = 8;
|
|
FONT_MAX_WIDTH = 32;
|
|
|
FONT_MIN_HEIGHT = 6;
|
|
FONT_MAX_HEIGHT = 64;
|
|
[Expand]
Font signature FONT_SIGNATURE_*
FONT_SIGNATURE = $77DE1BBC;
|
|
[Expand]
Font name FONT_*_LENGTH
FONT_NAME_LENGTH = SIZE_64;
|
Length of font name
|
FONT_DESC_LENGTH = SIZE_128;
|
Length of font description
|
[Expand]
Font mode FONT_MODE_*
FONT_MODE_NONE = 0;
|
|
FONT_MODE_PIXEL = 1;
|
A font with 1 bit per pixel in the character data
|
FONT_MODE_ALPHA8 = 2;
|
A font with 8 bits of alpha blending per pixel in the character data
|
FONT_MODE_RGBA32 = 3;
|
A font with 32 bits RGBA per pixel in the character data
|
[Expand]
Font flag FONT_FLAG_*
FONT_FLAG_NONE = $00000000;
|
|
FONT_FLAG_UNICODE = $00000001;
|
Font includes a unicode translation table
|
FONT_FLAG_CODEPAGE = $00000002;
|
Font has a specified codepage
|
FONT_FLAG_BIGENDIAN = $00000004;
|
Font characters are in big endian order (Only applies to characters larger than one byte)
|
FONT_FLAG_RIGHTALIGN = $00000008;
|
Font characters are right aligned, no need to shift during load
|
FONT_FLAG_VARIABLE = $00000010;
|
Font characters are variable width rather than fixed
|
Type definitions
Font header
[Expand]
PFontHeader = ^TFontHeader;
TFontHeader = record
Width:LongWord;
|
Width of each character in pixels
|
Height:LongWord;
|
Height of each character in pixels
|
Count:LongWord;
|
Number of character glyphs in data
|
Mode:LongWord;
|
Font mode (eg FONT_MODE_PIXEL)
|
Flags:LongWord;
|
Font flags (eg FONT_FLAG_UNICODE)
|
Mask:LongWord;
|
Transparency mask for a bitmap font
|
CodePage:LongWord;
|
Font codepage (CP_ACP if not specified)
|
Name:String[63];
|
Font name
|
Description:String[127];
|
Font description
|
Font data
[Expand]
PFontData = ^TFontData;
TFontData = record
Data:array[0..0] of Byte;
|
|
Font data 8x6
[Expand]
PFontData8x6 = ^TFontData8x6;
TFontData8x6 = record Data:array[0..255,0..5] of Byte;
Font data 8x7
[Expand]
PFontData8x7 = ^TFontData8x7;
TFontData8x7 = record Data:array[0..255,0..6] of Byte;
Font data 8x8
[Expand]
PFontData8x8 = ^TFontData8x8;
TFontData8x8 = record Data:array[0..255,0..7] of Byte;
Font data 8x9
[Expand]
PFontData8x9 = ^TFontData8x9;
TFontData8x9 = record Data:array[0..255,0..8] of Byte;
Font data 8x10
[Expand]
PFontData8x10 = ^TFontData8x10;
TFontData8x10 = record Data:array[0..255,0..9] of Byte;
Font data 8x11
[Expand]
PFontData8x11 = ^TFontData8x11;
TFontData8x11 = record Data:array[0..255,0..10] of Byte;
Font data 8x12
[Expand]
PFontData8x12 = ^TFontData8x12;
TFontData8x12 = record Data:array[0..255,0..11] of Byte;
Font data 8x13
[Expand]
PFontData8x13 = ^TFontData8x13;
TFontData8x13 = record Data:array[0..255,0..12] of Byte;
Font data 8x14
[Expand]
PFontData8x14 = ^TFontData8x14;
TFontData8x14 = record Data:array[0..255,0..13] of Byte;
Font data 8x15
[Expand]
PFontData8x15 = ^TFontData8x15;
TFontData8x15 = record Data:array[0..255,0..14] of Byte;
Font data 8x16
[Expand]
PFontData8x16 = ^TFontData8x16;
TFontData8x16 = record Data:array[0..255,0..15] of Byte;
Font data 12x12
[Expand]
PFontData12x12 = ^TFontData12x12;
TFontData12x12 = record Data:array[0..255,0..11] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 12x14
[Expand]
PFontData12x14 = ^TFontData12x14;
TFontData12x14 = record Data:array[0..255,0..13] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 12x16
[Expand]
PFontData12x16 = ^TFontData12x16;
TFontData12x16 = record Data:array[0..255,0..15] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 12x18
[Expand]
PFontData12x18 = ^TFontData12x18;
TFontData12x18 = record Data:array[0..255,0..17] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 12x20
[Expand]
PFontData12x20 = ^TFontData12x20;
TFontData12x20 = record Data:array[0..255,0..19] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 12x22
[Expand]
PFontData12x22 = ^TFontData12x22;
TFontData12x22 = record Data:array[0..255,0..21] of Word;
Note: 12 bit width (Word)
|
|
|
Font data 16x16
[Expand]
PFontData16x16 = ^TFontData16x16;
TFontData16x16 = record Data:array[0..255,0..15] of Word;
Note: 16 bit width (Word)
|
|
|
Font data 16x24
[Expand]
PFontData16x24 = ^TFontData16x24;
TFontData16x24 = record Data:array[0..255,0..23] of Word;
Note: 16 bit width (Word)
|
|
|
Font data 16x32
[Expand]
PFontData16x32 = ^TFontData16x32;
TFontData16x32 = record Data:array[0..255,0..31] of Word;
Note: 16 bit width (Word)
|
|
|
Font data 32x32
[Expand]
PFontData32x32 = ^TFontData32x32;
TFontData32x32 = record Data:array[0..255,0..31] of LongWord;
Note: 32 bit width (LongWord)
|
|
|
Font data 32x48
[Expand]
PFontData32x48 = ^TFontData32x48;
TFontData32x48 = record Data:array[0..255,0..47] of LongWord;
Note: 32 bit width (LongWord)
|
|
|
Font data 32x64
[Expand]
PFontData32x64 = ^TFontData32x64;
TFontData32x64 = record Data:array[0..255,0..63] of LongWord;
Note: 32 bit width (LongWord)
|
|
|
Font chars 8
[Expand]
PFontChars8 = ^TFontChars8;
TFontChars8 = array[0..0] of Byte;
Font chars 16
[Expand]
PFontChars16 = ^TFontChars16;
TFontChars16 = array[0..0] of Word;
Font chars 32
[Expand]
PFontChars32 = ^TFontChars32;
TFontChars32 = array[0..0] of LongWord;
Font unicode
[Expand]
PFontUnicode = ^TFontUnicode;
TFontUnicode = record
Font properties
[Expand]
PFontProperties = ^TFontProperties;
TFontProperties = record
FontMode:LongWord;
|
Font mode (eg FONT_MODE_PIXEL)
|
FontFlags:LongWord;
|
Font flags (eg FONT_FLAG_UNICODE)
|
FontName:array[0..FONT_NAME_LENGTH - 1] of Char;
|
Font name
|
FontDescription:array[0..FONT_DESC_LENGTH - 1] of Char;
|
Font description
|
CharWidth:LongWord;
|
Font character width in pixels
|
CharHeight:LongWord;
|
Font character height in pixels
|
CharCount:LongWord;
|
Number of glyphs in font character table
|
CharMask:LongWord;
|
Transparency mask for a bitmap font (Not used for a pixel font)
|
CodePage:LongWord;
|
Font codepage (CP_ACP if not specified)
|
Font enumeration callback
TFontEnumerate = function(Handle:TFontHandle; Data:Pointer):LongWord;
|
|
Font entry
[Expand]
PFontEntry = ^TFontEntry;
TFontEntry = record
Font Properties
|
Signature:LongWord;
|
Signature for entry validation
|
FontMode:LongWord;
|
Font mode (eg FONT_MODE_PIXEL)
|
FontFlags:LongWord;
|
Font flags (eg FONT_FLAG_UNICODE)
|
FontName:array[0..FONT_NAME_LENGTH - 1] of Char;
|
Font name
|
FontDescription:array[0..FONT_DESC_LENGTH - 1] of Char;
|
Font description
|
Driver Properties
|
CharWidth:LongWord;
|
Font character width in pixels
|
CharHeight:LongWord;
|
Font character height in pixels
|
CharCount:LongWord;
|
Number of glyphs in font character table
|
CharMask:LongWord;
|
Transparency mask for a bitmap font (Not used for a pixel font)
|
CodePage:LongWord;
|
Font codepage (CP_ACP if not specified)
|
CharData:Pointer;
|
Font character pixel or bitmap data
|
UnicodeData:PFontUnicode;
|
Font unicode translation data (Only if FONT_FLAG_UNICODE)
|
Internal Properties
|
Prev:PFontEntry;
|
Previous entry in Font table
|
Next:PFontEntry;
|
Next entry in Font table
|
Public variables
None defined
Function declarations
Initialization functions
[Expand]
procedure FontInit;
Description: To be documented
Font functions
[Expand]
function FontLoad(Header:PFontHeader; Data:PFontData; Size:LongWord):TFontHandle;
Description: Load a Font from a font data block and add to the Font table
Header
|
Pointer to the font header
|
Data
|
Pointer to the font data
|
Size
|
Size of the font data
|
[Expand]
function FontLoadEx(Header:PFontHeader; Data:PFontData; Unicode:PFontUnicode; Size:LongWord; Properties:PFontProperties):TFontHandle;
Description: Load a Font from a font data block and add to the Font table
Header
|
Pointer to the font header
|
Data
|
Pointer to the font data
|
Unicode
|
Pointer to the unicode translation table (Optional)
|
Size
|
Size of the font data
|
Properties
|
Pointer to a font properties record to use instead of the header (Optional)
|
[Expand]
function FontUnload(Handle:TFontHandle):LongWord;
Description: To be documented
[Expand]
function FontGetName(Handle:TFontHandle):String;
Description: To be documented
[Expand]
function FontGetDescription(Handle:TFontHandle):String;
Description: To be documented
[Expand]
function FontGetWidth(Handle:TFontHandle):LongWord;
Description: To be documented
[Expand]
function FontGetHeight(Handle:TFontHandle):LongWord;
Description: To be documented
[Expand]
function FontGetProperties(Handle:TFontHandle; Properties:PFontProperties):LongWord;
Description: To be documented
[Expand]
function FontCharWidth(Handle:TFontHandle; Character:Word):LongWord;
Description: To be documented
[Expand]
function FontCharHeight(Handle:TFontHandle; Character:Word):LongWord;
Description: To be documented
[Expand]
function FontTextWidth(Handle:TFontHandle; const Text:String):LongWord;
Description: To be documented
[Expand]
function FontTextHeight(Handle:TFontHandle; const Text:String):LongWord;
Description: To be documented
[Expand]
function FontFindByName(const Name:String):TFontHandle;
Description: To be documented
[Expand]
function FontFindByDescription(const Description:String):TFontHandle;
Description: To be documented
[Expand]
function FontEnumerate(Callback:TFontEnumerate; Data:Pointer):LongWord;
Description: To be documented
PSF font functions
[Expand]
function PSFFontLoad(const FileName:String):TFontHandle;
Description: To be documented
[Expand]
function PSFFontLoadEx(Data:Pointer;Size:LongWord):TFontHandle;
Description: To be documented
Font helper functions
[Expand]
function FontGetCount:LongWord;
Description: Get the current font count
[Expand]
function FontGetDefault:TFontHandle;
Description: Get the current default font
[Expand]
function FontSetDefault(Handle:TFontHandle):LongWord;
Description: Set the current default font
[Expand]
function FontCheck(Font:PFontEntry):PFontEntry;
Description: Check if the supplied Font is in the Font table
Return to Unit Reference