MiniGUI源码裁减方案

一 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/

你可能感兴趣的:(MiniGUI源码裁减方案)