Release notes: Embedded Wizard 11.00

IMPORTANT

Please note, there is a newer version 11.00.01 available containing diverse fixes. For more details which problems are fixed in the newer version please see Update version 11.00.01.

Version 11.00 contains the following changes and improvements:

Optimization

With the version 11 we added a second optimization stage to the Chora compiler. This allows better elimination of project members and operations. For example, data members (variables, properties, local variables, method parameter) which are never modified at the runtime of the application can be replaced by their initial value. The affected variables change thereupon to a constant.

Operations involving such immutable variables can thereupon be evaluated at the compilation time. Similarly, conditional statements (if, switch) as well as loops (while, for, do-while) depending on a constant operand are evaluated at the compilation time or even eliminated completely. Similar code sequences in alternative code branches are detected and eliminated. Unreachable code is detected and eliminated, etc..

The new optimization reduced the binary size of the Mosaic in case of the simple 'Hello World' application by the half. Without optimization, the Mosaic occupied ~38 kB. With optimization ~19 kB. Since the optimization eliminates data members, it also reduces the RAM usage of the application.

IMPORTANT

The optimization eliminates all expressions and operands not having effect in Chora code. This is a correct and expected behavior. However, when you combine Chora and native code you should ensure, that Chora variables accessed from a native code block are correctly listed at the beginning of the respective native statement. Otherwise the variables may be eliminated and you will get an error when trying to compile the generated code with a C compiler. For more details see native statement.

TIP

By setting the attribute Generator to the value true you can also suppress the elimination of the affected member (e.g. a method). This can be useful if you intend to access the member from the native code.

Furthermore following optimizations have been added:

The limitation to 64x64 pixel for the glyph cache has been reduced to 32x32 pixel. This allows the very simple applications to save up to 3 KB RAM. The smallest cache with 32x32 pixel occupies 1 kB RAM.

Code Generator adapted to detect and eliminate derived methods containing a simple super(...) or return super(...) invocation of the inherited method. In such case the original inherited method is sufficient.

Graphics Engine and Runtime Environment reworked to allow better scalability for low-level application cases. The diverse features can now be disabled explicitly if not needed. Following are corresponding configuration macros. In order to disable a feature you have to rebuild Graphics Engine and Runtime Environment with the respective macro being defined:

New macro EW_DONT_USE_NATIVE_SURFACES_AS_DESTINATION added. If this macro is defined all pixel driver operation using Native surface as destination are eliminated. This makes sense only for target systems using a separate Screen format for the framebuffer (e.g. RGB888 and RGB565). Otherwise no graphics outputs are possible. In such case compiler error is reported.

New macro EW_DONT_USE_NATIVE_SURFACES added. If this macro is defined all pixel driver operations using Native surface as source are eliminated. This makes sense only if the application uses other surface types (e.g. Index8) to store the relevant images.

New macro EW_DONT_USE_GRADIENTS added. If this macro is defined all pixel driver operations using gradients as well as related functions are eliminated. Trying to use gradients at the runtime reports a runtime error.

New macro EW_DONT_USE_COMPRESSSION added. This macro should be defined if no compressed bitmaps nor compressed strings are used in the project. Doing this eliminates the compression relevant code.

Running Embedded Wizard Studio under WINE Linux

Embedded Wizard Studio 11 is an application developed for Windows 8 - it depends on the Windows own API. We have adapted Embedded Wizard Studio to install and run it directly on Linux by using WINE environment. In such case you don't need to setup any virtual machines nor Windows PCs. For more details please see the section Run Embedded Wizard Studio with WINE on Linux.

IMPORTANT

Please note: we have tested Embedded Wizard Studio 11 on Ubuntu 20.04.1 LTS with WINE 5.22. Nevertheless, due to the large number of Linux distributions, WINE versions and internal issues in WINE we can't guarantee that Embedded Wizard Studio will work as expected in every setup case. If you observe a problem, please report it to us. Alternatively you have always the possibility to install a virtual machine and run Embedded Wizard inside it.

Comprehensive support for Linux-based MPUs

The family of supported platforms has grown significantly: The broad portfolio of NXP microprocessors (MPUs) are well supported by Embedded Wizard, as well as MPUs from STMicroelectronics or the new Raspberry Pi Compute Module 4. Depending on the architecture, the graphics composition is done by OpenGL ES 2.0 or Software Rendering on top of Wayland, DRM or fbdev.

