附录 G - GUIX 字体结构

GUIX 字体通常由 GUIX Studio 应用程序生成,字体字形由 GUIX 显示驱动程序呈现。 应用程序软件只需指定每个文本显示小组件应使用的字体和颜色。 为了保持内容完整,本文将介绍 GUIX 字体数据结构,使开发人员能够创造自己的方法来生成字体或者将其他字体转换为 GUIX 字体格式。

每种 GUIX 字体都从创建 GX_FONT 结构开头。 GX_FONT 结构定义全局字体参数,例如字体中包含的字符和字体的行高。 GX_FONT 结构指向 GX_GLYPH 结构数组。 每个 GX_GLYPH 结构分别定义一种特定字符字形的宽度、高度和基线偏移量。 GX_GLYPH 结构还指向实际的字形位图数据(对于空格字符,此数据可能为 NULL)。

gx_api.h 中包含的 GX_FONT 结构的声明方式如下:

typedef struct GX_FONT_STRUCT
{
    GX_UBYTE                     gx_font_format
    GX_UBYTE                     gx_font_prespace
    GX_UBYTE                     gx_font_postspace
    GX_UBYTE                     gx_font_line_height 
    GX_UBYTE                     gx_font_baseline
    USHORT                       gx_font_first_glyph
    USHORT                       gx_font_last_glyph 
    GX_CONST GX_GLYPH           *gx_font_glyphs
    const struct GX_FONT_STRUCT *gx_font_next_page
} GX_FONT;

gx_font_format 字段定义了在 gx_api.h 头文件中定义的字体每像素位数和其他标志。

gx_font_prespace 定义了多行文本显示中要在每行文本上方跳过的像素空间。

gx_font_postspace 字段定义了多行文本显示中要在每行文本下方跳过的像素空间。

gx_font_line_height 字段定义了字体中最高字形的高度。

gx_font_baseline 字段定义了从字形像素的顶行到字体基线的距离(以像素为单位)。

gx_font_first_glyph 字段定义了此字体页中包含的第一种 Unicode 字符编码。

gx_font_last_glyph 字段定义了此字体页中包含的最后一种 Unicode 字符编码。

gx_font_glyphs 指针指向 GX_GLYPH 结构数组。 此数组的大小必须等于此字体页中包含的字符数,即 (gx_font_last_glyph – gx_font_first_glyph) + 1。

gx_font_next_page 成员用于多页字体。 多页字体用于扩展字符集,并用于优化 GX_GLYPH 结构数组的大小。 如果字体的所有字符都包含在一个字体页中,或者这是相关字体的最后一页,则 gx_font_next_page 成员设置为 GX_NULL。

如上所述,上面的 GX_FONT 结构包含指向 GX_GLYPHS 结构数组的指针。 字体页种的每个字符都必须有一个 GX_GLYPH 结构。 GX_GLYPH 结构定义如下:

typedef struct GX_GLYPH_STRUCT
{
    GX_CONST GX_UBYTE *gx_glyph_map;
    GX_BYTE            gx_glyph_ascent;
    GX_BYTE            gx_glyph_descent;
    GX_BYTE            gx_glyph_advance;
    GX_BYTE            gx_glyph_leading;
    GX_UBYTE           gx_glyph_width;
    GX_UBYTE           gx_glyph_height;
} GX_GLYPH;

gx_glyph_map 指针指向字形位图。 对于空格字符,此指针可能为 GX_NULL。 位图数据编码为 1 bpp、2 bpp、4 bpp 或 8 bpp Alpha 值。 对于 1 位数据,值为 1 表示应使用前景色写入像素,值为 0 表示像素是透明的。 对于 8 位数据,值介于 0(完全透明)到 255(完全不透明)之间。 所有中间值都代表抗锯齿字体的混合值。 对于使用小于 8 bpp 数据值的格式,字形位图数据始终填充为完整字节对齐。

gx_glyph_ascent 值和 gx_glyph_descent 值相对于字体基线垂直放置字形。

gx_glyph_width 值和 gx_glyph_height 值指定字形位图数据的大小。

gx_glyph_advance 值指定在绘制字形后将绘图位置向前移动的像素宽度(此宽度不能等于字形宽度)。

gx_glyph_leading 值指定在呈现字形之前在 X 方向上向前移动的像素数。