|
发表于 2009-2-18 09:27:25
|
显示全部楼层
看下面
可以, 不过为效率考虑, 需要加上. 看下面代码
gui_lock_double_buffer(); 实际调用代码应该是如下函数(各平台可能不同)
void gdi_layer_lock_frame_buffer(void)
{
GDI_LOCK;
GDI_LCD->blt_lock++;
}
// 看应用, 如下
void mmi_redraw_xxx(void)
{
gui_lock_double_buffer();
gui_push_clip();
gui_set_clip(x1, y1, x2, y2);
gui_show_image(x1, y1, audply_main_playlisticon.list_icon[playlist]);
gui_pop_clip();
gui_unlock_double_buffer();
gui_BLT_double_buffer(x1, y1, x2, y2);
}
//以上代码, 如果gui_show_image 换成诸如 mmi_redraw_xxx 这样结构的代码, 如下面的mmi_show_yyy, 那么执行 mmi_redraw_xxx 此时只会刷屏一次, 而如果不加锁屏操作, 将每有一次 gui_BLT_double_buffer(0, 0, UI_device_width - 1, UI_device_height - 1); 系统就会刷屏一次, 太多时是不允许的
void mmi_show_yyy(void)
{
gui_lock_double_buffer();
gui_push_clip();
gui_set_clip(x1, y1, x2, y2);
... ...
gui_pop_clip();
gui_unlock_double_buffer();
gui_BLT_double_buffer(x1, y1, x2, y2);
} |
|