Following Build Environments and Getting Started Articles are now available:

Image

Build Environment

Supported MPUs

Graphics Subsystem

Documentation

IMX6-Software-fbdev

i.MX 6SoloLite

i.MX 6SLL

i.MX 6UltraLite

i.MX 6ULL

i.MX 6ULZ

Software Rendering and fbdev

Getting started with i.MX 6 using Software Rendering and fbdev.

IMX6-OpenGL-fbdev

i.MX 6QuadPlus

i.MX 6DualPlus

i.MX 6Quad

i.MX 6Dual

i.MX 6DualLite

i.MX 6Solo

i.MX 6SoloX

OpenGL and fbdev

Getting started with i.MX 6 using OpenGL and fbdev.

IMX6-OpenGL-Wayland

i.MX 6QuadPlus

i.MX 6DualPlus

i.MX 6Quad

i.MX 6Dual

i.MX 6DualLite

i.MX 6Solo

i.MX 6SoloX

OpenGL and Wayland

Getting started with i.MX 6 using OpenGL and Wayland.

IMX7-Software-fbdev

i.MX 7Solo

i.MX 7Dual

Software Rendering and fbdev

Getting started with i.MX 7 using Software Rendering and fbdev.

IMX7-OpenGL-fbdev

i.MX 7Solo

i.MX 7ULP

OpenGL and fbdev

Getting started with i.MX 7 using OpenGL and fbdev.

IMX7-OpenGL-Wayland

i.MX 7Solo

i.MX 7ULP

OpenGL and Wayland

Getting started with i.MX 6 using OpenGL and Wayland.

IMX8-OpenGL-DRM

i.MX 8

i.MX 8X

i.MX 8M i

i.MX 8M Mini

i.MX 8M Nano

i.MX 8M Plus

OpenGL and DRM

Getting started with i.MX 8 using OpenGL and DRM.

IMX8-OpenGL-Wayland

i.MX 8

i.MX 8X

i.MX 8M i

i.MX 8M Mini

i.MX 8M Nano

i.MX 8M Plus

OpenGL and Wayland

Getting started with i.MX 8 using OpenGL and Wayland.

STM32MP1-OpenGL-DRM

STM32MP151A/C/D/F

STM32MP153A/C/D/F

STM32MP157A/C/D/F

OpenGL and DRM

Getting started with STM32MP1 using OpenGL and DRM.

STM32MP1-OpenGL-Wayland

STM32MP151A/C/D/F

STM32MP153A/C/D/F

STM32MP157A/C/D/F

OpenGL and Wayland

Getting started with STM32MP1 using OpenGL and Wayland.

Raspberry Pi Compute Moduel 4 (RasPi-CM4)

Broadcom BCM2711

OpenGL and DRM

Getting started with Raspberry Pi CM4.

Templates

The Templates window has been enhanced by a new Search... edit field. Now, the user can specify a filter to search within the complete Gallery. The found templates are listed as a single list. The old shortcut navigation has been removed from the Gallery:

The Templates window has been modified to automatically fade-out templates which are not usable in the actual workflow. For example, Bitmap Resources are global entities which can exist within a unit only. Consequently, if you are editing e.g. a GUI component (a class), the Bitmap Resource template is grayed out to signal to you that you can't add it to the class. As soon as you switch to a Composer representing a unit, the template is highlighted again:

The available set of component templates has been enhanced. Following new templates have been added to help you creating your own components:

Icon

Template name

Description

List Box

With this template you can add a list box component to your project. List box is a widget the user can interact with in order to select an option from a list of possible items. To display the available items the list box implements a list and list item components.

Combo Box

With this template you can add a combo box component to your project. Combo box is a widget the user can interact with in order to select an option from a list of possible items. To display the available items the combo box implements a list and list item components.

Alert

With this template you can add an alert component to your project. Alert is a complex widget intended to display a message text with additional push buttons. At the runtime the application presents the alert to the user in order to inform him/her about an event or to ask the user for a confirmation.

Toggle Item

Toggle item is a simple menu item widget the user can press in order to toggle a value. It is also suitable to serve as a 'check box item'. Menu items are used within menus only (see the template Menu). Once you have added the menu item component to a unit, you can embed instances of this item wherever you edit a menu in your GUI project.

