2.3.7 字体
GUI引擎使用字体驱动将文本对象渲染到屏幕上或屏幕外图片上,该驱动占用内存空间小,速度快。GUI引擎在内部以列表的形式维护着所有字体,字体文件只加载一次,GUI引擎提供了支持truetype字体文件的初始化列表。以下是Tilcon开发套件中字体库的重要特性:
■ 可以使用API命令TRT_RegisterFontFile() 注册对新增字体的支持。
■ 可以使用API命令TRT_SetValues()来改变文本显示效果,如大小、粗体/斜体、下划线等文本属性。
■ 若窗口大小被改变,文本将相应地做出调整以适应窗口。
■ 字体是完全可扩展的,不限制字体的特定点阵大小,但界面编辑器在字体选择组合框中限定了字体的种类数量。
■ 支持抗锯齿。
■ 支持所有的有效颜色,包括透明色和XOR色,同时支持多种阴影模式和阴影色。
■ 应用程序使用TRT_GetValues()和TRT_SetValues()接口获取/设置字体属性值,属性格式为TRT_ATT_FONT_*。
GUI引擎支持四种文本字体类型:Helvetica、Courier、New Century、Times Roman。font.dat文件包含了界面编辑器识别的所有可用字体列表,由界面编辑器中的字体管理器(见图2-14)维护着,是界面编辑器的字体注册机构。
图2-14 字体管理器
当一个界面对象的文本组件被创建时,文本组件的字体属性被设置为界面编辑器显示的默认字体,开发者可以选择需要设置字体的文本,并对字体、大小等属性进行修改,这些属性值被保存在屏幕内界面对象的组件中,供GUI引擎中的字体管理进程绘制文字使用。如图2-15所示。
图2-15 字体属性配置处理过程
当屏幕被显示时,文本组件被传递给GUI引擎中的字体管理程序,字体管理函数决定是否加载被请求的字体到内存中。默认字体预先在GUI引擎中注册了,非默认字体在使用前,必须使用API命令TRT_RegisterFont()在GUI引擎中进行注册。除了字体属性,文本组件还需要包括粗体、斜体、大小等属性,才能正确地绘制文字。运行时,文本组件与字体管理器协同工作,它们之间的协同关系如图2-16所示。
图2-16 运行时文本组件与字体管理器协同工作机制
设置文本字体支持的操作步骤如下:
(1)选择界面编辑器中“Options > Font Manager”菜单,打开字体管理窗口;
(2)选择字体类型(font type)编号,该值可以是任何大于32的数;
(3)输入字体名称,该名称将在界面编辑器快捷工具区内的可选字体列表中显示;
(4)点击“OK”按钮,关闭配置窗口;
(5)拷贝font.dat文件到目标机文件系统的字体目录下,比如Windows平台的字体文件存放目录是C:\WINDOWS\fonts;
(6)在应用程序代码调用TRT_StartEx()之后加入代码行“TRT_pid = StartData.TRT_CID;”进行字体注册;
(7)设置该字体在字体类型(font type)列表中的索引值;
(8)在nameStr域设置字体名称。
以下代码行展示了如何在应用程序中对字体进行注册。
TRT_FontRegister fontRegisterProps; long taskMask = TRT_FONTREGISTER_MASK_SET| TRT_FONTREGISTER_MASK_FACENAME; fontRegisterProps.fontType = 33; fontRegisterProps.fontStyle = 0; fontRegisterProps.nameStr = "Asian"; TRT_RegisterFont(TRT_pid, taskMask, (void*)(&fontRegisterProps));
[注意]部分字体可能不支持粗体和/或斜体,若未指定格式,默认的数字文本精确到小数点后两位。另外,VxWorks和Linux平台的本地字体引擎不支持文本旋转,必须使用Tilcon字体引擎进行字体旋转。
有些对象的文本字体通过快捷工具栏内的字体设置框或“Options > Text Fonts”菜单进行修改,比如按钮(button)等,有些对象的文本字体通过对象属性设置对话框进行修改,比如表格(table)对象。图2-17所示字体配置窗口适用于所有文本对象、按钮、面板、刻度线等已经输入文字的情况。
图2-17 字体与大小配置
一旦对象被创建且属性设置对话框被关闭(只要文本已经输入即可),选中该对象,即可用快捷工具栏中的字体设置框或“Options > Text Fonts”菜单进行字体和大小配置,以及是否显示为粗体或斜体。如果是点阵字体,在选择“Options > Text Fonts”菜单弹出的字体选择对话框中,还可以控制字体宽、高和字间距。