MTK之DrawManager机制

来源:互联网 发布:highcharts 3d.js下载 编辑:程序博客网 时间:2024/06/06 21:04
 
1、void dm_setup_data(dm_data_struct *dm_data)
设置全局变量g_dm_data(模板ID、屏幕ID、标志)
备份当前模板退出函数到全局变量dm_backup_exit_category_function并设置全局变量ExitCategoryFunction为dm_exit_category_function
根据内部全局变量g_dm_cntx的redraw_screen_main当前值重设g_dm_cntx.redraw_screen_main
正常步骤set:NORMAL_EXIT -> NORMAL_SHOW
从重回屏幕set:NORMAL_REDRAW -> REDRAW_2_SHOW -> dm_reset_context -> NORMAL_SHOW
从正常显示和其它set:不变

2、ShowCategoryXXXScreen(...)
高亮处理
按键注册
注册自绘区控制:dm_register_category_controlled_callback(dm_category_XXX_controlled_area);
dm_setup_category_functions(dm_redraw_category_screen, GetCategoryXXXHistory, GetCategoryXXXHistorySize);//此函数实际包含如下三个设置:
RedrawCategoryFunction = dm_redraw_category_screen;//1
GetCategoryHistory = dm_get_category_history;//2
GetCategoryHistorySize = dm_get_category_history_size;//3

ExitCategoryFunction = ExitCategoryXXXScreen;
dm_data.s32ScrId = (S32)GetActiveScreenId();
dm_data.s32CatId = MMI_CATEGORYXXX_ID;
dm_data.s32flags = DM_NO_FLAGS;
dm_setup_data(&dm_data);
dm_redraw_category_screen();

3、dm_redraw_category_screen()
根据g_dm_cntx.redraw_screen_main判断重绘方式
通过模板ID获取控件列表和坐标区域
若存在屏幕ID和坐标区域的关联定义,则通过屏幕ID获取模板坐标区域
根据上面获得的坐标区域设置x、y值
根据s32flags值清除该区域
顺序绘制各控件

4、U8 *dm_get_category_history(U8 *history_buffer)
通过模板ID获取控件列表和坐标区域
顺序获取各控件历史

5、S32 dm_get_category_history_size(void)
通过模板ID获取控件列表和坐标区域
顺序返回各控件历史大小(sizeof)