正在加载...
唯一路径: 
introduction
MiniGUI 产品简介 | 产品

MiniGUI 高级图形支持系统

MiniGUI 是一款面向实时嵌入式系统的图形用户界面支持系统。MiniGUI 的开发起始于 1998 年底,到现在已历经十年多时间。经过飞漫软件多年的精心打造,MiniGUI 已经成为性能优良、功能丰富的跨操作系统嵌入式图形用户界面支持系统。目前,MiniGUI 已经广泛应用于通讯、医疗、工控、电力、机顶盒、多媒体终端等领域。使用 MiniGUI 成功开发产品的企业有华为、中兴通讯、大唐移动、长虹、TCL、联想、迈瑞、南瑞、炬力、D2 等。这些用户广泛分部在中国大陆、中国台湾、新加坡、韩国、美国、德国、意大利、印度、以色列等国家和地区。值得一提的是,在中国自主开发的 3G 通讯标准 TD-SCDMA 中,约有 60% 获得入网许可证的 TD-SCDMA 手机使用 MiniGUI 作为其嵌入式图形平台,以支撑浏览器、可视电话等 3G 应用软件的运行,其中有海信 T68、中兴通讯 U85 等 TD 手机型号。

MiniGUI 的软件架构

如上图所示,从底至上,MiniGUI 由如下几个模块组成:

  • 图形抽象层(Graphics Abstraction Layer,GAL)。图形抽象层将来自不同操作系统或设备的图形接口进行抽象,为 MiniGUI 上层提供统一的图形接口。在图形抽象层内,包含有针对 Linux FB 设备、eCos LCD 设备等的软件组成部分。这些软件组成部分通过调用底层设备的接口来实现具体的图形抽象层操作,如打开设备、设置分辨率及显示模式、关闭设备等。我们将这些用于适配图形抽象层接口的软件组成部分称为“引擎(engine)”,其概念和操作系统中的设备驱动程序类似。
  • 输入抽象层(Input Abstraction Layer,IAL)。和 GAL 类似,输入抽象层将 MiniGUI 涉及的所有输入设备,如键盘(keyboard)、小键盘(keypad)、鼠标(mouse)、触摸屏(touch screen)等抽象了出来,为上层提供一致的接口。要支持不同的键盘、触摸屏或者鼠标接口,则通过为 IAL 编写不同的输入引擎实现。MiniGUI 通过 IAL 及其输入引擎,提供对 Linux 控制台(键盘及鼠标)、触摸屏、遥控器、小键盘等输入设备的支持。
  • 图形设备接口(Graphics Device Interfaces,GDI)。该模块基于图形抽象层为上层应用程序提供图形相关的接口,如绘制曲线、输出文本、填充矩形等等。图形设备接口中含包含其他比较独立的子模块,如字体字符集(font and charset)支持、图像(image)支持等。
  • 消息处理模块(Messaging Module)。该模块在输入抽象层基础上,实现了 MiniGUI 的消息处理机制,为上层提供了完备的消息管理接口。众所周知,几乎所有的GUI 系统本质上都是事件驱动的,系统自身的运行,以及GUI 应用程序的运行,都依赖于消息处理模块。
  • 多窗口处理模块(Windowing Module)和控件(Control 或 Widget)。基于图形设备接口和消息处理模块,MiniGUI 实现了多窗口处理模块。该模块为上层应用程序提供了创建主窗口和控件的基本接口,并负责维护控件类。控件类是用来实现控件代码重用的重要概念,利用控件类(control class),我们可以创建属于某个控件类的多个控件实例(instance),从而让这些控件实例使用同一个控件类的代码,这样,我们就实现了类似 C++ 那样的类和实例概念,从而可以最大程度上重复利用已有代码,并提高软件的可维护性。MiniGUI 的控件模块实现了常见的 GUI 控件,如静态框、按钮、编辑框、列表框、下拉框等等。
  • 外观支持(Look and Feel)。这个模块是 MiniGUI V3.0 提供给上层应用程序的接口,可用来定制 MiniGUI 窗口、控件的绘制。在 MiniGUI V3.0 之前的版本中,对主窗口和控件的定制能力,还没有被抽离出来形成独立的模块,但我们仍然可以通过配置选项让 MiniGUI 的主窗口、控件具有三种显示风格,分别是:类似 PC 的三维风格(PC3D)、平板风格(FLAT)、流行风格(FASHION)。在 MiniGUI 3.0 中,主窗口和控件的外观可完全由应用程序自行定制,在创建主窗口或者控件时,指定外观渲染器(renderer)的名称,就可以让主窗口或者控件具有各自不同的外观。

MiniGUI 运行模式

