diff --git a/RELEASE-NOTES.md b/RELEASE-NOTES.md index 301a2fb2..9255cff7 100644 --- a/RELEASE-NOTES.md +++ b/RELEASE-NOTES.md @@ -1,4 +1,52 @@ -# Release Notes +# Release Notes For MiniGUI Core 4.0.x + +- [Version 4.0.6](#version-406) + + [What's new in version 4.0.6](#whats-new-in-version-406) +- [Version 4.0.5](#version-405) + + [What's new in version 4.0.5](#whats-new-in-version-405) +- [Version 4.0.4](#version-404) + + [What's new in version 4.0.4](#whats-new-in-version-404) +- [Version 4.0.2](#version-402) + + [What's new in version 4.0.2](#whats-new-in-version-402) +- [Version 4.0.1](#version-401) + + [What's new in version 4.0.1](#whats-new-in-version-401) +- [Version 4.0.0](#version-400) + + [What's new in version 4.0.0](#whats-new-in-version-400) + + [New APIs conforming Unicode 12.0](#new-apis-conforming-unicode-120) + + [New APIs for mixed scripts](#new-apis-for-mixed-scripts) + + [Enhanced logical font APIs](#enhanced-logical-font-apis) + + [Support for Linux DRI/DRM](#support-for-linux-dridrm) + + [Extra input messages](#extra-input-messages) + + [Slice allocator](#slice-allocator) + + [Other enhancements](#other-enhancements) + + [Backward compatibility issues](#backward-compatibility-issues) + + [Deprecated features](#deprecated-features) + + +## Version 4.0.6 + +The MiniGUI development team announces the availability of MiniGUI 4.0.6. +We strongly recommend that you use this version for any new MiniGUI +apps, especially if the new features of MiniGUI 4.0 are must for your +new apps. + +Please report any bugs and incompatibilities in + + + +### What's new in version 4.0.6 + +In this version, we mainly fixed some bugs found when developing MiniGUI +5.0.0. + +* BUGFIXING: + - Bad checking cursor width and height in `LoadCursorFromMem`. + - Bad handling of backspace character in SLEdit control. + - Call `ThrowAwayMessages` when failed to create a main window. + - Handle middle mouse button in Standalone and Processes runtime modes. + - Restore `mdev` in INPUT structure. + - Bad checking `pci_accel_driver` in FBCON engine. + - Some conditional compilation errors. ## Version 4.0.5 @@ -11,7 +59,7 @@ Please report any bugs and incompatibilities in -### What's new in this version +### What's new in version 4.0.5 In this version, we mainly fixed some bugs found. @@ -34,7 +82,7 @@ Please report any bugs and incompatibilities in -### What's new in this version +### What's new in version 4.0.4 In this version, we mainly enhanced the DRM engine of MiniGUI in order to integrate MiniGUI with Mesa and Cairo, for example, to implement EGL @@ -62,7 +110,7 @@ Please report any bugs and incompatibilities in -### What's new in this version +### What's new in version 4.0.2 * ENHANCEMENTS: - Support for RTEMS operating system @@ -83,7 +131,7 @@ Please report any bugs and incompatibilities in -### What's new in this version +### What's new in version 4.0.1 This version mainly fixed some minor issues: @@ -102,7 +150,7 @@ Please report any bugs and incompatibilities in -### What's new in this version +### What's new in version 4.0.0 In this version, we mainly enhanced and tuned the APIs related to text rendering in order that MiniGUI can handle complex writing systems @@ -146,7 +194,7 @@ chunk allocation. The following sections will describe these new features in detail. -#### New APIs conforming Unicode 12.0 +### New APIs conforming Unicode 12.0 * New types: 1. `Uchar32`: the Unicode code point value of a Unicode character. @@ -194,7 +242,7 @@ conversion, such as from lower case to upper case, single width to full width. Please see MiniGUI API reference document for the detailed description. -#### New APIs for mixed scripts +### New APIs for mixed scripts To lay out, shape, and render a text in mixed scripts, you should call `GetUCharsUntilParagraphBoundary` function first to convert @@ -260,7 +308,7 @@ in the following respects: basic shaping engine and other is the complex shaping engine based on HarfBuzz. The former can be used for some simple applications. -#### Enhanced logical font APIs +### Enhanced logical font APIs The styles of LOGFONT changed. @@ -353,7 +401,7 @@ the glyph orientation: - 'D': Glyphs are upside-down. - 'L': Glyphs are rotated 90 degrees counter-clockwise (sideways left). -#### Support for Linux DRI/DRM +### Support for Linux DRI/DRM In order to support modern graphics card or GPU, we introduced a new NEWGAL engine of `dri`. The developer can use this engine to @@ -424,7 +472,7 @@ may need the root privilege to call `drmSetMaster` to set the video mode. However, under MiniGUI-Processes run-time mode, only the server (`mginit`) will need this privilege when you use the future `dri` engine. -#### Extra input messages +### Extra input messages In MiniGUI 4.0.0, we introduce the extra input messages to support modern input devices including multiple touch panel, gesture, tablet tool, and @@ -528,7 +576,7 @@ are not implemented: - `tablet_pad` - `switch` -#### Slice allocator +### Slice allocator MiniGUI now provides an efficient way to allocate groups of equal-sized chunks of memory. @@ -550,7 +598,7 @@ We use the slice allocator when laying out the text in complex scripts. Note that this implementation is derived from LGPL'd glib. -#### Other enhancements +### Other enhancements * A new BITMAP type `BMP_TYPE_REPLACEKEY` was added. When `bmType` of a BITMAP object has this bit set, any pixel which is equal to @@ -565,7 +613,7 @@ is re-defined to be 250. * Support for GCC 7. -#### Backward compatibility issues +### Backward compatibility issues In MiniGUI 4.0.0, we changed some unreasonable APIs which were introduced in early versions. There are also other changes broke the backward @@ -619,7 +667,7 @@ if you want to get the height and descent data of one font. The the basic glyph type and break type have been removed from GLYPHINFO structure. You should use `GetACharType` instead. -#### Deprecated features +### Deprecated features Support for FreeType1 was removed. @@ -627,379 +675,6 @@ You should always use FreeType2 to support vector fonts, such as TrueType fonts (TTF), TrueType collections (TTC), OpenType fonts (OTF, both TrueType and CFF variants), OpenType collections (OTC), and Type 1 fonts (PFA and PFB). -## Version 3.2.2 - -The MiniGUI development team announces the availability of MiniGUI 3.2.2. -All users of MiniGUI are recommended strongly to use this version. -Please report any bugs and incompatibilities in - -https://github.com/VincentWei/minigui - -### What's new in this version - -* ENHANCEMENTS: - 1. New API: `SyncUpdateDC`. You can use this function to synchronize - the update rectangles of a surface to screen, if the surface - represents the shadow frame buffer of the screen. - * configure option: `--enable-syncupdate` - * macro: `_MGUSE_SYNC_UPDATE` - 1. New API: `UpdateInvalidClient`. You can use this function to update - the invalid client region of a window instantly. - 1. Use different colors for the output of `_DBG_PRINTF` and `_ERR_PRINTF`. - 1. Add `__mg_save_jpg` function for storing MYBITMAP as JPEG file (10km). - 1. Modified logic for checking JPEG format (10km). - 1. Support BIDI for UNICODE charsets and cleanup the implementation. - * New API: `GetGlyphBIDIType` to get the glyph type in BIDI. - * New DC attribute: BIDI flag. - 1. Add a new key `dpi` for NEWGAL engine to define the DPI of the screen. - If it is absent, use 96 as the default DPI. - 1. Add an item for `GetGDCapability` to return DPI of the DC. - 1. New API `InitSlaveScreenEx` to specify the DPI of slave screen. - Define `InitSlaveScreen` as an inline function calling `InitSlaveScreenEx`. - 1. Enhance commlcd engint to support more pixel type and synchronously update. - 1. New USVFB IAL engine and NEWGAL engine for web display server. - 1. New type: `QDWORD` for a quauter of DWORD. This type is 16-bit long on - 64-bit architecture, and 8-bit long on 32-bit. - 1. New macros for QDWORD: - * `MAKEDWORD`: Make a DWROD from four QDWORDs. - * `FIRST_QDWORD`: get the first (LSB) QDWORD from a DWORD. - * `SECOND_QDWORD`: get the second (LSB) QDWORD from a DWORD. - * `THIRD_QDWORD`: get the third (LSB) QDWORD from a DWORD. - * `FOURTH_QDWORD`: get the fourth (LSB) QDWORD from a DWORD. - 1. New header for CommLCD NEWGAL engine and COMM IAL engine: - ``. - -* BUGFIXING: - 1. handle `PNG_COLOR_TYPE_GRAY_ALPHA` color type of PNG files. - 1. Fix a bug to free a null pointer (ReleaseDC). - 1. No need to make the pitch of FT2 monobitmap is single-byte aligned. - This bug may generate dirty dots for monobitmap glyph from TTF. - 1. Skip null pixels for SUBPIXEL glyphs. This bug will always show background - pixels of one SUBPIXEL glyph. - 1. Fix the bug of wrong bounding box handling for SUBPIXEL rendering of glyph. - 1. Tune cache implementation of FreeType2 font engine. - * Enable cache for rotated LOGFONT. - -## Version 3.2.0 - -The MiniGUI development team announces the availability of MiniGUI 3.2.0. -All users of MiniGUI are recommended strongly to use this version for new -MiniGUI apps. Please report any bugs and incompatibilities in - -https://github.com/VincentWei/minigui - -### What's new in this version - - * Support for 64-bit platform. Note that the definitions of some types - and APIs changed. - * Compliant to the latest GCC, and eliminate all compilation warnings. - -### Type changes - -#### Changes of handle types - -All handle types, including `GHANDLE`, `HWND`, `HDC`, etc., -are now defined as aliases of `PVOID` (`typedef void* PVOID`). -You may need to check your code to reflect this change. - -#### Changes of integer types. - -The type of `DWORD` now has pointer precision. That is, -the size of `DWORD` will be 4 bytes on 32-bit platform, and 8 bytes on -64-bit platform. - -Similarly, `WPARAM` and `LPARAM` now have pointer precision. - -`WORD` and `SWORD` has a half of pointer precision. The size of these -two types is 2 bytes on 32-bit platform, and 4 bytes on 64-bit platform. - -`RGBCOLOR` now is defined as an alias of `DWORD32` (see below). - -Note that the type of `BYTE` always has the size of 8-bit on both -32-bit and 64-bit platforms. - -#### New integer types: - -We introduce `DWORD32` and `SDWORD32` types, -which have the size of 4 bytes on both 32-bit and 64-bit platforms. -You should use these types when reading/writing 32-bit integers from -a binary files for the portability. Of course, you can also use -`Uint32` or `Sint32` types. - -Similarly, we introduce `WORD16` and `SWORD16` types, -which have the size of 2 bytes on both 32-bit and 64-bit platforms. -You should use these types when reading/writing 16-bit integers from -a binary file for the portability. Of course, you can also use -`Uint16` or `SUint16` types. - -`LRESULT` is defined for window callback procedure, and it has -pointer precision. - -`LINT` is a new integer type with pointer precision. - -### API changes - -#### Integer macros - -`MAKEWPARAM`: this new macro makes a WPARAM value by using four bytes. -On the contrary, `FIRSTBYTE`, `SECONDBYTE`, `THIRDBYTE`, and `FOURTH` -macros get the four bytes from a `WPARAM` or a `Uint32` value. - -`MAKEWORD16`: this new macro makes a 16-bit word by using two bytes. -Meanwhile, `MAKEWORD` makes a 16-bit word on 32-bit platform, and a 32-bit -word on 64-bit platform. - -Note that `MAKELONG` macro always makes a `DWORD` integer, which has pointer -precision. Meanwhile, `MAKELONG32` macro makes a `Uint32` integer. - -Note that `MakeRGB` and `MakeRGBA` macros always make `DWORD32` integers. -In contract, `GetRValue`, `GetRValue`, `GetBValue`, `GetAValue` always -get red, green, blue, and alpha components from a `DWORD32` integer -respectively. - -Note that you should use `(-1)` instead of `0xFFFFFFFF` for the invalid -integer or pointer type value for good portability. - -#### Structure and functions - -The main changes in structure and functions: - - * We now use a `UINT` instead of an `int` integer for the message identifier. - - * We now use a `DWORD` integer for the time tick count. Meanwhile, you can - create 64 timers on 64-bit platform. - - * We now use a `LRESULT` integer for the return value of a window callback - procedure. Now it is safe to return a pointer from the callback procedure - on 64-bit platform. This is a very important change, and it will break the - source compatibilty of your code. You should check the source code (use - gcc option `-Wall`) carefully. - - * We now use a `LINT` integer for the identifier of a timer. So you can pass - a pointer as the identifier of the timer on 64-bit platform. mGNCS uses - MiniGUI timer in this manner. - - * We now use a `LINT` integer for the identifier of a control/widget and a - menu item. So you can pass a pointer as the identifier of the timer on - 64-bit platform. mGNCS works in this manner. - -##### Message - -The strcuture `MSG` and all message-related functions changed. -For example, the prototype of `SendMessage` changed from - - int SendMessage (HWND hWnd, int nMsg, WPARAM wParam, LPARAM lParam) - -to - - LRESULT SendMessage (HWND hWnd, UINT nMsg, WPARAM wParam, LPARAM lParam) - -_IMPORTANT NOTE_ - -For best portability, you should use `FIRSTBYTE` to `FOURTHBYTE` macros -to get the bytes of a character when you extract the bytes from `WPARAM` -parameter of a `MSG_CHAR` message: - - MSG_CHAR - unsigned char ch_buff [4]; - unsigned char ch_buff [0] = FIRSTBYTE(wParam); - unsigned char ch_buff [1] = SECONDBYTE(wParam); - unsigned char ch_buff [2] = THIRDBYTE(wParam); - unsigned char ch_buff [3] = FOURTHBYTE(wParam); - -##### Window callback procedure - -Furthermore, the structure and functions to register window class, -create main window, and create dialog box changed. For example, the prototype -of `WNDPROC` changed from - - typedef int (* WNDPROC)(HWND, int, WPARAM, LPARAM) - -to - - typedef LRESULT (* WNDPROC)(HWND, UINT, WPARAM, LPARAM) - -Therefore, the prototype of `DefaultWindowProc` changed from - - int DefaultWindowProc (HWND hWnd, int message, WPARAM wParam, LPARAM lParam) - -to - - LRESULT DefaultWindowProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) - -All main window procedures, control class procedures, and dialog box procedures -defined by your app should change the implementation to reflect the changes -above. - -_IMPORTANT NOTE_ - -Do not cast the result returned by a window procedure to `int` on 64-bit -platform, unless you know what your are doing. - -##### Notification callback procedure - -The type of notification callback changes from: - - typedef void (* NOTIFPROC) (HWND hwnd, int id, int nc, DWORD add_data); - -to - - typedef void (* NOTIFPROC) (HWND hwnd, LINT id, int nc, DWORD add_data); - -_IMPORTANT NOTE_ - -If you use `MSG_COMMAND` message to handle the notification sent from children -controls, you should make sure the identifier is small enough on 64-bit -platform. Because MiniGUI packs the identifier and the notification code -in the `WPARAM` parameter: - - MSG_COMMAND - int id = LOWORD(wParam); - int code = HIWORD(wParam); - HWND hwnd = (HWND)lParam; - -The code above will not work on 64-bit if you use a pointer as the identifier -of the control. - -Therefore, we recommend strongly that you use a `NOTIFYPOROC` callback to -handle the notification sent from controls. To do this, please call -`SetNotificationCallback` function to set the notification callback function. - -##### Time and timer - -The prototype of `GetTickCount` changed from - - unsigned int GetTickCount (void) - -to - - DWORD GetTickCount (void); - -And the prototye of `TIMERPROC` changed from - - typedef BOOL (* TIMERPROC)(HWND, int, DWORD) - -to - - typedef BOOL (* TIMERPROC)(HWND, LINT, DWORD) - -##### Miscellaneous - -In addition, we correct the bad or wrong definitions of some APIs: - - * `DWORD2PIXEL` to `DWORD2Pixel`. The old one has a bad name. - * `GetWindowRendererFromName`: The return type changes from - `const WINDOW_ELEMENT_RENDERER*` to `WINDOW_ELEMENT_RENDERER*`. - So you can overload some methods directly of a renderer. - * `GetDefaultWindowElementRenderer`: The return type changes from - `const WINDOW_ELEMENT_RENDERER*` to `WINDOW_ELEMENT_RENDERER*`. - So you can overload some methods directly of the default renderer. - -### Configuration option changes - -We add some new options for autoconf script (`configure`): - - * `--with-runmode`: Now you can use this option to specify the runtime - mode of MiniGUI. The old enable options for runmode were removed. - Note that MiniGUI-Processes now is the default runmode. - - * `--enable-develmode`: You should use this option to define `_DEBUG` macro, - enable `-Wall -Werror` option, and enable all features of MiniGUI, - if you were a MiniGUI developer. - -## Version 3.0.13 - -The MiniGUI development team announces the availability of MiniGUI 3.0.13. -All users of MiniGUI are encouraged to test this version carefully, and -report any bugs and incompatibilities in - -. - -### What's new in this version - -* Merge new APIs which are introduced by miniStudio. -* The autoconf/automake config scripts are cleaned up. -* Remove most of compilation warnings (not used variables). -* Remove some inline function definitions, especially GetIMEPos/SetIMEPos. -* Fix some bugs. - -### API changes - -* [NEW] CopyCursor: Copies a cursor object. -* [NEW] GetKeyboardState: Gets status of all keys on keyboard. -* [NEW] ToUnicode/ToAscii: Converts the key code between Unicode and ASCII. -* [NEW] GetWindowRegion: The function obtains a copy of the window region of a window. -* [NEW] InvalidateRegion: Invalidates the client area within the specified region. -* [NEW] ValidateRect: Validates the client area within a rectangle by removing the - rectangle from the update region of the specified window. -* [NEW] ValidateRegion: Validates the client area within a region by removing the - region from the current update region of the specified window. -* [NEW] GetUpdateRegion: Copy the update region of a window to a region. -* [NEW] AdjustWindowRectEx: Calculates the required size of the window rectangle - based on the desired size of the client rectangle. -* [NEW] WindowFromPointEx: Retrieves a handle to the window that contains the specified point. -* [NEW] ChildWindowFromPointEx: Retrieves a handle to the child window that contains the - speicified point and meets the certain criteria. -* [NEW] ScrollWindowEx: Scrolls the content of a window's client area. -* [ADJUST] GetIMEPos/SetIMEPos: inline functions -> normal functions. -* [ADJUST] WindowFromPoint: normal function -> inline function. -* [ADJUST] ChildWindowFromPoint: normal function -> inline function. -* [ADJUST] ScrollWindow: normal function -> inline function. - - -## Version 3.0.2 - -The MiniGUI development team announces the availability of MiniGUI 3.0.2. -All users of MiniGUI are encouraged to test this version carefully, and -report any bugs and incompatibilities in - -https://github.com/VincentWei/minigui. - -### What's new in this version - -* Append non-rectangle window support. -* Append support of double buffer of maindow. -* Support for Look and Feel (LF) concept. -* Remove SKIN interfaces of MGExt library, move MGExt library and vcongui into mGUtils component. -* Newly added bitmap font. -* Developing interfaces of desktop for MiniGUI. -* Support direct draw to DC for higher efficiency. -* Enhancement of resource management -* Enhancement of controls: Support of independent scrollbar and transparent control. -* Enhancement of font and character set, support bidi text support. -* Enhancement of zoom of picture - - -### API changes - -* [NEW] ScaleBitmapEx: a bilinear interpolation algorithm which is better than the original. -* [NEW] GetWindowInfo: get New structure WINDOWINFO. -* [NEW] CreateMainWindowEx: enhance of CreeateMainWindow, compatiable with CreeateMainWindow. -* [NEW] CreateWindowEx2:enhance of CreateWindowEx2, compatiable with CreateWindowEx2. -* [NEW] DialogBoxIndirectParamEx: new create dialog. -* [NEW] CreateMainWindowIndirectParamEx:new create dialog. -* [NEW] GetWindowRendererFromName: get LF renderer by name -* [NEW] AddWindowElementRenderer: append a LF renderer to MiniGU -* [NEW] RemoveWindowElementRenderer: delete a LF renderer from MiniG -* [NEW] GetDefaultWindowElementRenderer: get default LF renderer -* [NEW] SetDefaultWindowElementRenderer: set default LF renderer -* [NEW] SetWindowElementRenderer: set a LF renderer for one window’s render -* [NEW] SetWindowElementAttr: set window’s attributes. -* [NEW] GetWindowElementAttr: get window’s attributes value -* [NEW] CreateBMPDevFont: create an bitmap device font. -* [NEW] AddGlyphsToBMPFont: add an bitmap font glyph. -* [NEW] DestroyBMPFont: destroy bitmap device font. -* [NEW] SetCustomDesktopOperationSet: set the custom desktop operation set. -* [NEW] DesktopUpdateAllWindow: refresh all windows on the desktop. -* [NEW] PopupDesktopMenu: pop up a menu on the desktop -* [NEW] GetTextAlign: get the current text-alignment flags of a DC. -* [NEW] SetTextAlign: set text-alignment flags of a DC. -* [NEW] SetWindowMask: set non-rectangle window mask rect. -* [NEW] SetWindowRegion: set non-rectangle window visible region -* [NEW] LockDCEx: support for directly read and write the pixels in a DC. -* [NEW] CreateSecondaryDC: Creates a secondary window DC of a window. -* [NEW] SetSecondaryDC:set a window's secondary DC and the callback for double buffer window. - [HybridOS]: https://github.com/FMSoftCN/hybridos [HybridOS Foundation Class Library]: https://github.com/FMSoftCN/hybridos/tree/dev/device-side/hfcl