Radio Item

Radio item is a simple menu item widget the user can press in order select an option. Menu items are used within menus only (see the template Menu). Once you have added the menu item component to a unit, you can embed instances of this item wherever you edit a menu in your GUI project.

Slider Item

Slider item is a simple menu item widget the user can interact with in order to change a number value by touching and dragging a knob. Menu items are used within menus only (see the template Menu). Once you have added the menu item component to a unit, you can embed instances of this item wherever you edit a menu in your GUI project.

Open Menu Item

Open menu item is a simple menu item widget the user can press in order to enter a sub menu. Menu items are used within menus only (see the template Menu). Once you have added the menu item component to a unit, you can embed instances of this item wherever you edit a menu in your GUI project.

Exit Menu Item

Exit menu item is a simple menu item widget the user can press in order to leave the actual menu and return to the superior menu. Menu items are used within menus only (see the template Menu). Once you have added the menu item component to a unit, you can embed instances of this item wherever you edit a menu in your GUI project.

Bar Chart

Bar chart is a component intended to display bar diagrams.

Line Chart

Line chart is a component intended to display line diagrams.

Pie Chart

Pie chart is a component intended to display diagrams composed of slices.

Graph

Graph (or plotter) is a component intended to collect and display data values as a curve.

Value Display

Value Display is a kind of virtual instrument to show e.g. measured values.

The already existing Menu and Menu Item template have been reworked. Concrete: the automatic alignment of the menu in the center of its owner is removed. The position of the menu can thus be controlled conveniently by the dialog transition. The menu and the items use now the new method GetMinimalSize to calculate the menu layout. Also, the original Menu Item template adapted to display the caption with ellipsis if there is not enough space for the text. The Menus example reworked to be conform with the provided component templates. Also the look&feel of the example has been slightly refreshed.

The Device Interface template from the Gallery folder Device has been reworked to allow the user simple initialization/de-initialization of the interface. The template has been also enhanced by an inline code member where you can put external code fragments, e.g. #include directives needed by the implementation of the Device Interface. See also Implementing a Device Interface.

The Property templates from the Gallery folder Device has been reworked to allow the user simple implementation of the onget method. See also Property.

New template Applet Interface added to the Gallery folder Device. This template helps you to integrate external application (e.g. video player) within Embedded Wizard. See also Integrating an External Application. The Applet example reworked to use the new template and appear a little bit more nicer.

With the introduction of new Chart templates (see above) the old Charts folder removed. Charts Unit removed from the Mosaic documentation. Charts Demo reworked to use the new Charts templates instead of the old Charts widgets.

Improvements in Mosaic

The class Core::Root (the Application component) has been enhanced by new properties ActiveDialogClass and ActiveDialog. These convenience properties allow the user to simply specify and switch the top-level dialog without needing to use the SwitchToDialog() or PresentDialog() methods. Please note, the transitions are performed in this case without any animations. See also Simplified approach to handle top-level dialogs (switching screens).

The class Core::Group (base class for all GUI components) has been enhanced be the methods DrawBackground and DrawForeground. These methods are explicitly intended to draw the areas behind the views existing within a component as well as the areas lying above the views.

The class Core::Group (base class for all GUI components) has been enhanced by the method InvalidateLayout. This allows the component to trigger the UpdateLayout method invocation even if the size of the component has not changed. See also Configuring component layout.

The class Core::Group (base class for all GUI components) has been enhanced by new method GetMinimalSize. This method is should help implementing complex layout systems like menus. The default implementation of this method does nothing. If necessary, the method should be overridden and implemented in derived classes.

The class Core::Time enhanced by new read-only property DaysInMonth. It contains the number of days for the actual month.

The class View::Applet has been enhanced by methods to allow touch event handling.

The class Views::Applet has been enhanced by the method InvalidateArea. The external application may invoke this method to request a screen update without waiting for the next timer expiration and OnUpdate invocation.

The class Views::Applet has been enhanced by new method GetHandle allowing descending classes to simply access the internal handle variable. The value returned by the new method represents thus the corresponding instance of the external application.

The method Views::Applet.OnAdjustSize has been enhanced by the parameter aHandle in order to be conform to other OnXXX methods from the Views::Applet class. The side effect, the parameter aHandle can be null if the external application is not yet created.

