分类: 嵌入式
2011-04-21 23:46:25
Mae_display.c阅读笔记
1.思路分析
=========================================================================
EMMI Display Mechanism【EMMI显示原理】
EMMI ---> Enhanced MMI 可增强,可操作的应用层【人机界面(Man-Machine interface)】
1
Abstract 【摘要】
Display Overview【概述】
Display Update Mechanism 【原理】
·Invalidate 使窗口无效【初始化】
·Draw 绘制
·Update 更新
API Usage Example 【API 用法示例】
2
Display Overview
·IBitmap
代表一块以pixel【像素】形式存放资料的缓冲区,目前支持的格式有16bits,24bits以及32bits的color format【色彩格式】。相关操作界面定义于mae_bitmap.h中,可以对此缓冲区进行各种绘图操作,但与屏幕显示无关。
·IDisplay
工作区(Client Area):如输入文字、 绘图、影像等资料处理与显示区。
对应屏幕显示的操作,其中包含了一块与屏幕等大小的bitmap【位图】,称为MMI Display Buffer【MMI层显示缓冲区】,对此部分的操作预设都会绘制到这块buffer,然后反应到屏幕上,AP相关操作界面定义于mmi_common_display.h中。
Display除了Bitmap之外,还包含了Client Area【CA】的概念,也就是可绘制区域。所有绘图的动作仅能反应在此范围中,超出的部分不会画到,用来避免画到非预期的范围。下图表示出IDisplayCanvas,IDisplay,IBitmap的关系。IDisplay中的IBitmap预设是MMI Display buffer,不过是可以透过相关操作界面被置换掉的,置换掉之后,对于IDisplay的绘图行为就只会画到新的IBitmap上,而不会画到屏幕上。
·Widget
这边仅就Widget Draw的部分做简单说明,Widget的Draw行为通常会通过定义于mae_display.h的各种draw function,绘制到mmi buffer上,一般我们建议AP通过此方式来绘制到画面上,而避免直接通过第二点的mmi_common_display.h的操作方式来绘制。这与下面的Display update mechanism【更新显示原理】有关。
3
Display update mechanism
目前平台上一般通过Widget来显示画面的机制,主要由以下三件事构成:
·1.决定重画区域范围【invalidate】:这部分会由Widget触发,通常当Widget中,与显示相关的资料有所变动时,例如:大小改变,字符串改变,图像改变等,都会触发本事件,进而引发画面更新的流程。(最通常的理解,对需要改变的区域初始化)
·2.绘制该区域的画面【Draw】:当Invalidate area(初始化区域)决定之后,就会开始进行绘制(Draw)流程,依次引发该区域所有的Widget进行重画流程。
·3.更新该区域的图画到屏幕上【Update】:当所有Draw的动作都完成后,便会将该区域更新到屏幕上。
通过此机制,AP就不用自行maintain(维护)更新画面的操作,平台会在显示资料改变的时,自动引发整个更新画面的流程。