minigui 4.0 源代码分析(五)

2020-11-24  本文已影响0人  RonZheng2010

1. 字体

3.1 设备字体 DEVFONT

DEVFONT定义设备字体。

3.2 逻辑字体LOGFONT

LOGFONT定义逻辑字体。设备描述表DC的成员pLogFont是它使用的逻辑字体。

3.3 创建设备逻辑字体

3.3.1 add_dev_font()

add_dev_font()从指定文件中,加载指定字体。

add_dev_font()有三个参数:字体名、字体数据参数、参数标志。参数标志指示“字体数据参数”是实际的数据,还是文件名。如果是后者,则实际的数据要从文件中读取。

这里书名的例子,
字体名为ttf-helvetica-rrncnn-0-0-ISO8859-1,GB2312-0,UTF-8,
字体数据参数为font/Helvetica.ttf,这是文件名。

字体名包括几个部分:

add_dev_font()的步骤如下。

这里调用的是同名函数load_font_data()。

3.3.2 load_font_data()

DEVFONT的成员data,指向font_ops从文件读出的数据,这里指向FT2_DATA实例。FT2_DATA及其他结构是开源软件ft_library定义的接口。

load_font_data()基于ft_library得到字体数据,就是FT2_DATA实例。Ft_library的初始化在font_InitFreetypeLibrary()中完成。

3.3.3 font_InitFreetypeLibrary()

font_InitFreetypeLibrary()负责完成初始化ft_library。其中依赖开源软件harzbuff。

3.3.4 INIT_SPECIFICAL_FONTS()

INIT_SPECIFICAL_FONTS()读取配置文件的指定节,遍历其中的字体列表,对每个字体读取其名字和文件名,并按如下步骤加载它。

3.3.5 font_InitIncoreFonts()

font_InitIncoreFonts()初始化内部字体。

3.4 创建逻辑字体

3.4.1 mg_InitSysFont()

mg_InitSysFont()根据配置文件的设置,初始化逻辑字体。

配置文件中指定了逻辑字体。如下是配置文件的一个例子。

[systemfont]
font_number=5
default=0
wchar_def=1
fixed=2
caption=3
menu=4
font0=rbf-FixedSys-rrncnn-8-16-ISO8859-1
char* sys_font_name [] =                                                                      
{                                                                                                    
    "default",
    "wchar_def",
    "fixed",
    “caption",                                                                                       
    "menu",                                                                                          
    "control"                                                                                        
};    

比如rbf-FixedSys-rrncnn-8-16-ISO8859-1就是字体名,其中rbf为类型,FixedSys为family家族,rrnccn为风格,IOS8859-1为字符集。

LOGFONT* g_SysLogFont [NR_SYSLOGFONTS];

3.4.2 CreateLogFont()

CreateLogFont()基于设备字体,创建逻辑字体。

3.5 初始化字体子系统 mg_InitGDI()

mg_InitGDI()初始化字体子系统,包括初始化FT_library、加载配置文件中的字体、加载内部字体、和初始化逻辑字体。

3.6 使用字体 TextOutOmitted()

TextOutOmitted()用于输出文字。

上一篇 下一篇

猜你喜欢

热点阅读