The class Graphics::Canvas has been enhanced by the method GetBitmap permitting direct access to the embedded bitmap.

The class Graphics::Path has been enhanced by new method SetNoOfEdges. It provides a convenient way to change the number of edges (straight line segments) the affected sub-path uses actually to store its coordinates. In this manner, the sub-path can be truncated or enhanced by new nodes without needing to re-create the path.

The Effects::Fader class has been enhanced by new property Enabled. This property controls the Enabled state of the animated component. This adaptation was necessary to allow the dialogs to be embedded directly within a superior GUI component. Previously this approach was documented but not worked correctly. The dialogs in the background were hidden but still able to handle user inputs unless the dialog was presented/dismissed for at least one time. All fader classes adapted to use the Enabled property and adapt the component's state accordingly. All transition classes adapted to use the Enabled property.

Adaptation in Mosaic to ensure that computed-only properties do maintain their actual values in memory. In this way the integrated Debugger is able to display the real values stored in the properties. This affects all Visible, Enabled, Embedded and AlphaBlended properties. Also the Width property in the Line view has been modified to store its actual value in the pure memory.

Adaptation of all Mosaic views supporting colors/opacity gradients. The convenience properties Color or Opacity do not store their values in the respective ColorXX or OpacityXX properties anymore. This caused confusing errors if the user has initialized both the common property (e.g. Color) and some specific property (e.g. ColorTL). Now the resulting color values are calculated by multiplying the colors/opacity values found in the common property and the individual property.

Modification of the Core::TaskQueue class to additionally delay the task execution if there are further post-signals pending. This is especially important for the dialog transitions which expect the dialog to finalize its layout/auto-resize operations before the transition starts. Sometimes, depending on the implementation of the layout/auto-resize algorithm, the task started before the dialog was done with its own calculation. This resulted in the dialog being aligned incorrectly.

The class Views::Text has been enhanced by the method GetWidestRow and GetSmallestRow. These are convenience methods to find the row with largest/smaller width. Knowing the row the user can adjust the font height of a multi-line text block so that the largest row is still fully visible.

The classes Effects::SlideTransition and Effects::ScaleTransition enhanced by properties OpacityFadeIn and OpacityFadeOut. These allow the transition to be executed without the opacity animation. See for example: Disable the opacity animation.

Improvements with font handling

New attribute FontConversion added to the profile member. This attribute can assume the value Windows or FreeType. Accordingly the font conversion uses the corresponding font engine producing slightly different outputs.

Font metrics calculation (descent/ascent/leading) in case of HeightMode being set Popular has been adapted to provide similar values as Windows Engine and the WINE do.

The rounding of glyph advance and kerning values adapted to be equal to values calculated when performing the font conversion in WINE do.

New Mosaic class Resources::ExternFont added. This class allows the dynamic creation of fonts at the runtime of the application if the target system uses a TrueType engine. The Text and Attributed Text views adapted to automatically update their appearance if the parameters of the associated extern font object are changed at the runtime. The method AdjustHeight helps to calculate the optimal font size for given text fragment.

Handling the .notdef glyph changed when using an external TrueType engine (e.g. FreeType). Previously the '?' sign was used for all not existing glyphs. Now we use the .notdef glyph if such is available in the font.

Improvement in the location of constants and resources

New macros EW_FONT_DATA_SECTION_NAME and EW_FONT_DATA_PRAGMA added to Graphics Engine. They affect the location of font metrics and kerning data. In this way the affected data can be moved to dedicated areas in flash/ROM.

The access to font metrics and kerning data has been reworked to verify if the requested data is accessible by the CPU. If this is not the case (the data is stored in some external flash) the registered FlashAreaReaderProc is used to read the data from the not accessible memory.

Adding EW_CONST_STRING_SECTION_NAME and EW_CONST_STRING_PRAGMA macros to memory areas containing constant strings. In this way the user can re-allocate the areas to dedicated areas in flash/ROM.

Loading of string constants reworked to verify whether the string is accessible by the CPU. If this is not the case the string is copied (eventually decompressed) into the RAM by using the registered FlashAreaReaderProc. In this way all strings are stored in external flash and only few of the strings used actually in the RAM. Please note, when using compressed strings, the decompression algorithm requires 15 kB RAM.

