Unit Font

From Ultibo.org
Jump to: navigation, search

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



Font specific constants FONT_*
FONT_MIN_COUNT = 256;  
 
FONT_MIN_WIDTH = 8;  
FONT_MAX_WIDTH = 32;  
 
FONT_MIN_HEIGHT = 6;  
FONT_MAX_HEIGHT = 64;  


Font signature FONT_SIGNATURE_*
FONT_SIGNATURE = $77DE1BBC;  


Font name FONT_*_LENGTH
FONT_NAME_LENGTH = SIZE_64; Length of font name
FONT_DESC_LENGTH = SIZE_128; Length of font description


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


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

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

PFontData = ^TFontData;

TFontData = record

Data:array[0..0] of Byte;  

Font data 8x6

PFontData8x6 = ^TFontData8x6;

TFontData8x6 = record Data:array[0..255,0..5] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x7

PFontData8x7 = ^TFontData8x7;

TFontData8x7 = record Data:array[0..255,0..6] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x8

PFontData8x8 = ^TFontData8x8;

TFontData8x8 = record Data:array[0..255,0..7] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x9

PFontData8x9 = ^TFontData8x9;

TFontData8x9 = record Data:array[0..255,0..8] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x10

PFontData8x10 = ^TFontData8x10;

TFontData8x10 = record Data:array[0..255,0..9] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x11

PFontData8x11 = ^TFontData8x11;

TFontData8x11 = record Data:array[0..255,0..10] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x12

PFontData8x12 = ^TFontData8x12;

TFontData8x12 = record Data:array[0..255,0..11] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x13

PFontData8x13 = ^TFontData8x13;

TFontData8x13 = record Data:array[0..255,0..12] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x14

PFontData8x14 = ^TFontData8x14;

TFontData8x14 = record Data:array[0..255,0..13] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x15

PFontData8x15 = ^TFontData8x15;

TFontData8x15 = record Data:array[0..255,0..14] of Byte;

Note: 8 bit width (Byte)
   

Font data 8x16

PFontData8x16 = ^TFontData8x16;

TFontData8x16 = record Data:array[0..255,0..15] of Byte;

Note: 8 bit width (Byte)
   

Font data 12x12

PFontData12x12 = ^TFontData12x12;

TFontData12x12 = record Data:array[0..255,0..11] of Word;

Note: 12 bit width (Word)
   

Font data 12x14

PFontData12x14 = ^TFontData12x14;

TFontData12x14 = record Data:array[0..255,0..13] of Word;

Note: 12 bit width (Word)
   

Font data 12x16

PFontData12x16 = ^TFontData12x16;

TFontData12x16 = record Data:array[0..255,0..15] of Word;

Note: 12 bit width (Word)
   

Font data 12x18

PFontData12x18 = ^TFontData12x18;

TFontData12x18 = record Data:array[0..255,0..17] of Word;

Note: 12 bit width (Word)
   

Font data 12x20

PFontData12x20 = ^TFontData12x20;

TFontData12x20 = record Data:array[0..255,0..19] of Word;

Note: 12 bit width (Word)
   

Font data 12x22

PFontData12x22 = ^TFontData12x22;

TFontData12x22 = record Data:array[0..255,0..21] of Word;

Note: 12 bit width (Word)
   

Font data 16x16

PFontData16x16 = ^TFontData16x16;

TFontData16x16 = record Data:array[0..255,0..15] of Word;

Note: 16 bit width (Word)
   

Font data 16x24

PFontData16x24 = ^TFontData16x24;

TFontData16x24 = record Data:array[0..255,0..23] of Word;

Note: 16 bit width (Word)
   

Font data 16x32

PFontData16x32 = ^TFontData16x32;

TFontData16x32 = record Data:array[0..255,0..31] of Word;

Note: 16 bit width (Word)
   

Font data 32x32

PFontData32x32 = ^TFontData32x32;

TFontData32x32 = record Data:array[0..255,0..31] of LongWord;

Note: 32 bit width (LongWord)
   

Font data 32x48

PFontData32x48 = ^TFontData32x48;

TFontData32x48 = record Data:array[0..255,0..47] of LongWord;

Note: 32 bit width (LongWord)
   

Font data 32x64

PFontData32x64 = ^TFontData32x64;

TFontData32x64 = record Data:array[0..255,0..63] of LongWord;

Note: 32 bit width (LongWord)
   

Font chars 8

PFontChars8 = ^TFontChars8;

TFontChars8 = array[0..0] of Byte;

   

Font chars 16

PFontChars16 = ^TFontChars16;

TFontChars16 = array[0..0] of Word;

   

Font chars 32

PFontChars32 = ^TFontChars32;

TFontChars32 = array[0..0] of LongWord;

   

Font unicode

PFontUnicode = ^TFontUnicode;

TFontUnicode = record

   

Font properties

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

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

procedure FontInit;
Description: To be documented
Note None documented


Font functions

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


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)


function FontUnload(Handle:TFontHandle):LongWord;
Description: To be documented
Note None documented


function FontGetName(Handle:TFontHandle):String;
Description: To be documented
Note None documented


function FontGetDescription(Handle:TFontHandle):String;
Description: To be documented
Note None documented


function FontGetWidth(Handle:TFontHandle):LongWord;
Description: To be documented
Note None documented


function FontGetHeight(Handle:TFontHandle):LongWord;
Description: To be documented
Note None documented


function FontGetProperties(Handle:TFontHandle; Properties:PFontProperties):LongWord;
Description: To be documented
Note None documented


function FontCharWidth(Handle:TFontHandle; Character:Word):LongWord;
Description: To be documented
Note None documented


function FontCharHeight(Handle:TFontHandle; Character:Word):LongWord;
Description: To be documented
Note None documented


function FontTextWidth(Handle:TFontHandle; const Text:String):LongWord;
Description: To be documented
Note None documented


function FontTextHeight(Handle:TFontHandle; const Text:String):LongWord;
Description: To be documented
Note None documented


function FontFindByName(const Name:String):TFontHandle;
Description: To be documented
Note None documented


function FontFindByDescription(const Description:String):TFontHandle; 
Description: To be documented
Note None documented


function FontEnumerate(Callback:TFontEnumerate; Data:Pointer):LongWord;
Description: To be documented
Note None documented


PSF font functions

function PSFFontLoad(const FileName:String):TFontHandle;
Description: To be documented
Note None documented


function PSFFontLoadEx(Data:Pointer;Size:LongWord):TFontHandle;
Description: To be documented
Note None documented


Font helper functions

function FontGetCount:LongWord;
Description: Get the current font count
Note None documented


function FontGetDefault:TFontHandle;
Description: Get the current default font
Note None documented


function FontSetDefault(Handle:TFontHandle):LongWord;
Description: Set the current default font
Note None documented


function FontCheck(Font:PFontEntry):PFontEntry;
Description: Check if the supplied Font is in the Font table
Note None documented


Return to Unit Reference