MTK图片资源及主题风格等

先说下图片吧,MTK项目中经常修改的有两种图片:
1.在image.zip包的,需要改那个就换那个,比较简单,呵呵!
2.在Themecomponents.h中的以数据形式存在的(主要包括高亮条还有一些背景),换这个就稍微有点麻烦,下面详细介绍下:

2.1在image.zip中的图片在update资源后,会将图片编译成数据存放在文件Custimgdatahw.h中,每个图片对应一个数组,数组名是图片相应的路径,可以在文件CustImgRes.c查找;

2.2要换2中说到的数据,需要另外准备个工程tem_pro,假设需要编译成数据的图片是A.gif,那么需要在temp_pro中的图片资源中找到一个B.gif(找到后要确认这个图片在文件B.gif在Image_resource_usage.txt中能被检索到,能被检索到说明这个图片是被用了的)。接下来就是在A替换掉B(记得把A rename 成B),压包,update工程,在文件Custimgdatahw.h找到当前B的数据(其实就是A),把这个数组取出来放到当前需要配色的工程中的相应地方(Themecomponents.h里)

2.3Themecomponents.h文件在工程中有好多个,一定要注意哦!
2.3.1Themecomponents.h (plutommi/customer/custresource)这个是给modis直接用的,更换了上述数据后,用vc编一下Themeres.c就能看到效果,当remake项目时,其实也是编译的这个文件,但要是只修改了这个文件,可千万不要Update或者new工程哦,否则你的辛苦就要泡汤了...呵呵
2.3.2Themecomponents.h (plutommi/customer/lcdresource/mainlcd240x320/non_touch)update或者New工程时,会解析这个路径下的文件把plutommi/customer/custresource下的相应文件覆盖掉,这也就解释了2.3.1中那样做为什么不起作用了...

在查找相关文件的过程中,通过断点调试可以进入文件wgui_draw_manager.c,在文件wgui_draw_manager.c当中有这样一个函数, 该函数能改变main menu and sub menu background, that is: UI_filled_area *dm_get_current_scr_bg_filler(void); 这个只是得到当前屏幕的背景,要去修改背景还要在themecompents。h里面的数组,一般情况时defaulttheme,不过不排除用别的,可以通过vc调试的时候设断点观察调用的时那个,然后去修改那哥。

CONST_HARDWARE UI_filled_area main_menu_background_filler_defaultTheme={
UI_FILLED_AREA_TYPE_COLOR,
UI_IMAGE_ID_NULL,
NULL,
{206,206,206,100},
{0,0,0,100},
{0,0,0,100},
{0,0,0,100},
0};


更通常的做法时将图片放在你想要调用的目录下,然后new一下,会自动在custimgdatahw.h生成图片对应的数组,这个时候你可以直接把main_menu_background_filler_defaultTheme里面的UI_IMAGE_ID_NULL替换掉就ok了。

 

 

 

==============================================================================

MTK主题修改

 

/*软件版本0852*/

先看Wgui的初始化,在Wgui.c文件wgui_init(void)函数。里面有

set_MMI_theme((MMI_theme*) MMI_themes[0]);

gui_initialize_default_themes();

看set_MMI_theme函数的参数MMI_themes[0],搜索它,找到是在StandaloneRes.c文件里定义的,此文件里有函数InitializeResourceVariables()对其赋值,是个custpack_header的mmi_themes变量,且被强制转换成(CUSTPACK_THEME_HEADER*)这个类型,此类型是个结构,结构里有mmi_themes这个变量,那我们继续搜索CUSTPACK_THEME_HEADER,在ThemeRes.c文件里我们看到一个mtk_theme_header变量,和刚才的custpack_header似乎有点关系,看这个变量的类型CUSTPACK_THEME_HEADER,联系下刚才的赋值。。。,我们看这个变量的初始化,第二个参数mmi_themes的值是mtk_MMI_themes,再看mtk_MMI_themes,是个数组,找到定义,总算找到根了,这个数组值就是一些主题变量。

 

下面是一些常用主题修改时要修改的一些变量:

UI_filled_area  *scrollbar_background_filler;//滚动条背景

UI_filled_area  *scrollbar_indicator_filler;//滚动条

UI_filled_area  *list_selected_item_filler;//57screen选择框等控件

UI_filled_area  *popup_description_background_filler;//list菜单hint框

UI_filled_area  *inline_edit_focussed_filler;//57screen编辑框

UI_filled_area  *PIN_inputbox_background_filler;//PIN输入框

UI_filled_area  *small_list_menu_normal_filler;//级联菜单(pop-up式菜单,即选项菜单)背景

UI_filled_area  *small_list_screen_border_filler;//级联菜单(pop-up式菜单,即选项菜单)边框

UI_filled_area  *menuitem_single_line_highlight_filler;//2级菜单情景模式屏幕+3级和多级菜单高亮,不包括相册屏幕、弹出式菜单等

UI_filled_area  *menuitem_two_line_highlight_filler;//相册、视频播放器等2行菜单高亮

UI_filled_area  *menuitem_multirow_highlight_filler;//通话中心、多媒体等二级菜单高亮(不包括情景模式screen)

UI_filled_area  *menuitem_thick_highlight_filler;//相册、视频播放器等2行菜单高亮

UI_filled_area  *main_menu_bkg_filler;//主菜单背景

