mirror of
https://github.com/VincentWei/MiniGUI.git
synced 2026-02-07 11:01:57 +08:00
tune README
This commit is contained in:
177
README.md
177
README.md
@@ -7,17 +7,22 @@ A mature and proven cross-platform GUI system for embedded and smart IoT devices
|
||||
|
||||
- [INTRODUCTION](#introduction)
|
||||
- [A BRIEF BUILDING INSTRUCTION](#a-brief-building-instruction)
|
||||
* [Prerequisites](#prerequisites)
|
||||
* [Building MiniGUI Core](#building-minigui-core)
|
||||
* [Building the Comprehensive Demo](#building-the-comprehensive-demo)
|
||||
* [Unit Tests](#unit-tests)
|
||||
+ [Prerequisites](#prerequisites)
|
||||
+ [Building MiniGUI Core](#building-minigui-core)
|
||||
+ [Building whole MiniGUI](#building-whole-minigui)
|
||||
+ [Unit Tests](#unit-tests)
|
||||
- [NEW FEATURES IN VERSION 5.0.x](#new-features-in-version-50x)
|
||||
+ [Compositing schema](#compositing-schema)
|
||||
+ [New main window types](#new-main-window-types)
|
||||
+ [Virtual window](#virtual-window)
|
||||
+ [Other enhancements](#other-enhancements)
|
||||
- [NEW FEATURES IN VERSION 4.0.x](#new-features-in-version-40x)
|
||||
- [NEW FEATURES IN VERSION 3.2.x](#new-features-in-version-32x)
|
||||
- [THE RUNTIME MODES OF MINIGUI](#the-runtime-modes-of-minigui)
|
||||
- [HISTORY](#history)
|
||||
- [AUTHORS AND COPYING](#authors-and-copying)
|
||||
* [Not Free for Commercial Use](#not-free-for-commercial-use)
|
||||
* [Special Statement](#special-statement)
|
||||
+ [Special Statement](#special-statement)
|
||||
+ [Not Free for Commercial Use](#not-free-for-commercial-use)
|
||||
- [A LITTLE FAQ](#a-little-faq)
|
||||
|
||||
|
||||
@@ -25,7 +30,7 @@ A mature and proven cross-platform GUI system for embedded and smart IoT devices
|
||||
|
||||
MiniGUI is a mature cross-platform windowing system and a GUI (Graphics
|
||||
User Interface) support system for embedded systems and smart IoT devices.
|
||||
This is the version 4.0.x of MiniGUI maintained by WEI Yongming.
|
||||
This is the version 5.0.x of MiniGUI maintained by WEI Yongming.
|
||||
|
||||
MiniGUI is released under GPLv3 and the dual-licensing applies to commercial
|
||||
use.
|
||||
@@ -36,10 +41,10 @@ embedded systems or smart IoT devices based-on Linux/uClinux, eCos, and other
|
||||
traditional RTOSes, such as RT-Thread, FreeRTOS, RTEMS, VxWorks, ThreadX,
|
||||
Nucleus, pSOS, uC/OS-II, and OSE.
|
||||
|
||||
This is the MiniGUI core source tree, which provides windowing
|
||||
This is the source tree of MiniGUI Core, which provides windowing
|
||||
and graphics interfaces as well as a lot of standard controls (toolkit).
|
||||
|
||||
Besides MiniGUI core, FMSoft also provides some components
|
||||
Besides MiniGUI Core, FMSoft also provides some components
|
||||
for the developers to develop app much easier:
|
||||
|
||||
* mGUtils: A MiniGUI component which contains miscellaneous utilities
|
||||
@@ -91,7 +96,7 @@ for examples:
|
||||
* mEagle, licensed under GPL 3.0, is an embedded GIS development platform
|
||||
which addresses the needs of map browse, query, analysis, etc
|
||||
|
||||
FMSoft had created the public repositories for MiniGUI core, MiniGUI
|
||||
FMSoft had created the public repositories for MiniGUI Core, MiniGUI
|
||||
components, and other open source apps on GitHub. You can visit them on:
|
||||
|
||||
<https://github.com/VincentWei>
|
||||
@@ -122,7 +127,7 @@ on your Ubuntu Linux.
|
||||
|
||||
### Building MiniGUI Core
|
||||
|
||||
MiniGUI core uses GNU autoconf/automake scripts to configure and build the project.
|
||||
MiniGUI Core uses GNU autoconf/automake scripts to configure and build the project.
|
||||
|
||||
Run
|
||||
|
||||
@@ -135,17 +140,21 @@ to configure, make, and install the headers and the libraries. If there is not
|
||||
|
||||
to generate the script.
|
||||
|
||||
MiniGUI core also provides some configuration options to customize the features.
|
||||
MiniGUI Core also provides some configuration options to customize the features.
|
||||
For more information, please run
|
||||
|
||||
$ ./configure --help
|
||||
|
||||
### Building the Comprehensive Demo
|
||||
### Building whole MiniGUI
|
||||
|
||||
If you are anxious to see the comprehensive demo of MiniGUI core
|
||||
If you are anxious to see the comprehensive demo of MiniGUI Core
|
||||
and MiniGUI components, please fetch one of the following repositories
|
||||
from GitHub and follow the instructions to build the samples and
|
||||
the demonstration programs:
|
||||
from GitHub and follow the instructions to build MiniGUI Core,
|
||||
MiniGUI components, the samples, and the demonstration programs:
|
||||
|
||||
<https://github.com/VincentWei/build-minigui-5.0>
|
||||
|
||||
or
|
||||
|
||||
<https://github.com/VincentWei/build-minigui-4.0>
|
||||
|
||||
@@ -153,7 +162,6 @@ or
|
||||
|
||||
<https://github.com/VincentWei/build-minigui-3.2>
|
||||
|
||||
|
||||
### Unit Tests
|
||||
|
||||
Since MiniGUI 4.0.0, we organize the unit test code of MiniGUI APIs in the
|
||||
@@ -164,7 +172,12 @@ following repository:
|
||||
If you are interested in hacking the MiniGUI code, please visit this repository.
|
||||
|
||||
|
||||
## NEW FEATURES IN VERSION 4.2.x
|
||||
## NEW FEATURES IN VERSION 5.0.x
|
||||
|
||||
In version 5.0.0, we introduced some new and exciting features, and refactored
|
||||
a lot basic modules of MiniGUI Core.
|
||||
|
||||
### Compositing schema
|
||||
|
||||
In this version, we enhanced the MiniGUI-Processes runtime mode to support
|
||||
the compositing schema. Under compositing schema, regardless a main window
|
||||
@@ -177,12 +190,7 @@ On the contrary, the legacy schema of MiniGUI-Processes uses the same
|
||||
frame buffer for all processes (and all main windows) in the system.
|
||||
So the legacy schema is also called the shared frame buffer schema.
|
||||
|
||||
MiniGUI Core implements the default compositor. But you can implement
|
||||
your own compositor by writing your own server, i.e., `mginit`. You
|
||||
can also implement your own compositor in a shared library which
|
||||
can be loaded by MiniGUI Core dynamically.
|
||||
|
||||
By enabling the compositing schema, MiniGUI now provides a better
|
||||
By enabling the compositing schema, MiniGUI now can provide a better
|
||||
implementation for multi-process environment:
|
||||
|
||||
- Easy to implement advanced user interfaces with rounded corners,
|
||||
@@ -191,37 +199,94 @@ implementation for multi-process environment:
|
||||
- Better security. One client created by different user cannot
|
||||
read/write contents in/to another windows owned by other clients.
|
||||
|
||||
The major flaws of the compositing schema are as follow:
|
||||
|
||||
- It needs larger memory than the legacy schema to show multiple
|
||||
windows at the same time. Therefore, we may need a client manager
|
||||
to kill a client which runs in background and in full screen mode
|
||||
if you are running MiniGUI on an embedded system, like Android
|
||||
or iOS does.
|
||||
- It needs a hardware-accelerated NEWGAL engine to get a smooth
|
||||
user experience.
|
||||
|
||||
Usage:
|
||||
|
||||
- Use `--enable-compositing` to enable the compositing
|
||||
schema when you configure the runtime mode of MiniGUI as
|
||||
MiniGUI-Processes (`--with-runmode=procs`).
|
||||
Use `--disable-compositing` to enable
|
||||
the legacy schema (the shared frame buffer schema).
|
||||
### New main window types
|
||||
|
||||
In this version, we also enhanced the window manager of MiniGUI Core
|
||||
to support some special main window types:
|
||||
to support some special main window types.
|
||||
|
||||
- Screen Lock. Use `WS_EX_WINTYPE_SCREENLOCK` extended window style
|
||||
to create a screen lock. The main window acts as a screen lock will
|
||||
have the highest z-order index in the system.
|
||||
- Docker. Use `WS_EX_WINTYPE_DOCKER` extended window style
|
||||
to create a docker. The main window acts as a docker will
|
||||
have the z-order index lower than the screen lock in the system.
|
||||
- Launcher. Use `WS_EX_WINTYPE_LAUNCHER` extended window style
|
||||
to create a docker. The main window acts as a docker will
|
||||
have the z-order index higher than the desktop in the system.
|
||||
Before 5.0.0, you can create a topmost main window with the style
|
||||
`WS_EX_TOPMOST` in order to show the main window above all normal main windows,
|
||||
and if you use MiniGUI-Processes runtime mode, the server (`mginit`) will
|
||||
always create global main windows, which are shown on other main windows
|
||||
created by clients.
|
||||
|
||||
Since 5.0.0, we introduce a concept of z-order levels for main windows.
|
||||
There are eight levels in MiniGUI from top to bottom:
|
||||
|
||||
- The tooltip level (`WS_EX_WINTYPE_TOOLTIP`).
|
||||
- The system/global level (`WS_EX_WINTYPE_GLOBAL`).
|
||||
- The screen lock level (`WS_EX_WINTYPE_SCREENLOCK`).
|
||||
- The docker level (`WS_EX_WINTYPE_DOCKER`).
|
||||
- The higher level (`WS_EX_WINTYPE_HIGHER`).
|
||||
- The normal level (`WS_EX_WINTYPE_NORMAL`).
|
||||
- The launcher level (`WS_EX_WINTYPE_LAUNCHER`).
|
||||
- The desktop or wallpaper.
|
||||
|
||||
This enhancement allows us to create a special app which acts as
|
||||
screen lock, docker, or launcher.
|
||||
|
||||
### Virtual window
|
||||
|
||||
You know that we can post or send a message to other windows which
|
||||
may run in another thread under MiniGUI-Threads. The MiniGUI
|
||||
messaging functions such as `PostMessage()`, `SendMessage()`,
|
||||
`SendNotifyMessage()`, and the window callback procedure
|
||||
provide a flexible, efficient, safe, and flexible data transfer
|
||||
and synchronization mechanism for your multithreaded applications.
|
||||
|
||||
For example, you can send or post a message to a window from a
|
||||
general purpose thread which may download a file from a remote
|
||||
server under MiniGUI-Threads.
|
||||
|
||||
But can we use the MiniGUI messaging mechanism under
|
||||
MiniGUI-Processes and MiniGUI-Standalone runtime modes for
|
||||
multithreading purpose? For example, we may download a file in a
|
||||
general thread and inform a window when the file is ready.
|
||||
|
||||
Furthermore, if we want to use the MiniGUI messaging mechanism in
|
||||
a general thread to handle messages from other threads, how to do this?
|
||||
|
||||
The virtual window provides a solution for the requirements above.
|
||||
A virtual window is a special window object which does not have
|
||||
a visible window area. But after you create a virtual window in
|
||||
a different thread, you can use the MiniGUI messaging mechanism
|
||||
to post or send messages between the current main window thread
|
||||
and the new thread.
|
||||
|
||||
This enhancement provides a very useful facility to you in order to
|
||||
develop a well-designed multithreaded application.
|
||||
|
||||
### Other enhancements
|
||||
|
||||
We also tune or enhance the following modules of MiniGUI Core:
|
||||
|
||||
- Enhanced timer support. MiniGUI now manages the timers per message thread.
|
||||
Under MiniGUI-Threads runtime mode, you can set up 32 (64 on 64-bit
|
||||
architecture) timers for each GUI threads. If you enabled virtual window,
|
||||
you can also do this for each message thread.
|
||||
- Support for listening a file descriptor as long as the underlying system
|
||||
has the `select()` system call for all runtime modes. Now you can call
|
||||
`RegisterListenFD()` to register a file descriptor to be listened, and
|
||||
handle `MSG_FDEVENT` in your window callback procedure to read/write
|
||||
from/to the file descriptor. Before this version, this feature only
|
||||
available for MiniGUI-Processes runtime mode.
|
||||
- Support for local data of windows. You can now set or retrieve a local data
|
||||
which is bound with a string name for a window. This will give you an
|
||||
easy-to-use interface to manage various data of a window.
|
||||
- Support for hardware cursors under compositing schema. MiniGUI now can
|
||||
utilize the hardware cursors if your graphics device support it.
|
||||
You can also load a cursor from a PNG file.
|
||||
- Support for loading icon from a bitmap file. You can now load an icon
|
||||
from a bitmap file such as a PNG file.
|
||||
- Unified the message hook functions for all runtime modes. MiniGUI now
|
||||
provides the consistent message hook functions for all runtime modes.
|
||||
- Use the update regions for cumulative updating the screen. This will
|
||||
eliminate the flickers due to the frequently redrawing of controls.
|
||||
|
||||
Obviously, this version brings the largest improvement since MiniGUI 3.0.0.
|
||||
We did our best to ensure backward compatibility of the existed APIs
|
||||
so that the old applications can smoothly migrate to the new
|
||||
version. However, there are still some slight changes you need to take care.
|
||||
For more information, please refer to `RELEASE-NOTES.md` file:
|
||||
|
||||
<https://github.com/VincentWei/minigui/blob/master/RELEASE-NOTES.md>
|
||||
@@ -255,7 +320,7 @@ in order to support [HybridOS Foundation Class Library].
|
||||
|
||||
For more information, please refer to `RELEASE-NOTES.md` file:
|
||||
|
||||
<https://github.com/VincentWei/minigui/blob/master/RELEASE-NOTES.md>
|
||||
<https://github.com/VincentWei/minigui/blob/tree/rel-4-0/RELEASE-NOTES.md>
|
||||
|
||||
Because of the changes of some APIs, we recommended strongly that you
|
||||
use this version for new projects.
|
||||
@@ -352,7 +417,10 @@ other main features.
|
||||
In the development of version 4.0.x, we introduced the support for
|
||||
complex writing systems (scripts), such as Arabic, Thai, and Indic.
|
||||
|
||||
A brief history description of the development progress lay below:
|
||||
In the development of version 5.0.x, we introduced some new and
|
||||
exciting features such as compositing schema and virtual window.
|
||||
|
||||
A brief history description of the development progress is listed as follow:
|
||||
|
||||
1. 1994 ~ 1996: MiniGUI DOS version.
|
||||
1. Dec, 1998: Began to write.
|
||||
@@ -415,6 +483,7 @@ A brief history description of the development progress lay below:
|
||||
1. Feb., 2018: FMSoft released MiniGUI version 3.2.0.
|
||||
1. Apr., 2019: FMSoft released MiniGUI version 3.2.2.
|
||||
1. Jul., 2019: FMSoft released MiniGUI version 4.0.0.
|
||||
1. Apr., 2020: FMSoft released MiniGUI version 5.0.0.
|
||||
|
||||
## AUTHORS AND COPYING
|
||||
|
||||
@@ -422,7 +491,7 @@ The original author of MiniGUI is WEI Yongming, and now MiniGUI is
|
||||
maintained by FMSoft. For more information, please refer to
|
||||
<http://www.fmsoft.cn>.
|
||||
|
||||
Copyright (C) 2002 ~ 2019, Beijing FMSoft Technologies Co., Ltd.
|
||||
Copyright (C) 2002 ~ 2020, Beijing FMSoft Technologies Co., Ltd.
|
||||
Copyright (C) 1998 ~ 2002, WEI Yongming
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
|
||||
@@ -62,7 +62,7 @@ exciting features for MiniGUI:
|
||||
- Unified the message hook functions for all runtime modes. MiniGUI now
|
||||
provides the consistent message hook functions for all runtime modes.
|
||||
- Use the update regions for cumulative updating the screen. This will
|
||||
emilinate the flickers due to the frequently redrawning of controls.
|
||||
eliminate the flickers due to the frequently redrawing of controls.
|
||||
* ADJUSTMENTS:
|
||||
- `g_rcScr` now is defined a macro calling function `GetScreenRect()`.
|
||||
- `mgIsServer` now is define a macro calling function `IsServer()`.
|
||||
|
||||
Reference in New Issue
Block a user