MiniGUI软件架构

来源:互联网 发布:ubuntu安装jdk1.8 编辑:程序博客网 时间:2024/05/29 16:52

 

MiniGUI从技术架构上包括几个模块:输入抽象层(IAL)、输出抽象层(GAL)、消息模块、窗口模块、图形设备接口模块(GDI)及MiniGUI组件。其架构图如下:

 

1. 图形抽象层和输入抽象层

 

在MiniGUI 3.0版本的开发中,引入了图形抽象层(Graphics Abstract Layer)和输入抽象层(Input Abstract Layer)的概念。抽象层的概念类似Linux内核虚拟文件系统的概念。它定义了一组不依赖任何特殊硬件的抽象接口,所有顶层的图形操作和输入处理都建立在抽象接口之上,而用于实现这一抽象接口的底层代码称为“图形引擎”或“输入引擎”,类似操作系统中的驱动程序。有了GAL和IAL,只需根据具体的硬件实现新的图形引擎和输入引擎,我们可以非常方便地将MiniGUI移植到其他平台上。

 

2. 图形设备接口(Graphics Device Interfaces, GDI)

 

图形设备接口基于图形抽象层,为窗口处理模块提供图形相关的接口,如绘制点线、填充矩形、输入文件等。在图形设备接口中还包含其他比较独立的子模块,如字体字符集支持,图像支持等结合相关算法生成字符或图像。

 

3. 消息处理模块(Messaging Module)

 

消息处理模块在IAL基础上,实现MiniGUI的消息处理机制,为上层提供了完备的消息管理接口,众所周知,几乎所有的GUI系统本质上都是事件驱动的,系统自身的运行及GUI应用的运行都依赖于消息处理模块。

 

4. 多窗口处理模块(Windowing Module)和控件(Control或Widget)

 

窗口处理模块基于图形设备接口和消息处理模块实现,该模块为应用程序提供了创建主窗口和控件基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类,我们可以创建属于某个控件类的多个控件实例,从而让这些控件实例使用同一个控件类代码。这样,我们就实现了类似C++的类和实例概念,从而可以最大程度上重复利用已有代码,并提高代码的可维护性。MiniGUI已经实现了常见的GUI控件,如静态框、按钮、编辑框、列表框、下拉框等。

 

5. 外观支持(Look & Feel)

 

外观支持模块是MiniGUI 3.0提出的最新模块,该模块提供上层应用程序的接口可用来定制MiniGUI窗口、控件的外观。在先前的版本中已经实现了主窗口和控件的定制功能,还没有被抽离出来形成独立的模块。只是实现了三种显示风格,分别为类似PC的三维风格(PC3D)、平板风格(FLAT)、流行风格(FASHION)。可以通过配制选项来选择使用。在MiniGUI 3.0中,主窗口和控件的外观可完全由应用程序自行定制,在创建窗口或控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或控件具有各自不同的外观。

 

以上模块组成了MiniGUI的核心。在MiniGUI接口之上,我们还为应用程序提供了若干组件,这些组件为应用程序提供了某些特殊的功能特性:

 

a. mGi是MiniGUI的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架,并提供给用户管理输入法的容器,通过这个容器,用户还可以添加自定义的输入法。

 

b. mGp是针对MiniGUI应用程序的一个打印组件,该组件使用户的MiniGUI应用程序具有打印输出功能。可以将MiniGUI程序中的位图和文字输出到打印机上。

 

c. mG3d是一个为MiniGUI应用程序提供了3D接口的组件,通过这些接口,用户可以应用程序添加三维图像、文件渲染、场景渲染等效果,从而具有三维效果的人机界面。

 

d. mGUtils mGPlusmGSkin等组件是基于MiniGUI 3.0版本,提供常见工具接口、高级图形接口、皮肤UI功能等。

 

MiniGUI运行模式

 

和Linux这样的类UNIX操作系统相比,一般意义上的传统嵌入式操作系统具有一些特殊性。举例来言,uC/OS-II、eCos、VxWork等操作系统,通常运行在没有MMU的CPU上,这时,往往没有进程的概念,而只有线程或任务的概念,这样,GUI系统的运行环境就大相径庭。为了适应不同的操作系统环境,我们可将MiniGUI配置成三种运行模式:

 

MiniGUI-Threads:运行在MiniGUI-Threads上的程序可以在不同的线程中建立多个窗口,但所有的窗口在一个进程或地址空间中运行。这种运行模式主要用来支持大多数传统意义上的嵌入式操作系统,比如VxWorks、ThreadX、Nucleus、OSE、pSOS、uC/OS-II、eCos等。当然,在Linux和uClinux上,MiniGUI也能以MiniGUI-Threads的模式运行。

 

MiniGUI-Processes:与MiniGUI-Threads相反,MiniGUI-Processes上的每个程序是单独进程,每个进程也可以建立多个窗口,并且实现了多进程窗口系统。MiniGUI-Processes适合于具有完整UNIX特性的嵌入式操作系统。

 

MiniGUI-Standalone:在这种运行模式下,MiniGUI可以以独立任务的方式运行,即不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用uClinux的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用MiniGUI-Standalone来开发应用软件。

 

一般而言,MiniGUI-Standalone模式的适用面最广,几乎可以支持所有的操作系统;MiniGUI-Threads模式的适用面次之,可运行在支持多任务的实时嵌入式操作系统,或者具备完整UNIX特性的普通操作系统上;MiniGUI-Processes模式的适用面较小,它仅适用于具备完整UNIX特性的嵌入式操作系统,比如Linux。

 

不论采用哪种运行模式,MiniGUI都为上层应用软件提供了最大程序的一致性;只有少数几个涉及初始化的接口在不同运行模式上有所不同。

原创粉丝点击