- What’s New in MiniGUI 4.0
- What’s New in MiniGUI 3.2
- Operating Systems Supported
- MiniGUI Runtime Modes
- Hardware Support
- Footprint of MiniGUI
- Graphics Sub-System
- General Features
- Image Formats
- Fonts and Charsets
- Windowing Sub-System
- General Features
- Controls/Widgets
- Common Dialog Boxes
- Input Method
- Look and Feel
- Customization of MiniGUI desktop
- Other Features of MiniGUI
- MiniGUI Components
This chapter lists the technical features of MiniGUI (version 3.2 or later) in detail. It intends to give you an overview about MiniGUI in terms of technical features. Every effort is made to make the content as complete as possible.
In this version, we mainly enhanced and tuned the APIs related to text rendering and fonts:
- MiniGUI now provides complete APIs for Unicode character processing. These APIs conform to Unicode 12.0.
- MiniGUI also provides new APIs to lay out, shape, and render glyphs from complex and mixed scripts, such as Arabic, Thai, and Indic.
- We tuned and optimized MiniGUI's logical and device font interfaces to support the new features above.
- MiniGUI now is enhanced to support input events which may be generated
by input devices other than standard mouse (or single-touch panel) and
keyboard, such as multi-touch panel (gesture), joystick, tablet tool,
table pad, and switch. We introduce
MSG_EXIN_XXX
messages to support the input events from devices other than standard mouse and keyboard. We call these messages as 'extra input messages'. - The NEWGAL engine of
dri
to support modern DRI/DRM-driven graphics cards or GPUs on Linux. - The IAL engine of
libinput
to support all modern input devices including mouse, keyboard, joystick, switch, multiple touch panel, gesture, tablet tool, and table pad on Linux. - We introduced a Slice Memory Allocator for fast concurrent memory chunk allocation.
- Cleanup and tune code for GCC 7.3.
We introduce the following new features in MiniGUI 3.2:
- The support for 64-bit architectures (MiniGUI Core and all components). Because of some API changes, we recommend you use MiniGUI V3.2.x instead of MiniGUI V3.0.x for new projects.
- A new component: mGNCS4Touch. mGNCS4Touch is a MiniGUI component which provides some mGNCS-compliant widgets with animations for smart devices with a touch panel.
The following legacy components will not be maintained since MiniGUI 3.2:
- mGp is a printing component of MiniGUI, which provides a printing function to MiniGUI apps. At present, mGp supports Epson, HP and some other printers.
- mGi is a input component of MiniGUI, which provides the framework of soft-keyboard and hand writing input methods. It also supplies an IME container for users to add self-defined IME. On the other hand, you can use self-defined keyboard bitmap for soft-keyboards and add self-defined translation methods to it.
- mG3d is a 3D rendering component of MiniGUI. Using this component, you can render 3D objects in your applications.
MiniGUI is a complete and self-contained embedded Graphics User Interface (GUI) supporting system, which is designed and optimized for embedded systems. MiniGUI provides support for multiple (real-time) embedded operating systems. The OSes supported by MiniGUI include Linux, uClinux, eCos, uC/OS-II, VxWorks, pSOS, Nucleus, ThreadX, and OSE. SDK for Win32 platform is available also; it can facilitate the development and debugging of embedded applications.
Operating Systems Supported | Runtime Mode(s) Supported |
---|---|
Linux | MiniGUI-Processes MiniGUI-Threads MiniGUI-Standalone |
uClinux | MiniGUI-Threads MiniGUI-Standalone |
RTOS (VxWorks, eCos, uC/OS-II, pSOS, Nucleus, ThreadX, and OSE) | MiniGUI-Threads MiniGUI-Standalone |
MiniGUI has three runtime modes. Different from general-purpose operating systems like Linux, the traditional embedded operating systems have some particularities. For example, uClinux, uC/OS-II, eCos, and VxWorks usually run on non-MMU CPUs, without support for processes that have separate address spaces but only threads or tasks. Therefore, those runtime environments are entirely different from Linux. We can configure and compile MiniGUI into three runtime modes for different operating systems: MiniGUI-Threads, MiniGUI-Processes, and MiniGUI-Standalone.
Runtime modes | Description | System Requirements |
---|---|---|
MiniGUI-Threads | A program running on MiniGUI-Threads can create multiple overlapped windows in different threads/tasks, and all windows running in the same address space. MiniGUI-Threads is fit for real-time operating systems such as eCos, uC/OS-II, and VxWorks. By using POSIX Threads, MiniGUI-Threads can run on Linux/uClinux as well. | - Multiple Tasks/Threads - Semaphore/Mutex |
MiniGUI-Processes | Every task in MiniGUI-Processes is a single process; multi-windows can be created for each process. At present, a complete multi-processes windowing system has already been implemented. MiniGUI-Processes are suitable for embedded system with full UNIX-like operating systems, such as Linux. | - Support for Multi-Processes - Shared Memory - UNIX domain socket - Semaphore |
MiniGUI-Standalone | A single-task version of MiniGUI. This mode is useful for some systems, which lack stable thread support, like uClinux. | - Timer |
MiniGUI can run on almost all operating systems[^1] under MiniGUI-Standalone mode. MiniGUI-Threads is suitable for real-time embedded operating systems, which provide support for multi-task, or general-purpose operating systems like Linux/UNIX. Moreover, MiniGUI can run on only UNIX-like operating systems under MiniGUI-Processes mode. No matter in which mode, MiniGUI provides for application the furthest API compatibility; only a few initialization interfaces are different among different modes.
At present, MiniGUI V3.2 has been proven to be capable of running smoothly on embedded systems with SoCs/CPUs/MPUs/MCUs that are based on Intel x86 32/64-bit, ARM 32/64-bit (e.g., ARMv7 and ARM Cortex-A7), MIPS, PowerPC, and those used in low-end devices, such as DragonBall, ColdFire etc.
MiniGUI uses Graphics Abstract Layer (GAL) and Input Abstract Layer (IAL) to support different output devices and input devices. Abstract layers of graphics and input, placing no influence on API of the upper software modules; greatly facilitate the porting and debugging of MiniGUI itself as well as applications. By writing a GAL engine or IAL engine, MiniGUI can support a variety of video devices and/or input devices.
The GAL offers hardware acceleration support and makes the best use of video memory; the GDI interface based on GAL provides complete graphics APIs for applications. The GDI interface supports Alpha blending, bitmap rotating/stretching, transparent bit blitting, raster operation, as well as advanced 2D (two-dimension) graphics functions (ellipse, polygon, pen, and brush).
We can also implement some software GAL engines and IAL engines. For example, the auto-test of application can be achieved by Random IAL engine for simulating real user input. Another example, you can support YUV output equipments using Shadow NEWGAL engine. The Shadow engine also provides support for those graphics chips whose frame buffer cannot be accessed directly; provides support for the video modes less than 8-bpp (bits-per-pixel); and provides the function of screen rotation etc.
MiniGUI has built the support for multiple PC keyboard layouts, including American PC, French, German, Italian, Spanish, Arabic, and so on.
MiniGUI can also provide support for slave screens. If your system has multiple video devices, you can use one device as the master screen of MiniGUI to create main windows and controls and the other devices as the slave screens. By using GDI APIs of MiniGUI, you can also render text, output graphics to slave screens.
Device Type | Description | Comments |
---|---|---|
Architectures | Intel x86 32/64-bit, ARM 32/64-bit (e.g., ARMv7 and ARM Cortex-A7), MIPS, PowerPC DragonBall, ColdFire, and so on. | |
Typical CPUs/MPUs | Core i5/i7, Pentium, Allwinner R16, JZ47x0, TI DaVinci, EM86xx, HI35x0, and so on. | |
Output Devices | VGA, LCD, TV, OSD, and so on. No limit for resolution and color depth. | |
Input Devices | Keyboard, remote controller, keypad, mouse, single-touch panel. | |
Advanced Input Devices | Multi-touch panel (gesture), joystick, tablet tool, and switch. | Since 4.0.0 |
Engine | Description | Comment |
---|---|---|
Dummy GAL Engine | This GAL engine creates a virtual frame buffer in system memory. Therefore, we can run MiniGUI on a system using Dummy GAL engine if the real video device is not ready. | |
Shadow GAL Engine | This GAL engine creates a virtual frame buffer in system memory, but it will call sub-driver of this engine to update the pixels in the virtual frame buffer to the real video device. We can use this engine to support special video device like one in YUV color space or rotate the screen of the device. | |
MLShadow GAL Engine | This GAL engine can create multiple virtual frame buffers in system memory, and blend and update the pixels in different buffers to the real video device. By using this engine, we can create a transparent or semitransparent surface on the screen. | New feature of MiniGUI V3.0.x |
Dummy IAL Engine | This IAL engine does not do anything. If you use this engine, your MiniGUI application will not receive any input. Therefore, you can run MiniGUI on a system by using Dummy IAL engine if the real input device is not ready. | |
Auto IAL Engine | You can use this IAL engine to generate pre-defined input events, so you can do auto-test of your application. | |
Random IAL Engine | This engine will generate random input events, so you can use this engine to test your application. |
The typical system resources needed by MiniGUI itself are 1024KB of static memory (FLASH) and 1024KB of dynamic memory (RAM). Table 5 gives the system resources needed by MiniGUI and its application on different operating systems.
Table 5: Footprint of MiniGUI
Operating System | Minimal (FLASH/RAM) | Recommended (FLASH/RAM) |
---|---|---|
Linux | 1024KB/1024KB | 2048KB/4096KB |
uClinux | 700KB/512KB | 1024KB/2048KB |
RTOSes | 700KB/512KB | 1024KB/2048KB |
Graphics sub-system is one of the most important sub-systems of MiniGUI. This sub-system provides APIs for application to draw graphics, to fill images, and to render text etc.
MiniGUI provides support for complete GDI APIs. You can use these APIs to do raster operations, create complex regions, draw or fill ellipses, arcs, and polygons, etc. There are advanced 2D graphics functions available by using C99 math library. By using advanced 2D graphics, you can create abstract graphics objects, like pen and brush.
MiniGUI provides support for almost all popular image file types including GIF, GIF89a, JPEG, PNG, Windows BMP, etc.
Table 6: Image Types
Image Type | Description | Comments |
---|---|---|
Windows BMP | This is an image file format defined by Windows. | |
GIF | This is a popular image file used on Internet. | |
GIF89a | This is an extension of GIF to provide animation. | |
JPEG | This is an image file format used widely by hand-held devices such as digital camera, mobile phone. | Support for JPEG image format is implemented using libjpeg. |
PNG | This is a popular image file format intending to replace GIF. | Support for PNG image format is implemented by using libpng. |
MiniGUI provides support for multiple character sets and multiple fonts. Table 7 gives the font types supported by MiniGUI; Table 8 illustrates the charsets/encodings supported by MiniGUI.
Note that MiniGUI provides support for Arabic and Hebrew text. To support these two languages, MiniGUI 3.2 provides simple APIs for BIDI (bi-direction) text processing. However, These APIs are deprecated in MiniGUI 4.0.
MiniGUI 4.0 now provides complete APIs for Unicode character processing. These APIs conform to Unicode 12.0, including the Unicode Bidirectional Algorithm (UAX#9), Unicode Line Breaking Algorithm (UAX#14), Unicode Normalization Forms (UAX#15), Unicode Script Property (UAX#24), Unicode Text Segmentation (UAX#29), Unicode Vertical Text Layout (UAX#50), and so on. Therefore, in order to support Arabic and Hebrew text, or other text in complex scripts or mixed scripts, we recommend you use MiniGUI 4.0.
Enhance the font and text rendering, including UPF (UNICODE pre-rendered font), an upgrade of QPF; VBF V3, the upgrade version of VBF V2, BITMAP font, the font glyphs can be defined by customized bitmaps, and provides APIs for BIDI text processing.
Font Type | Description | Comment |
---|---|---|
RBF | This font type can be used to define simple font in which all glyphs have the same width. | |
VBF V3 | This font type can be used to define a font in which the glyphs have different widths. We have upgraded VBF to version 3, which is more efficient under MiniGUI-Processes runtime mode. | |
QPF | QPF is the Qt pre-rendered font which is defined by Qt/Embedded. | |
UPF | UPF is Unicode pre-rendered font which is defined by FMSoft to support Unicode encoded glyphs. | |
TTF | MiniGUI uses FreeType 1 or FreeType 2 to render TrueType fonts. MiniGUI can also render glyph by using sub-pixel anti-alias technology. | The support FreeType 1 was deprecated in MiniGUI 4.0. |
Charsets/Encodings | Comment |
---|---|
ISO8859-1,2,3,4,5,7,9,10,11,12,13,14,15,16 | |
ISO8859-6 | Arabic (BIDI) |
ISO8859-8 | Hebrew (BIDI) |
GB2312 | Basic simplified Chinese characters |
GBK | Simplified Chinese and Traditional Chinese characters |
GB18030-0 | The charset standard defined by China |
BIG5 | Traditional Chinese characters |
Shift-JIS (JISX0201 and JISX0208) | |
EUC Korean (KSC5636 and KSC5601) | |
EUC Japanese (JISX0201 and JISX0208) | |
UNICODE UTF-8/UTF-16LE/UTF-16BE | Three popular encodings of Unicode; APIs conform to Unicode 12.0 since 4.0.0. |
Windowing sub-system is another most important sub-system of MiniGUI. This sub-system provides APIs for applications to create window, control/widget, to update a window, to handle the messages etc.
The windowing sub-system of MiniGUI provides the following general features for applications:
- Mature multi-window mechanism and messaging mechanism.
- Support for dialog box and message box.
- Other GUI elements, including menu, acceleration key, caret, timer, etc.
- Support for non-rectangular windows, such as main window with round corners, irregular window and control.
- Support for transparent controls.
- Double buffered main window. When a MiniGUI main window has double buffer, you can get the rendering result of the main window in your own buffer. By using double buffer technology, you can use an advance 2D graphics interface (mGPlus) or 3D rendering library (OpenGL ES) to get 3D user experience easily.
The controls/widgets provided by MiniGUI are listed in Table 9.
Control/Widget | Comment |
---|---|
Static | |
Button | |
Single-line edit box | |
Multi-line edit box | |
List box | |
Combo box | |
Progress bar | |
Property sheet | |
Tool bar | |
Track bar | |
Scroll bar | Since version 3.0.0. |
Tree view | |
List view | |
Month calendar | |
Grid view | |
Icon view | |
Animation |
Common dialog boxes include Open File Dialog Box, Color Selection Dialog Box, and Font Selection Dialog Box.
MiniGUI provides API for external input method module. You can use MiniGUI’s IME API to implement soft-keyboard, hand-writing, and other input methods.
MiniGUI V3.0 introduces a new technology for users to customize the appearance of MiniGUI windows and controls. You can customize your own MiniGUI appearance by defining a new Look and Feel (LF) renderer and customizing the metrics, color, font, and icon of window elements (caption, border, scrollbar, and so on).
MiniGUI includes four built-in LF renderers, which are illustrated in Table 10.
LF Renderer | Description | Comments |
---|---|---|
FLAT | This renderer can be used to support gray screen. | |
CLASSIC | This renderer gives a look and feel which is similar to Windows 95 appearance. | |
FASHION | This renderer gives a look and feel which is similar to Windows XP appearance. | Implemented by using mGPlus component. |
SKIN | This renderer renders MiniGUI windows/controls by using pre-defined images. |
Users can customize the MiniGUI desktop by user defined icons, and respond events of desktop.
- Support for built-in resources. You can compile the resources (bitmaps, icons, and fonts) into the library, so it is unnecessary to read the resources from files. Thus, MiniGUI can be used on some embedded systems without file systems.
- Providing APIs to calibrate touch screens.
- Special support for embedded systems, including common I/O operations, byte-orders related functions, mouse (or touch-panel) position calibration etc.
- Support for universal virtual frame buffer programs.
- mGUtils is a new MiniGUI component which provides APIs of common dialog boxes, such as ColorSelectionDialogBox, FileOpenDialogBox, and so on. It also contains the implementation of old mywins and virtual console of older MiniGUI versions.
- mGPlus is a new MiniGUI component which provides support for advanced vector graphics functions like path, gradient, and color combination.
- mGEff provides an animation framework for MiniGUI applications. mGEff provides a lot of stable and efficient effectors, which can be used to implement the animations like flipping, zooming, scrolling, and so on.
- mGNCS is the new control set introduced by miniStudio. mGNCS does not only provide more than 30 built-in widgets, but also works as a new framework of MiniGUI apps. We strongly encourage and recommend you use mGNCS as the app framework for your new MiniGUI applications. We also provide the following new extended widget component which is compliant to mGNCS and miniStudio:
- mGNCS4Touch: a MiniGUI component which provide some mGNCS-compliant widgets with animations for smart devices with a touch panel.