The storage of CLUT data associated to an Index8 bitmap adapted to use EW_BITMAP_PIXEL_PRAGMA macro. The CLUT data can thus be stored in a non accessible memory area.

All Pixel Driver (except the NEON RGBA8888) have been adapted to allow a redirection of memory accesses when reading contents of direct-access surfaces on a target system not allowing the CPU to address the memory area containing the surface. To use this feature it is necessary to rebuild the Graphics Engine with the macro EW_USE_READER_FOR_CONST_SURFACES being defined. Additionally an external reader function has to be implemented and registered (see EwRegisterFlashAreaReader function).

Diverse improvements and enhancements

The naming of new created Gallery Templates folders has been changed to use consecutive numbers instead of random numbers.

Modifying the behavior of Chora line and block comments. Now directives (e.g. $if) are ignored and no errors are reported if the directives are commented out. Similarly if Chora macros are used within a comment and the macro is not existing no macro replacement takes place and no warning is reported.

The storage class register has been removed from all source code files as it is deprecated in actual C++ compiler versions. For now it's up to the compiler to best allocate the register for variables and function parameters. Compiler warnings or even errors are avoided in this way.

The C macros _Link, _Mark, _VMT, _XObject, _GCT, _Super and _None have been removed from the Runtime Environment. Now the RTE and code generators use the original expressions represented by those macros. Removing the macros was necessary to prevent name conflicts with other libraries e.g. with C++ templates library.

Log window copy operation has been corrected to copy only the items which do fulfill the actually specified filter. Previously the copy operation copied all items regardless of whether these were hidden by the specified filter or not. The modification affects the Debug category of the Log Window only.

Enhancement in the Code Editor Assistant window to list further variants of the Mosaic methods PresentDialog(), DismissDialog() and SwitchToDialog() with all arguments being preinitialized with null and false. This is more convenient for the user.

Support for multi-line expressions improved. Previously the initialization of a constant or variable was restricted to be within a single line. If this was not the case, EmWi reported errors because of a problem with $_ci__ .... For the user it was difficult to understand the cause of the problem.

New configuration macro EW_USE_FILTER_IF_SCREEN_STRETCHED added to the OpenGL ES 2.0 driver. With this macro the automatic usage of the bi-linear filter for copy operations on stretched displays can be suppressed.

Loading of Intrinsic modules modified to automatically search for all depending DLLs also in the directory the Intrinsics module belongs to.

The automatic renaming of members when these are added to a class has been improved. When the user copy/paste a group of members, all references existing between the original members are adapted in the pasted version to use the new names the members received during the paste operation. The manual adaptation of the members after the paste operation can be omitted.

Prototyper window changed to not be top-most anymore. In the practice it was problematic because EmWi own dialogs was hidden behind the Prototyper window. The top-most behavior was added in version 10.00.

Support for Alpha8 tile operation in OpenGL ES 2.0 Driver added.

An error handling added to Mosaic to detect if a GUI component tries to remove itself while editing the component in Composer.

Error handling added to the Mosaic method Core::Outline.EnsureVisible to report errors if the passed view does not belong to the same Group or the view is not 'embedded' within an Outline Box.

The import of MJPEG (motion JPEG) files improved to be less prone to errors in the MJPEG files.

The Search ... edit field used in Inspector and Browser windows has been modified to attract the keyboard focus when the user clicks on the x button. Previously the focus were not attracted so the user had to click twice the edit field.

Replacement for the Microsoft CHM Help compiler

The project documentation extraction has been modified to not depend any more on the Microsoft CHM Help compiler. Starting with version 11.00 Embedded Wizard Studio generates the documentation as HTML files. The Extract Documentation has been reworked to reflect new features. CSS for the generated Doc slightly reworked to use larger fonts and also include more alternative fonts.

Bug-fixes

Displaying of rotated text enhanced by an error message if there is no warp functionality available (the Graphics Engine is compiled with the macro EW_DONT_USE_WARP_FUNCTIONS defined). Previously the text drawing functions caused the warp functions to be permanently included.

Bug-fix for incorrectly calculated height of an Attributed Text view area. Concrete the leading (aka. line gap) resulting from the last text row was added to the entire height. This resulted is slightly different text alignment when comparing the regular Text with the Attributed Text views.

Bug-fix for crashes caused by too many opened Composers. Each Composer occupied 16 MB RAM for a private data structure even if those were not needed.

