微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > VxWorks5.5 平台下矢量字体显示的实现

VxWorks5.5 平台下矢量字体显示的实现

时间:09-07 来源:互联网 点击:

)graphicsDevID;参数id 为矢量字体设备号,取值(UGL_UINT32) ft_FONTDevID;参数name取值0.

3.2 字体单双字节编码转换

3.4 字库加载

  字体库加载方式分动态和静态两种,两者之间互有优缺点,可根据用户的不同需求自主选择加载方式。

  3.4.1 字库动态加载

  字库动态加载方式是将windows 下的TrueType 字体库文件(*.ttf,*.ttc)拷贝到目标机目录下,根据用户需求在程序执行过程中动态加载字库。动态加载的实现方法:先声明两个结构变量。

  1) UGL_FT2_FONT_DRV_CFG ft_FONT_cfg;

  2) UGL_FT2_FONT_PATH_DESC FontPathDesc;

  接着设置FontPathDesc 信息, FontPathDesc.PFontSearchPath=/ata0a/ttf/; FontPathDesc.filter=*.ttf;pFontSearchPath 为字体文件搜索路径,filter 为文件过滤器。再设置ft_FONT_cfg 信息,ft_FONT_cfg.numFontPathDesc=1;ft_FONT_cfg.pFontPathDesc=FontPathDesc;

ft_FONT_cfg.defaultCharset=FT_ENCODING_UNICODE;numFontPathDesc 为字体搜索路径的个数,pFontPathDesc 为搜索路径,defaultCharset 为设置矢量字体的编码模式。最后按照3.1 章节对矢量字库进行初始化。

  3.4.2 字库静态加载

  字体库静态加载方式是将windows 下的TrueType字体库文件(*.ttf,*.ttc)编译生成一个。o 文件,并在应用程序执行前先加载到内存。静态加载的实现方法:

  在编译生成。o 字库文件前, 先确定需要加载的TrueType 字体库文件,例如需要将f:/FONT/目录下的simsun.ttc,simkai.ttf 文件编译生成一个。o 文件,先创建一个udft2cfg.s 文件,将需要编译的字库信息填入文件,再使用编译命令ccpenTIum -mtune=pentium –march=pentium -O2 -nostdlib -fno-builtin -fno-defer -pop-DCPU=PENTIUM -DTOOL_FAMILY=gnu -D_WRS_KERNEL-DVXWORKS -xassembler-with-cpp -g -c udft2cfg.o udft2cfg.s 编译字体文件,生成udft2cfg.o 文件。

  静态加载方式在矢量字体初始化时所用的字体结构信息与动态加载有一些区别,静态加载所用字体信息已经明确,在初始化时需要将字体信息在结构中描述清楚,结构UGL_FT2_FONT_MEMBUF_DESC 描述字体名称、起始地址,终止地址,并挂接到结构UGL_FT2_FONT_DRV_CFG 下,最后按照3.1 章节对矢量字体进行初始化。

  3.5 矢量字体的粗、斜体实现

  矢量字体显示方式包括正体、粗体、斜体、和粗斜体四种方式,FreeType 字体引擎已经实现了对各种显示方式的支持,但要在VxWorks5.5 上支持粗、斜体,需要修改udft2fnt.c 和uglFONT2.c 的部分代码。udft2fnt.c修改代码如下:

  1) 在UGL_FT2_FONT 结构中增加两个结构变量,UGL_SIZE weightsize; UGL_SIZE italicsize;

  2) 在uglFT2FontCreate 函数中,去除三个条件pFontDef->weight >=pFT2FontDesc->header.weight.min pFontDef->weight = pFT2FontDesc-> header.weight.max pFontDef->italic == pFT2FontDesc->header. Italic;增加字体结构变量weightsize,italicsize的赋值,pFT2Font->weightsize = pFontDef->weight;pFT2Font->italicsize=pFontDef->italic;

  3) 在uglFT2FontInfo 函数中,增加粗体、斜体信息的设置和获取代码,

  case UGL_FONT_WEIGHT_SET: pFT2Font->weightsize = *((UGL_SIZE *)pInfo);break;

  case UGL_FONT_WEIGHT_GET: (*(UGL_SIZE*)pInfo) = pFT2Font->weightsize;

  status = UGL_STATUS_OK;break;

  case UGL_FONT_SLANT_ANGLE_SET: pFT2

  Font->italicsize = *((UGL_SIZE *)pInfo);break;

  case UGL_FONT_ SLANT_ANGLE _GET:(*(UGL_SIZE *)pInfo) = pFT2Font->italicsize;

  status = UGL_STATUS_OK;break;

  4) 在ft2DrawStringImageCache 函数中,增加矢量字体在斜体时的矩阵值;增加矢量字体在粗、斜体时字体位图索引的获取。因为矢量字体在粗、斜体时矩阵值和位图索引号的获取和正体有些差异,所以在处理时需和正体分开处理。

  5) 在ft2DrawStringSmallBitmaps 函数中,增加矢量字体在斜体时的矩阵值;因为矢量字体在粗、斜体时使用ft2GetGlyphIndex 函数不能正确获取位图索引,修改为FT_Get_Char_Index 来获取位图索引;增加在粗、斜体时的矢量字体位图的处理。

  uglFONT2.c 修改代码如下:

  修改uglConstructFontDef 函数,增加斜体信息赋值,pFontDefinition->italic = pFontDescriptor-> italic.

去除语句pFontDefinition->weight = (pListArray[matchIndex].FONTDesc.weight.min + pListArray[matchIndex].FONTDesc.weight.max)/2;,使用

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top