bigbaicai

芯方式是以半导体人、电子工程师等电子行业相关领域从业人员为核心的知识经验学习、分享、交流社群。 凭借开放、合作、共赢的运营理念,聚集了来自国内外知名院校和顶尖科技公司的半导体人、电子工程师。 我们致力于营造专业、认真、有温度的分享交流环境,将高质量的内容和方案成规模地生产和分享,帮助个人和团队在芯方式找到有价值的Key。 http://www.icfans.com/

11B工程添加老版本点阵字库修改说明

0
阅读(822)

[DESCRIPTION]
11B工程字库的添加是直接添加BDF文件,通过 font gen 工具再自动生成.c和.h文件,如果客户没有 BDF 文件,以下说
明是如何修改来支持以前的 .c 和 .h字库。
[SOLUTION]
11B的字库添加是需要添加BDF文件,而不是原来的.c和.h文件。具体步骤可以参考以下文档:
参考文档来自半导体社区:(下载地址:dcc.mediatek.com)
FontResGenSOP
在res_gen_font.cpp中,通过AddFont的方法将对应的BDF文件加入代码中即可。
对于没有字库的BDF文件,请参考上述文档来添加原有的字库文件
具体步骤:
一、关闭__MMI_BDF_SW_COMPRESSION__和__MMI_FONT_COMPRESSION__
new编译一个没有做更改的原始版本,以便于生成没有压缩的英文相关资源。
二、修改ResGenerator_HW.tmp和ResGenerator.tmp
找到Start to Generate Font File !
删除下面这一句if exist ..\..\..\vendor\font\inc\*.* del /q ..\..\..\vendor\font\inc\*.*
三、然后再根据文档 FontResGenSOP 第7章所说的步骤,添加.h和.c字库信息,并修改main函数等相关函数。
四、对于等宽字库,在后续的代码中,将数据类型作了改动。sCustFontData数据结构中的U16 *pRange变成U16的了。
以前的数据信息和现在的存储的内容不相同。因此会出现显示框框的情况。
请尝试在函数mmi_fe_init中
在gdi_mutex_init(&g_mmi_fe_cache_mutex);之前添加语句:
mmi_fe_data_struct_check_and_convert();
其中
void mmi_fe_data_struct_check_and_convert(void)
{
BOOL need_convert = MMI_TRUE;
int i, j, k;
font_group_struct *pfont_group;
sCustFontData *pfont_data;
const RangeData *prange_data;
U32 range_offset_data;
U32 *prange_offset_data;
for(i = 0; i < MAX_FONT_SIZE; i++)
{
pfont_group = &(g_fontfamily[i]);
for(j = 0; j < pfont_group->nTotalFonts; j++)
{
pfont_data = pfont_group->fontData[j];
if(pfont_data->nEquiDistant)
{
range_offset_data = 0;
prange_offset_data = (U32 *)(pfont_data->pRange);
for(k = 0; (k+1) < pRangeDetails->nNoOfRanges; k++)
{
prange_data = &(pfont_data->pRangeDetails->pRangeData[k]);
range_offset_data += (prange_data->nMax - prange_data->nMin + 1)*pfont_data->nCharBytes;
if(range_offset_data != *(++prange_offset_data))
{
need_convert = MMI_FALSE;
break;
}
}
if(need_convert)
{
range_offset_data = 0;
prange_offset_data = (U32 *)(pfont_data->pRange);
for(k = 0; (k+1) < pRangeDetails->nNoOfRanges; k++)
{
prange_data = &(pfont_data->pRangeDetails->pRangeData[k]);
range_offset_data += (prange_data->nMax - prange_data->nMin + 1)*pfont_data->nCharBytes;
if(range_offset_data == *(++prange_offset_data))
{
pfont_data->pRange[k+1] = (U16)(range_offset_data/pfont_data->nCharBytes);
}
}
}
else
need_convert = MMI_TRUE;
}
}
}
}
同时,将.h中的RangeOffset定义处将const去掉。
将强制转换的地方从U32改为U16,但在定义处不做修改。
五、非等宽字符只要将.h中的RangeOffset U32的参数在定义和强制类型转换的时候改都改为为U16即可。
注意:
1、从第三步开始,icfans把 .h文件放到 vendor\font\inc 下面,以上步骤说明中要修改的 fontres.c 文件是在
plutommi\Customer\CustResource 目录下。
2、等宽字和不等宽字是通过 sCustFontData 中 nEquiDistant 来判断,1为等宽,0不等宽。四、五步骤分别是对应
等宽和不等宽的修改,请注意区分。
修改完成后重新 new编译。