Fix for a crash caused by an initialization of the Dimension attribute of an Array member with a value other than positive integer.

Correcting CHORAC command line compiler to generate the build report at the end of the code generation.

Bug-fix for a crash if during the initialization of an object the language is switched and the class of the object does not have any ancestors. The error occurred during prototyping.

Fixing memory leaks in Chora compiler.

Bug-fix in Code Editor causing the new, array and var assistants to appear even if the corresponding keyword new, array or var were entered within a comment or string/char literal.

Bug-fix in Core::Time.DayOfWeek property. The property returned in some cases the wrong value 7 while the correct values lie in range 0 .. 6.

Bug-fix for incorrectly cleared icon background within the Inspector window. This was visible when running Embedded Wizard Studio on WINE Linux.

Bug-fix in Memory (RAM) Usage window. The chart animation was incorrect if there were too many updates during a short period of the animation. This caused the chart to 'jump'. Additionally the duration of the animation has been reduced.

Bug-fix in Memory (RAM) Usage window. The chart has been reloaded each time the user clicked on the column header in the list of classes. This caused the chart to 'jump' what was very visible when running Embedded Wizard Studio on WINE Linux.

Bug-fix in Composer to avoid that the Composer content 'jumps' when switching between Composer pages. The effect was very visible when running Embedded Wizard Studio on WINE Linux.

Bug-fix in Code Editor and Inspector windows to ensure that the contents disappear just in the moment when the project is closed.

Bug-fix in Inspector and Browser window to automatically clear the Search ... edit field when the project is closed.

Bug-fix for artifacts with OpenGL ES 2.0 and scaled framebuffer content.

Bug-fix for division by zero caused by Text views with Bounds width = 0 and being configured with WrapText = true.

Bug-fix in the automatic detection of dependencies to units not yet belonging to the project. The detection ignored objects existing inside classes.

Bug-fix in Date Picker component template. Depending on the number of items visible within the Day list and their size, the selection in Day list was incorrect after switching the month.

Bug-fix to prevent dockables and toolbars in Embedded Wizard Studio from being moved or undocked accidentally when the user clicked on an edge of the dockable/toolbar. To move/undock a dockable/toolbar the user can click within the dedicated gripper area the only as it is documented. For example in case of the Log window.

Bug-fix in Text view. In case the view was configured to display ellipsis or to use an associated OnUpdate slot method, the FastReshape state was still active. This prevented the Text view from being notified when it is moved or resized due to its Layout configuration. The displayed text was not updated properly in such case. For example, the ellipsis was not shown.

Adaptation of the Bitmap Frame view to use the tile-operation also for the corners of the frame. This results in the entire frame being drawn using the same tile-operation. Depending on the target system and eventual used frame buffer scaling the tile and copy operation may produce slightly different outputs which could be visible in the bitmap frame.

Bug-fix for a hang-up if during the Load intrinsics module dialog was opened the user closed the Prototyper window. Now the Prototyper window is disabled if a modal dialog or the message box is presented.

Bug-fix for breakpoints being stored directly in EWU files. The error was added in version 10.00 after changing the storage format from ANSI to UTF8.

Internal Intrinsics data structure declarations adapted to use consequently const type modifier as expected by newer version of Visual Studio.

Bug-fix for incorrectly working search-replace in Code Editor. If old text span was replaced by longer span and the longer span ended with the original (old) text, the replace operation was applied on the already replaced text recursively.

Bug-fix in WebGL Code Generator. The invocation of ReInit methods was missed in case of autoobjects.

Bug-fix with components running in Composer. In the version 10.00 we added automatic adjustment of screen size to the bounds area of the actually edited component. This, however, caused the component to trigger the redraw operation before any pending signals were processed. This resulted in distorted layout in the Composer window. The user had to perform the Reload class operation explicitly in order to trigger the recalculation.

Bug-fix for a crash in Embedded Wizard Studio if the actually edited GUI component removes itself from the root-object. This caused the GUI component to be reclaimed by Garbage Collection while the Composer still retained a reference to the (not valid anymore) component.

Bug-fix to prevent the Composer from being able to create instances of classes existing as templates in the Gallery window. In the past it was able to add an object of a component template to a Composer although there was no corresponding class in the project.

Bug-fix for incorrectly working touch events on mobile WebGL browser if the browser content is scrolled.