和 Linux 这样的类 UNIX 操作系统相比,一般意义上的传统嵌入式操作系统具有一些特殊性。举例而言,诸如 uClinux、uC/OS-II、eCos 等操作系统,通常运行在没有 MMU(内存管理单元,用于提供虚拟内存支持)的 CPU 上;这时,往往就没有进程的概念,而只有线程或者任务的概念,这样,MiniGUI 的运行环境也就大相径庭。因此,为了适合不同的操作系统环境,我们可将 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 特性的嵌入式操作系统,比如嵌入式 Linux。
  • MiniGUI-Standalone。这种运行模式下,MiniGUI 可以以独立任务的方式运行,既不需要多线程也不需要多进程的支持,这种运行模式适合功能单一的应用场合。比如在一些使用 uClinux 的嵌入式产品中,因为各种原因而缺少线程支持,这时,就可以使用 MiniGUI-Standalone 来开发应用软件。

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

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

MiniGUI 3.0 特效演示视频

MiniGUI 3.0 的主要功能增强

MiniGUI 2.0 基础上,MiniGUI 3.0 主要为应用程序提供如下功能增强:

  • 主窗口双缓冲区(Double Buffering Main Window)。MiniGUI 3.0 的主窗口具有双缓冲区时,我们可以在自定义缓冲区中获得整个主窗口的渲染结果。在此基础上,我们可以利用高级 2D 图形接口或者 3D 图形接口获得主窗口的各种特殊显示效果,如推拉切换、翻页切换、卷曲效果等等。
  • 外观渲染器(Look and Feel Render,LF RDR)。外观渲染器为用户提供了多种风格的主窗口和控件界面外观风格。应用程序在这几种风格的窗口界面之间进行切换非常容易,只要在创建窗口时传递不同的参数,你就可以变换出不同风格的界面。另外,MiniGUI 还进一步统一了窗口元素的属性,如颜色、尺寸、字体等,通过简单的接口,应用程序就可以方便地控制窗口元素的上述属性。
  • 双向文本(BIDI Text)的显示与输入。我们知道,除了大家熟知的从左向右书写的文字(如英语、汉语等)之外,还有许多语言采用从右向左的书写习惯,如阿拉伯文和希伯来文等。为了支持这些语言,MiniGUI 3.0中增加了对这两种语言所属字符集的处理,并增加了阿拉伯和希伯来键盘布局的支持,从而实现了对双向文本的输入输出处理。
  • 不规则窗口。MiniGUI 3.0 之前,所有的窗口只能是矩形的。MiniGUI 3.0 增加了对不规则窗口的支持,如圆角矩形窗口、非矩形的窗口等。通过使用不规则窗口,能为你的用户界面带来意想不到的效果。
  • 字体增强。MiniGUI 3.0 中,飞漫软件发明了一种新的 UNICODE 字体文件格式,称为“UPF”字体。这种字体的最大特点,是便于在多进程环境下使用,从而极大地节约了内存的使用。同时,飞漫软件增强了VBF字体格式,将VBF 字体升级到了3.0,扩大了其能适用的字符集范围,以便支持阿拉伯文等语言文字的显示。
  • 其他增强。MiniGUI 3.0 实现了桌面的可定制。通过桌面的外部编程接口,用户可以在桌面放置图标并响应桌面事件,实现类似 Windows 桌面的界面效果。除此之外,MiniGUI 3.0 还增强了透明控件的实现,使之效率更高,且不依赖于控件的内部实现代码。MiniGUI 3.0 还提供独立的滚动条控件,提供统一的虚拟帧缓冲区程序支持等等。

MiniGUI 组件

MiniGUI 核心(Core)接口之上,我们还为应用程序提供若干组件,这些组件分别为应用程序提供某些特殊的功能特性:

  • mGi 是 MiniGUI 的输入法组件,该组件目前提供了软键盘输入法和手写输入法框架,并提供给用户管理输入法的容器,通过这个容器,用户还可以添加自定义的输入法。
  • mGp 是针对 MiniGUI 应用程序的一个打印组件,该组件使用户的 MiniGUI 程序具有打印输出功能,可以将 MiniGUI 程序中的位图或文字输出到打印机。
  • mG3d 是一个为 MiniGUI 的应用程序提供 3D 接口的组件,通过这些接口,用户可以给自己的应用程序添加三维图像、文字渲染、场景渲染等效果,从而可以具有三维效果的人机界面。
  • mGUtils 组件为用户提供了一些常用的对话框模板,有了这些模板,用户就不用为一些常用的功能编写重复代码了。本组件提供的功能模板有:普通文件对话框、颜色设置对话框、字体设置对话框、信息设置对话框等。
  • mGPlus 组件是对 MiniGUI 图形绘制接口的一个扩充和增强,主要提供对二维矢量图形和高级图形算法的支持,如路径、渐变填充和颜色组合等。