一 MiniGUI 1.0.03源码裁减目的:
1.充分理解MiniGUI源码及机制,以便日后能快捷地对GUI模块进行特定改造;
2.裁减MiniGUI体积,以减小烧写入flash程序的大小,节省空间;
二 MiniGUI 1.0.03源码结构图:
在对MiniGUI裁减之前,先了解一下MiniGUI源码结构:
|-- src //库源代码
| |-- client //MiniGUI C/S架构客户端通讯模块源代码
| |-- control //控件源代码,包括button、edit、listbox、medit、menubutton、progressbar/
| | //static、toolbar等。
| |-- font //字体、字符集、多语言等
| | `-- in-core
| |-- gal //输出引擎
| | `-- native //native输出引擎
| |-- gdi //图形设备接口,包括绘图、图形显示、文本输出、坐标映射等等显示支持
| |-- gui //图形用户接口,包括窗口、对话框、菜单等
| |-- ial //输入引擎,串口输入引擎irkbd就在这个目录
| | `-- native //本地输入引擎
| |-- image //图形支持,如jpg等
| |-- ime //输入法支持,不过这部分代码已经被废弃
| |-- include //内部头文件
| | `-- control
| |-- kernel //库的底层代码,包括消息循环、分发,定时器、光标、等支持,初始化也在//这里
| |-- main //main封装
| |-- misc //杂项,主要是多语言支持
| `-- server //客户机服务器通讯的服务器部分代码
`-- vcongui //虚拟命令控制台支持
三 MiniGUI 1.0.03架构分析:
1.MiniGUI分层结构:
API
|
CORE
|
GAL/IAL/pthread
|
应用编程接口
|
核心层: inputmethod / mywinlib / vconGUIlib controlclass / controls / dialog cursor / timer / caret / menu / shortcut windowing / event / messaging / GDI / resource memory / region / misc
|
GAL和IAL提供底层图形接口以及鼠标和键盘的驱动,为 MiniGUI提供了底层的Linux控制台或者X Window 上的图形接口以及输入接口,而Pthread用于提供内核级线程支持的C函数库。
|
2.提取图像输出部分分析:
由于在我们的上层应用中,主要用到MiniGUI的图像输出部分,因此对这部分再做一下详细分析,将这部分内容提取出来:在API应用编程接口中提取绘图写字相关的函数接口,CORE层则提取GDI(Graphics Device Interface)部分,底层提取GAL(Graphics Abstract Layer)。如下图所示:
API
|
CORE
|
GAL
|
应用编程接口:按功能可分为基本绘图属性设置函数,基本绘图函数,位图基本操作函数,字体及文本相关函数,映射相关函数,剪切域操作函数,矩形操作函数;
|
核心层:GDI(Graphics Device Interface) DC进行统一封装; GAL_GC(Graphic Abstract Layer_Graphic Context)和PLogFont,分别提供绘图和字体字库下层的相关支持;
|
GAL GAL(Graphics Abstract Layer)
|
A:其中,API应用编程接口按功能划分主要分为以下几类:
1基本绘图属性设置函数,对绘图各属性进行设置,pencolor, brushcolor, bkmode, tabstop 等;
2基本绘图函数,如画点,线,圆,矩形,调色板:pixel,lineto, moveto,circle,rectange等;
3 位图基本操作函数,如fillbox, fillboxwithbitmap, fillboxwithbitmappart, loadbitmap, loadmybitmap, bitblt, stretchblt等;
4字体及文本相关函数,如TextOutLen, CreateLogFont, DestroyLogFont, GetLogFontInfo等;
5 映射相关函数,如GetMapMode,SetMapMode,GetViewportExt,GetViewportOrg等;
6 剪切域操作函数,如ExcludeClipRect, IncludeClipRect,ClipRectIntersect,SelectClipRect等;
7 矩形操作函数,如SetRect,SetRectEmpty,CopyRect,IsRectEmpty等;
B:核心层的GDI部分,主要将字体字库与基本的绘图操作进行整合,给上层API提供统一的绘图接口。其中DC(device context)给上层API提供接口,是所有上层API函数的综合体,另外它包含的GAL_GC(Graphic Abstract Layer_Graphic Context)和PLogFont,分别为这些函数的实现提供了下层绘图和字体字库的相关支持。GAL_GC的最大作用是它结合GFX这个大的结构体将各种不同硬件的图像输出方式屏蔽起来,给上层应用提供统一的绘图接口。而PLogFont(逻辑字体)则是一种抽象的字体,它利用DevFont(设备字体)将MiniGUI支持的各种字体统一起来,供上层使用。
C:底层GAL部分,主要是针对不同的图像输出模式,进行与硬件设备相关的操作,真正实现在屏幕上显示输出。
因此,这里的层次结构如下图所示:
DC(device context)
)
|
GAL_GC/GFX
|
Native
|
LogFont
|
Drawing Attribute
|
map
|
Vis_ep7211
|
Ads
|
DevFont
|
……
|
API
|
CORE
|
GAL
|
API(属性设置/ 基本绘图/ 位图操作/ 映射/ 剪切域操作/ 矩形操作)
|
四 MiniGUI 1.0.03裁减方案:
综上情况,可以裁减的部分主要是控件相关部分,和一些不需要的资源文件。如下图所示,黄色部分为可裁减部分。
源码目录:
|-- src //库源代码
| |-- client //MiniGUI C/S架构客户端通讯模块源代码
| |-- control //控件源代码,包括button、edit、listbox、medit、menubutton、progressbar/
| | //static、toolbar等。
| |-- font //字体、字符集、多语言等
| | `-- in-core
| |-- gal //输出引擎
| | `-- native //native输出引擎
| |-- gdi //图形设备接口,包括绘图、图形显示、文本输出、坐标映射等等显示支持
| |-- gui //图形用户接口,包括窗口、对话框、菜单等
| |-- ial //输入引擎,串口输入引擎irkbd就在这个目录
| | `-- native //本地输入引擎
| |-- image //图形支持,如jpg等
| |-- ime //输入法支持,不过这部分代码已经被废弃
| |-- include //内部头文件
| | `-- control
| |-- kernel //库的底层代码,包括消息循环、分发,定时器、光标、等支持,初始化也在//这里
| |-- main //main封装
| |-- misc //杂项,主要是多语言支持
| `-- server //客户机服务器通讯的服务器部分代码
`-- vcongui //虚拟命令控制台支持
资源目录:
|-- etc // MiniGUI.cfg配置文件目录
|-- myapp //可以在这里放置上层应用程序
|-- usr
| |-- language //多语言支持相关文本,同时这个目录也存放和多语言、字体相关配置文件
| | |-- ch //中文
| | |-- en //英文
| | `-- tw //繁体
| `-- local
| `-- lib
| `-- minigui
| |-- fonts //字体目录,b5开头的文件是繁体中文,gb是简体,其余是英文
| `-- res
| |-- bmp //系统图片
| |-- cursor //系统光标
| `-- icon //系统图标
`-- var
`-- tmp //最终的系统里必须有这个目录,而且是可写的!MiniGUI运行是会在生成文件
转自:http://tinatzc.blog.163.com/blog/static/4201697420078323316472/