Software Architecture of MiniGUI
The following figure illustrates the software architecture of MiniGUI. The relationship between MiniGUI and realtime operating systems is illustrated in the figure as well. An application on MiniGUI can implement its functions by calling APIs in ANSI C library and MiniGUI libraries. The abastract layers of MiniGUI hide the details of underlying hardware devices and operating systems, and the application need not to take care of the output and input devices.
As shown above, from bottom to top, MiniGUI includes the following modules:
- Graphics Abstraction Layer (GAL). GAL hides the differences among different operating systems or devices to provide an unified graphics interface for the upper layer of MiniGUI. In GAL, it contains the software components to support the devices like Linux frame buffer, eCos LCD, and so on. These software components call the device interface of bottom layer to achieve specific GAL operations such as opening device, setting resolution and video mode, closing device, and so no. We call these software components as the "GAL engines". Its concept is similar to the device driver in operating system.
- Input Abstraction Layer (IAL).Similar to GAL, IAL hides the differences among various input devices such as the keyboard, keypad, mouse, and touch screen to provide an universal interface for upper layer. To support different keyboard, touch screen or mouse interface, you can write your own IAL engine. MiniGUI provides support for Linux console (keyboard and mouse), touch screen, remote controller, keypad, and other input devices by IAL and IAL engines.
- Graphics Device Interfaces (GDI).This module is based on GAL and provides the interfaces related to graphics for upper layer applications, such as drawing curves, rendering text, filling rectangle, and so on. GDI contains other independent sub-modules, such as font and char set support, image support, and so on.
- Messaging Module. This module is based on IAL, it implements MiniGUI messaging mechanism and provided a comprehensive management interface for the upper layer. It is well known that almost all the GUI systems are event-driven, so its own operation and the operation of GUI application both rely on messaging module.
- Windowing Module and Control/Widget. Based on GDI and messaging module, MiniGUI implements the windowing module. This module provides basic interface to create the main window and controls (widgets) for upper applications, and is responsible for maintaining control classes. Control class is an important concept to get the reusability of program code. By using one control class, we can create many control instances that belong to a certain kind of control class, so that these instances can use the same code of the control class. In this way, we can achieve the class/instance concept similar to C++, which can reuse existed code as much as possible and improve the maintainability of software. The control module implements a lot of common controls, such as static box, button, edit box, list box, combo box, and so on.
- Look and Feel. This module is introduced in MiniGUI V3.0. It can be used to customize the appearance of main windows and controls. In the previous version, the ability to customize main windows and controls has not been an independent module, but we can still make the main windows and controls of MiniGUI have three kinds of appearance styles by configuration options: PC3D (a style similar to the PC), FLAT, and FASHION. In MiniGUI 3.0, the appearance of main windows and controls can be fully customized by the applications. When you create a main window or control, by specifying the different name of the Look and Feel Renderer (LFRDR), you will get different appearance of the main window or control.