当前位置: 首页 > news >正文

美化MTK的拨号窗口

除待机,主菜单,多媒体窗口外,拨号窗口也许是我们最经常为其动手术的一个窗口了。除了花里胡哨的界面,各种新技术新器件的应用外,最经常修改的大概是拨号窗口的字符显示。许多时候客户都会嫌弃字符过小,即使换成最大字体,有时照样有客户抱怨字符不够大。字库里的大号字已经满足不了有些客户的需求,客户有时需要更漂亮的字体,有时需要更大的字体,频繁的修改字库,有时既满足不了用户需求,客户的需求各不相同,为了满足单个客户的需求,这无疑是个很愚蠢的主意。于是有些人就想到了贴图,其实字在字库也是存储为小图片的点阵信息。这说明这个方法是完全可行的。其实写这篇文章是应一个同学的要求写的,由于一直很忙,没有写,总觉得的欠下一笔债,今天就一并还了。

原理其实是很简单的,要使用贴图替换MTK自己的输出字符函数,并对应用户的按键。首先要解决的问题是找到替换的地方,如果使用自己贴图,光标也要自己绘制。使用模拟器,可以很容易找到替换的地方。

gui_show_dialer_input_box_ext这个函数是MTK绘制拨号窗口EDIT控件的函数,也是我们今天主要动手术的函数。这里我使用宏(__MMI_DIALING_NUM_PICTURE__),首先找到这个函数中初始化字符的宽度的语句,替换,

#if defined(__MMI_DIALING_NUM_PICTURE__)
character_width=get_number_image_width();
#else
character_width = gui_get_character_width(0x31);
#endif
然后找到高度

#if defined(__MMI_DIALING_NUM_PICTURE__)
character_height=get_number_image_hight();
#else
#if( defined(__MMI_TOUCH_DIAL_SCREEN__))
character_height = gui_get_character_height() + 1;
#else
character_height = gui_get_character_height() + 2;
#endif
#endif
找到输出字符的地方

#if defined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}
}
#else
gui_print_character(current_character);
#endif
另一个地方也要替换

#ifdefined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}

}
#else
/* use this theme only after 07B*/
gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
gui_print_bordered_character(current_character);
#endif
还有一个地方也要替换

#ifdefined(__MMI_DIALING_NUM_PICTURE__)
{
U16 image_id;
if(is_dial_number_big_pic())
{
image_id=get_image_id_by_char(current_character,FALSE);
gdi_image_draw_id(text_x,text_y,image_id);
}
else
{
image_id=get_image_id_by_char(current_character,TRUE);
gdi_image_draw_id(text_x,text_y,image_id);
}

}
#else
/* use this theme only after 07B*/
gui_set_text_color(*(current_MMI_theme->dialer_inputbox_text_color));
gui_set_text_border_color(*(current_MMI_theme->dialer_inputbox_text_border_color));
gui_print_bordered_character(current_character);
#endif
还有一个函数gui_dialer_input_box_next_line,里面字符的高度宽度也要改成我们自己的,在该函数中,找到字符高度宽度的地方,替换为我们自己的,

再有函数dialer_inputbox_next_line,函数gui_dialer_input_box_prev_line,函数dialer_inputbox_prev_line,同上操作,替为我们自己的。

最后一个函数dialer_input_box_change_callback,也要采有同上的方法修改替换。

大致改的就这些地方的,怎么计划,怎么设计,各人有各人的方法,怎么方便就怎么干,贴的代码是从工程里直接复制出来的,有些乱,懒的改了。呵呵

相关文章:

  • javascript 18位身份证校验程序
  • MTK的DM应用实例
  • 优酷KUX格式转码
  • 推荐一款全面的系统性能监控工具 -- glances
  • 再转载一篇---引用 MTK的高亮机制
  • 解决加密的HLS(m3u8)视频转换问题
  • 再谈MTK的History机制
  • 在屏幕外的窗口,鼠标移动到屏幕边缘时自动把屏幕外部分拉回屏幕内怎么设置?
  • MTK的图片资源的修改与替换
  • [转]节省 3/4 的设计时间:14个设计神器
  • 转载一篇 EMI整改经验
  • Linux TIME_WAIT 太多 优化 解决
  • Sql Server 性能分析1 –查看数据库的相关信息
  • 某游戏公司的MYSQL配置文件
  • CentOS7 之系统优化方案
  • 深入了解以太坊
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • golang 发送GET和POST示例
  • Java教程_软件开发基础
  • js如何打印object对象
  • LeetCode18.四数之和 JavaScript
  • LeetCode算法系列_0891_子序列宽度之和
  • Map集合、散列表、红黑树介绍
  • miaov-React 最佳入门
  • php的插入排序,通过双层for循环
  • supervisor 永不挂掉的进程 安装以及使用
  • tensorflow学习笔记3——MNIST应用篇
  • Vue.js-Day01
  • Vue组件定义
  • 成为一名优秀的Developer的书单
  • 每天10道Java面试题,跟我走,offer有!
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 用jquery写贪吃蛇
  • 正则表达式-基础知识Review
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​必胜客礼品卡回收多少钱,回收平台哪家好
  • ​插件化DPI在商用WIFI中的价值
  • ​什么是bug?bug的源头在哪里?
  • ​学习一下,什么是预包装食品?​
  • #{} 和 ${}区别
  • (1)bark-ml
  • (12)Linux 常见的三种进程状态
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (二)hibernate配置管理
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (四)鸿鹄云架构一服务注册中心
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)使用VMware vSphere标准交换机设置网络连接
  • (最新)华为 2024 届秋招-硬件技术工程师-单板硬件开发—机试题—(共12套)(每套四十题)
  • .bat批处理(一):@echo off
  • .NET Core跨平台微服务学习资源
  • .net php 通信,flash与asp/php/asp.net通信的方法