Release notes: Embedded Wizard 9.20

Version 9.20 contains the following changes and improvements:

Support of new Bitmap Resource formats RGB565 and Index8

The Graphics Engine supports now the new bitmap format RGB565 besides the already existing Index8, Alpha8 and Native format (See also) All drawing operations involving a bitmap as source have been adapted to support the new format. Since RGB565 does not contain any opacity information, bitmaps stored in this format are intended primarily to display opaque background contents.

The Graphics Engine has been enhanced to allow the new bitmap format RGB565 as well as the already existing format Index8 (a bitmap with an associated color palette) to be used for Bitmap Resources. Now, the format of every Bitmap Resource can be configured individually by the new attribute Format. The old attribute AlphaName is not available anymore. The image file is specified in the attribute FileName and the desired format in the attribute Format.

Compared with the Native format RGBA8888, Bitmap resources stored in the new format RGB565 and Index8 help to reduce up to 50% respective 75% of memory.

Additionally the Bitmap Resource has been enhanced by the new attribute Dithering. This gives the user more control how the color conversion does affect the respective Bitmap Resource. Especially when the Bitmap Resource is configured with the format Index8 activating the dithering produces good looking results.

In order to allow the new Bitmap Resource format RGB565 being configured properly, new attribute ColorChannelsOrderOfRGB565 has been added to Profile member.

Support of Platform Package color formats reworked

With the version 9.20 we stopped to maintain the Native color formats RGB565A8, RGB555A8 and YUVA8888. These had no practical usage in the past.

Accordingly the Embedded Wizard Setup does not install anymore the Platform Package Tara.Win32.RGB565A8. Instead two new Platform Packages Tara.Win32.LumA44 and Tara.Win32.RGB565 are installed. This allows you to generate code for Microsoft Windows using the frame buffer color formats LumA44 and RGB565.

Code size optimization

Graphics Engine and Runtime Environment have been optimized regarding their code size. In particular:

Instead of error messages only a code is displayed. The corresponding error description is found in Error Codes.

Following three macros have been added. Rebuilding the Graphics Engine with such defined macro will result in the corresponding functions being excluded from the code. Trying to use the functionality will report a warning on the console:

- EW_DONT_USE_WARP_FUNCTIONS

- EW_DONT_USE_INDEX8_SURFACES

- EW_DONT_USE_RGB565_SURFACES

Garbage Collection algorithm has been redesigned to avoid recursions and to be more performant.

Due to the new implementation of the Garbage Collection less code is generated for every class.

Dependencies to extern C-Lib functions printf() and sprintf() have been resolved by providing our own implementation of them. Accordingly, the function EwPrint implemented originally in the RTE extern module ewextrte.c is found now in the RTE itself.

IMPORTANT

In order to allow console outputs a new function EwConsoleOutput( const char* aMessage ) has been added to all extern RTE ewextrte.c modules. The function has the job to print the message on the console. Unlike the old version EwPrint no formatting, etc. is needed. You should take this in account if you have adapted the module ewextrte.c.

New 'Quick Tour' tutorial

The Quick Tour tutorial article and a corresponding 'Quick Tour' project have been created. These are intended for the beginners to help them to learn the workflow with Embedded Wizard.

New 'Welcome' screen

For your convenience Embedded Wizard Studio presents now a 'Welcome' screen every time you start the Studio. From the screen you can access the recently used projects and navigate to our knowledge base.

Improvements

The function EwPrintProfilerStatistic has been enhanced to display the size of the Chora objects. This is useful if you are looking for an object occupying the most RAM.

Examples

A new sample Bézier Clock has been added. This sample implements a fancy digital clock and timer application with animated digits. The application uses the Embedded Wizard vector graphics to render dynamically the different digits for clock and timer. The change from one digit to another is handled by moving the vector points to get a smooth transition animation.

Bug-fixes

Bug fix for not working property references if the property was declared with the type handle.

Bug fix for incorrect contents of variables declared with a set data type if there was no explicit initialization expression for the variable.

Bug fix for incorrect contents of variables declared with a char data type if there was no explicit initialization expression for the variable.

Bug fix for incorrectly working kerning if during the text drawing the text row is split in several parts and the glyphs lying at the split position have kerning.

Bug fix for a very particular error caused during text output if the glyph cache overflows and the actual issue buffer is almost full so that closing the issue causes the issue buffer being flushed immediately. Thereupon the following operation to display the glyph is ignored. The glyph is not displayed. The condition is very seldom.

Bug fix with switch statement evaluating an indirection to a property declared with ^uint16 as data type. This caused an integer promotion to be applied on the indirection so that it is interpreted as ^int32. Consequently the value resulting from the operation was incorrect.

The following three bugs were fixed with the version 9.10. However, due to an error in the setup system the fixes have not been taken in account when creating the setup 9.10. They are thus officially part of the setup 9.20:

WebGL: Bug-fix in WebGL obfuscation of Inline Code Members.

WebGL: Bug-fix for type conversions from enum to integer and type conversions from set to integer in case that the expression (the operand) in the cast operand was already constant.

WebGL: Minor adaption of WebGL Platform Package to allow the user to call the _RequestUpdate() function. Usually all updates are scheduled automatically during the runtime of the application. However, if the user implements extern code to e.g. receive data via WebSocket and then invokes a Chora method from the 'outside' of the GUI application, no update is performed after the method is finished. Therefore, the user has to execute following code in order to trigger the update: EmWiApp._RequestUpdate();