现在的位置: 首页 > 综合 > 正文

MTK主题修改

2013年10月13日 ⁄ 综合 ⁄ 共 4755字 ⁄ 字号 评论关闭

/*软件版本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

背景

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

 菜单高亮:
gui_list_effect_slide_draw_highlight_filler----gui_menu_oem.c

参考代码:

#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主题大致就这样了,如有错误知错请指出,谢谢!

 

 

 

抱歉!评论已关闭.