UI_filled_area  *sub_menu_bkg_filler;//二级及多级菜单背景

PU8             popup_bkg_image;//pop-up屏幕背景图片

color           *popup_text_color;//pop-up屏幕文本颜色

UI_filled_area  *cascade_menu_highlight_filler;//级联菜单(pop-up式菜单,即选项菜单)高亮

UI_filled_area  *softkey_bar_bkg_filler;//softkey bar 背景

还有一些修改颜色的变量,大多都见名知意啦。

 

参考代码:

#ifdef __MMI_THEMES_V2_SUPPORT__

extern theme_details_struct *MMI_themes;

#else

extern MMI_theme **MMI_themes;

#endif

    extern MMI_theme *current_MMI_theme;

    color red = {255,0,0,0};

    color green = {0,255,0,0};

    color black = {0,0,0,100};

    UI_filled_area filler = {0};

   

    int i = 0;

#ifndef __MTK_TARGET__

#ifdef __MMI_THEMES_V2_SUPPORT__

    memcpy(temp_theme, MMI_themes[0].theme, sizeof(MMI_theme));

#else

   memcpy(temp_theme, MMI_themes[0], sizeof(MMI_theme));

#endif

    //scroll bar

    test_theme.scrollbar_background_filler = &test_scrollbar_bg_filler;

    test_theme.scrollbar_indicator_filler = &test_scrollbar_indicator_filler;

 

    //mainmenu&sub menu background

    test_theme.main_menu_bkg_filler = /

    test_theme.sub_menu_bkg_filler = &idle_main_menu_bkg_filler_test;

    //menu highlight

    test_theme.menuitem_single_line_highlight_filler = /

    test_theme.menuitem_two_line_highlight_filler = /

    test_theme.menuitem_multirow_highlight_filler= /

    test_theme.cascade_menu_highlight_filler = /

    test_theme.menuitem_thick_highlight_filler= &idle_sub_menu_bkg_filler_test;

 

    //级联菜单(pop-up式菜单,即选项菜单)背景&边框

    test_theme.small_list_menu_normal_filler = /

    test_theme.small_list_screen_border_filler = &idle_main_menu_bkg_filler_test;

 

    //softkey

    test_theme.softkey_lsk_down_filler = /

    test_theme.softkey_lsk_up_filler = /

    test_theme.softkey_rsk_down_filler = /

    test_theme.softkey_rsk_up_filler = /

    test_theme.popup_softkey_bar_filler = /

    test_theme.softkey_bar_bkg_filler = &test_softkey_bkg_filler;

 

    //pop-up

{

    color popup_bg = {234,187,228,100};

    color popup_border = {255,164,209,100};

    test_theme.popup_screen_background_color = &popup_bg;

    test_theme.popup_screen_border_color = &popup_border;

    test_theme.popup_text_color = &black;

    test_theme.popup_bkg_image = (PU8)testpopupbg;

}

 

#endif

    set_MMI_theme(&test_theme);

    MMI_apply_current_theme();

 

其中弹出式屏幕菜单和pop-up屏幕softkey不会变,原因请查看Wgui_softkey_oem.c--show_softkey_background_with_clipping()函数。

 

 

下面说下电池电量和信号图标的显示:

MTK会把电池电量icon(路径MainLCD/IdleScreen/Statusicons/battery/SI_BAT)文件夹下的几个icon文件编译成一个资源数据数组__MAINLCD__IDLESCREEN__STATUSICONS__BATTERY__SI_BAT,mtk会在数据前面加相应的头。例如:

    0x02, 0x04, 0x00, 0x00, 0x00, 0x11, 0x20, 0x01,

    0x08, 0x00, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,

    0x94, 0x05, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,

    0x20, 0x0B, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,

    0xAC, 0x10, 0x00, 0x00, 0x8A, 0x05, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00,

    0x42, 0x4D, 0x8A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x28, 0x00,…………………

主头:8个字节:1字节为图片标示即类型,gdi_const.h文件中有定义,此为GDI_IMAGE_TYPE_BMP_SEQUENCE(2),则第一个字节为0x02;

2字节为帧数,即几张图片,一张第二个字节为0x01,四张则为0x04;3字节应该为默认播放帧;4和5字节为文件大小,不用,为0x00, 0x00;6、7、8字节为图片宽高,这里是用3个字节即12位表示的。

副头:即为每个图片要加个头,即每个文件的信息,用来读取每个文件的。每个副头12个字节,所以总共是图片数*12。例子中为4张图片,则4行副头。

       1-4字节为第一张图片的偏移为8个字节(主头的大小),这里用4个字节表示,所以是0x08, 0x00, 0x00, 0x00

       5-8字节为图片大小,4个字节表示,小点表示法。

       9-12为图片队列的间距,用意不明确,有图片所在文件夹下的interval.txt文本文件决定,帧数也是从此文件中读出的(根据文件内容有几段数字,此数字即为间距,9-12字节),此数据不影响显示。

       每段的副头有以上说明字节组成,1-4偏移量则是上一偏移+文件大小

数据结构就是这样,显示的时候,会根据参数计算出要显示哪一帧。

 

关于MTK主题大致就这样了,如有错误知错请指出,谢谢!

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/huangtaoyuan/archive/2010/06/24/5691129.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值