Known issues

During code generation the names for created files (e.g. *.h and *.c) are derived from the original names of the corresponding project members. While Embedded Wizard is case sensitive, the MS-Windows file systems are not. This may lead to the problem of two different project members being mapped to one and the same file. The resulting code is incomplete. For example, let's assume you have a unit containing two Bitmap resources named Logo and logo. Since Embedded Wizard is case sensitive, it will distinguish the both resources. During code generation, however, both resources are mapped to one and the same file logo.h.

During code generation the names for created files (e.g. *.h and *.c) are derived from the original names of the corresponding project members and the superior unit member. Depending on your project contents, two different unit + project-member combinations can produce one and the same file name. The resulting code is incomplete. For example, the member DeviceClass within the unit Test and the member Class within the unit TestDevice will be mapped to one and the same file name _TestDeviceClass.h.

During code generation the names for created files (e.g. *.h and *.c) are derived from the original names of the corresponding unit members. MS-Windows system, however, has few file names reserved for special system devices. Accordingly, if your project contains a unit with name corresponding to the reserved by MS-Windows, the code generation will fail. Following names should be avoided when naming project members CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, COM0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9, LPT0.

Crash in target when using 64-bit integer data members (e.g. int64 or uint64 variables). 64-bit data members enforce the alignment of the data structures to next 8-byte border. Depending on the surrounding contents, the enforced alignment may lead to padding gaps between embedded objects. The garbage collection, however, expects the objects to be stored packed one behind the other. This can cause a crash. If you observe the issue, following workaround can be applied:

1.In your Build Environment locate the file ewrte.h.

2.Search in the file for the definition of the _obj_XObject data structure. For example:

struct _obj_XObject { struct { const struct _vmt_XObject* VMT; struct _obj_XObject* Mark; struct _obj_XObject* Link; const struct _vmt_XObject* GCT; } _; };

3.Modify the definition of the structure to enforce the alignment for all members to 8 byte. Here an example for the GCC compiler. If you are working with other C compiler, use the adequate syntax:

struct _obj_XObject { struct { const struct _vmt_XObject* VMT; struct _obj_XObject* Mark; struct _obj_XObject* Link; const struct _vmt_XObject* GCT; } _; }__attribute__((aligned(8)));

4.Rebuild your application.

Update version 11.00.01

A new update version 11.00.01 is available. This update contains fixes for following problems:

Exception reported when using the dynamically loaded TTF fonts in the Prototyper window. If an application is using the new Extern Font object simultanously during Prototyping and in the Composer window, Graphics Engine may report an exception in the EwFreeFont() operation. In some cases, no exception is reported. Instead the text rendered by the Extern Font object appears incorrectly as if the font were not configured with the right size.

Incorrectly generated code with nested if-else and for-loop statements. The new optimization implemented in version 11.00 had a side effect resulting in incorrectly generated code if following condition is fulfilled:

1.The true branch of an if statement contains a for (or while) statement.

2.The for (or while) statement itself contains a nested if statement.

3.The superior if statement contains a false branch (else statement).

4.The nested if statement does not contain any false branch (no else statement).

5.There is no other statements involved in the operation, so no compound statement is needed neither in the if nor in the loop statements.

In such case, the else statement belonging to the superior if is associated to the nested if statement. The resulting code may be compiled without errors in the target system. However, it does not work as expected.

Incorrect optimization with if-else statement having similar (but not exactly equal) true and false branches. The new optimization implemented in version 11.00 had a side effect resulting in incorrectly generated code if following condition is fulfilled:

1.There is an if statement.

2.The true and the false branches implement the same code except a type name used in an object runtime cast operator.

3.The optimizer in version 11.00 compares the true and false branches and deduces incorrectly that both are equal.

4.The entire if statement is reduced to its true branch.

In such case, code is eliminated although it plays a role within the implementation. The resulting code may be compiled without errors in the target system. However, it does not work as expected.

During code generation Embedded Wizard 11.00 could crash if all following conditions were fulfilled. The issue is fixed now:

1.There is a class (e.g. a GUI component) configured with MultiLingual attribute equal true.

2.The affected class contains a property initialized with a multi-lingual expression (e.g. with a constant containing several language specific values).

3.The onset method associated to the property contains code other than simple assignment pure Property = value.

4.There is no other assignment to the property used actively within the application.