Kanzi 3.9.0 release notes¶
New features¶
Activity system¶
Finalized the functionality of the Activity system.
Use the Activity system to define the structure of the UI of your application and implement UI navigation. The Activity and Activity Host nodes in the Activity system use virtualization, which enables you to manage the memory consumption in your application. When you build your Kanzi application with the Activity system, only the content of the Activities that you activate is loaded and is visible.
To learn how to use the Activity system:
Complete the Activity system tutorials. See UI structure.
Learn about the details of the Activity system. See Activities.
Kanzi Android framework (droidfw) and Java API¶
Introduced the Kanzi Android framework (droidfw) and Java API.
Kanzi Android framework (droidfw) is a framework dedicated for developing Kanzi applications for Android. It exposes the Kanzi Java API, which allows you to write application and plugin code entirely in Java or Kotlin. You do not need to write any C++ or JNI code, but you can still use native Kanzi plugins. Kanzi Android framework (droidfw) provides strong integration with the Android UI, including support for multiple simultaneous Kanzi-based Views and flexible composition of Kanzi and Android UI elements. Kanzi Android framework (droidfw) integrates with the Android Choreographer which runs the Kanzi main loop tasks in the Android UI thread. This enables you to use the Kanzi Java API from your application code without the need for dispatcher mechanisms.
This version of the Kanzi Java API partially exposes these subsystems:
Action
Condition
Data
Message
Metadata
Node
Node Component
Plugin
Prefab
Property
Resource
Trigger
See Developing with the Kanzi Android framework (droidfw) and Using Java and Kotlin.
Main loop scheduler¶
The MainLoopScheduler
subsystem is responsible for the application main loop control flow, with support for extension through Stages and Tasks.
Linear color workflow¶
Linear color workflow enables more accurate light calculations, which results in higher-quality images. Additionally, the introduction of linear color workflow simplifies the workflow with images that store data in different color spaces, such as SRGB and UNORM.
These images show an example of blending in nonlinear gamma (left) and linear (right) color space.
See Color workflow.
Effects¶
Introduced these post-processing effects for 2D nodes:
Use the Blur Effect 2D effect to apply a Gaussian blur to a 2D node.
Use the Mask Effect 2D effect to apply a mask to a 2D node.
Use the Shadow Effect 2D effect to apply a shadow to the content of a 2D node.
See Effects for 2D nodes.
glTF 2.0 support¶
You can now import to your Kanzi Studio project all data from glTF 2.0 models, such as nodes, meshes, cameras, skins, animations, morph targets, lights, textures, physically-based materials, and so on.
See Importing 3D assets and Physically-based material properties.
Data Trigger functionality¶
Use a Data Trigger to apply an Action to either set a property value of a target node or activate an Activity. A Data Trigger keeps that Action applied for as long as the condition in that Data Trigger is met. When the condition in that Data Trigger is no longer met, Kanzi reverts the changes that it applied using that Data Trigger.
Text Box nodes¶
Use the Text Box nodes to add single-line text input to your application.
Content Layout nodes¶
Use the Content Layout nodes to present content in a UI control as a single item.
For example, use a Content Layout node to create the layout for a list item or a button with a border, a background, an icon, and a label.
New render passes¶
Introduced these render passes:
Use the Gather Lights Render Pass to collect Light nodes for lighting 3D nodes in a scene. See Using lights in rendering.
Use the Node List Render Pass to filter and hold a list of nodes that you want to render using other render passes. See Collecting nodes for rendering.
Ranges¶
Introduced the range property type. You can use ranges to:
Store collections of values that you access using bindings. See Using bindings to split text into parts and Controlling light uniforms.
Collect and filter nodes for rendering. See Collecting nodes for rendering and Using lights in rendering.
Material type bindings¶
Bindings in material types enable you to:
Modify the values of shader uniforms without editing shader code. See Uniform bindings.
Store the results of bindings into temporary variables to which you can refer in other bindings. See Temporary variable bindings.
Feature improvements¶
Activity system¶
Introduced the Data-Driven Exclusive Activity Host node. Use a Data-Driven Exclusive Activity Host node to create Activity nodes using a data source. For example, you can define the content of menus in a data source and use a Data-Driven Exclusive Activity Host node to create the menus in your application.
See Data-Driven Exclusive Activity Host and Tutorial: Generate UI from a data source.
Improved the workflow in the Activity Browser window. In Kanzi Studio the Activity Browser shows all the possible UI states of an application, including Kanzi Studio solutions that include multiple projects.
Use the Activity Browser to create, inspect, and interact with the UI states in your application. See Activities.
Introduced the Kanzi UI automation plugin. It enables the Kanzi Studio Preview to show the runtime state of Activity nodes, provides runtime access to Kanzi UI elements, and enables test automation. This plugin works on top of Kanzi Engine.
The Activity and Activity Host nodes now inherit from the
ContentLayout
class to lay out their content like a Content Layout node. See Using the Content Layout nodes.Redesigned the workflow and relationship between Activity Hosts and their Activities:
An Activity is now a prefab and not a node under an Activity Host that loads a prefab. As a result, you set in the Activity itself the State Manager that defines the transition animations and registration of Activities is no longer necessary.
An Activity Host is now responsible for loading the resources used by its Activities, instead of an Activity itself.
An Activity is alive only when it is active and during the animations to and from the active state.
An Activity Host is aware of all its Activities during its entire lifetime.
All properties that are required to make the decision about the activation of an Activity are now in the Activity Host of that Activity.
If your application uses Activity or Activity Host nodes, the only way to migrate your application from Kanzi 3.8.0 to 3.9.0 is to recreate the Activity structure of your application. See Activity system.
Activity and focus improvements:
The focus scope type of Activities and Activity Hosts is now by default Focus Group. See Focus.
Introduced the Focus Scope > Save Last Focused Node property that saves the last-focused node in an Activity, Exclusive Activity Host, and Parallel Activity Host. It enables Kanzi to save and restore the focus in focus scopes in Activities and Activity Hosts.
Activity Browser is now a built-in Kanzi Studio plugin.
Now when you add Code Behind to a project, Kanzi Studio adds Kanzi Engine plugin DLLs for all available Preview configurations, instead of adding only the DLL for the currently active Preview configuration.
You can now use the Code Behind functionality on all platforms that Kanzi supports. See Programming Activities with Code Behind.
List Box nodes¶
Introduced triggers that you can use to find out when the user starts or stops scrolling a List Box node. See List Box triggers.
You can now use a List Box Item Container prefab to enable the double-click gesture for List Box items. See Enabling the double-click gesture for List Box items.
You can now access the number and position of items in a List Box node. See Accessing the number and position of items.
Scrolling¶
Improved the Actions that you can use to scroll Scroll View and Grid List Box nodes in a specific direction or position. Each direction and position now has a dedicated Action. See Scroll View actions.
You can now use the Scroll Position property to set the position of Scroll View and List Box nodes. See Scrolling a Grid List Box node with a slider.
Toggle Button Group nodes¶
Kanzi Studio now by default assigns an index to each Toggle Button in a Toggle Button Group. See Creating a toggle button group.
The Toggle Button Group: Toggled trigger now by default intercepts messages from all Toggle Button nodes in a Toggle Button Group. See Reacting when any Toggle Button in a Toggle Button Group is toggled.
You can now use the Current Button Index property to select a Toggle Button in a Toggle Button Group. See Activating Activities with a Toggle Button Group.
Input and focus handling¶
Improved the way to control how nodes react to input:
You can now use the Input > Enabled property to control whether the Button, List Box, Scroll View, Slider, and Text Box nodes react to input.
Introduced the Input > Effectively Enabled property that you can use in a state manager or a binding to observe whether a node is effectively enabled.
Improved the input method status exchange and input method action handling. See
TextBoxConcept
,TextInputManipulator
,InputMethod
, andInputMethodListener
.Focus management improvements:
You can now manually set the order of nodes in a focus chain with the Focus Order property. See Moving focus in the focus chain.
You can now move focus from the last to the first node in a focus scope with the Cyclic Focus Navigation property. See Moving the focus within a group of nodes.
Published the
FocusScope
API, which enables you to traverse the nodes in a focus scope using either:FocusScopeVisitor
for unordered UI scene traversalFocusScope::FocusChain
for ordered iterated traversal
You can now define for your Kanzi application key conversions from LogicalKey-KeyModifier pair to LogicalKey. For example, Kanzi by default converts the Shift Tab keys to the BackTab key. See
KeyMap
.Introduced to keyboard input handling:
KeyMapEventFilter
. Use theKeyMapEventFilter
together with event sources to translate key input in Kanzi.KeyRepeatGenerator
. Use theKeyRepeatGenerator
to generate repeat key presses together with event sources that cannot provide repeat key presses to a Kanzi application.
Kanzi Studio usability improvements¶
Redesigned the Welcome and Quick Start windows and combined them into a single window.
Added a project template that includes the shaders for physically-based rendering. See Physically-based shaders.
Added icons for the Triggers and Actions items to make them visually distinct and to make it easier to find the one that you need.
You can now control how the Preview handles keyboard input when the Preview has focus and is in the Interact mode. See Controlling keyboard input in the Preview.
In the Properties and in the Preview tab Kanzi Studio now shows the effective size of the Screen node.
Before you update a Kanzi Engine plugin, you can now compare the differences between the Kanzi Engine plugin that you currently use and another version of that plugin. See Checking a Kanzi Engine plugin for changes.
You can now open a Kanzi Studio project in Windows Explorer from the context menu of a project tab. To learn more about working with multiple projects in Kanzi Studio, see Combining Kanzi Studio projects into a Kanzi application and Tutorial: Combine Kanzi Studio projects into a single Kanzi application.
Refreshed and improved the Factory Content that you can use in Kanzi Studio to create prototype projects faster. See Factory Content assets.
Asset Packages are now part of the default Kanzi Studio workspace layout. You can find the Asset Packages window next to the Assets and the State Tools windows at the bottom of the interface.
In the asset packages that you create, you can now set for each asset a custom thumbnail image that the Kanzi Studio Asset Packages window shows. See Creating an asset package.
Introduced the Compose and Blit Pass render pass template. Use this template to blit a Composition Target Render Pass using a specific material. See Rendering content to composition targets.
You can now reuse shader code. For example, you can include in a shader helper functions that you use in several shaders. See Reusing shader code.
When you create a material Kanzi Studio now automatically adds the Blend Mode property to the material.
The Kanzi material types FragmentPhongSkinned, FragmentPhongTexturedSkinned, VertexPhongSkinned, and VertexPhongTexturedSkinned now by default support skinning of meshes with up to 100 bones. See Setting the number of bones for a skinned mesh.
Other improvements¶
In the On Property Change trigger (
OnPropertyChangedTrigger
) added a boolean propertyIgnoreIdenticalValue
. When enabled, that trigger Kanzi invokes that trigger only when the value of the property whose value the trigger observes changes. Disabled by default.Messages sent by all types Animation Player components now contain the name of the Animation Player that sent that message.
When you use the
file://
protocol to load a resource, you can now load that resource asynchronously using theacquireResourcesAsync
method.Improved the
ForwardingAction
class:Introduced
getArgument
that enables you to retrieve the value of an argument of given property type from the forwarded message of the associated trigger.Introduced
applyResourceBindings
that applies all resource bindings to their respective target items.
To migrate your Kanzi application from an earlier version, see ForwardingAction class.
Improved the accuracy of the frame-rate limiter. If your device uses vsync, it is still recommended to disable the frame-rate limiter.
Added the Mirror and Mirror once texture addressing modes and changed the default value of the Addressing Mode property to Repeat. See Rendering content to composition targets.
You can now use the Kanzi Studio plugin API to set the Start Time for state transitions.
The Cubemap Render Pass now provides a depth cubemap.
Kanzi now supports the frame done callback on Wayland.
You can now set a Composition Target Render Pass to render to multiple composition targets. See Rendering content to multiple composition targets.
Optimized the default shaders to use more appropriate data size for bone information.
When you launch the Kanzi Command Prompt from the Windows Start menu, you can now see the Kanzi version for which that Kanzi Command Prompt sets the environment variables.
Main loop timer functionality:
The
Timer
functionality is now part of theMainLoopScheduler
subsystem and it replaces the removedTimer
subsystem.You can now add timer tasks to the Kanzi main loop stage sequence to have Kanzi execute tasks at regular intervals before or after a stage that you set.
See Timer functionality and Adding timers.
The caching system for 2D nodes now supports automatic cache refresh and invalidation. See Caching 2D nodes.
In binding expressions you can now cast to color and vector values. See Type casting.
You can now configure the graphics context API also in the
application.cfg
. See Graphics library.
Changes¶
Kanzi no longer supports Visual Studio 2015. See Installing Kanzi.
Visual Studio solutions for the Kanzi templates, tutorials, and examples are no longer part of the Kanzi framework SDK. You can use the provided CMake and bat scripts to build Visual Studio solutions. See Developing the application logic in Visual Studio.
The Kanzi Windows platform now uses 64-bit architecture:
The win64 platform Kanzi Engine and third-party libraries replace the win32 versions.
Kanzi Studio Preview now uses the win64 platform.
To migrate your Kanzi application from an earlier version, see 64-bit Kanzi Studio Preview.
Removed the JavaScript scripting functionality from Kanzi. As a result, JavaScript V8 engine and Execute Script Action are no longer available in Kanzi.
To migrate your Kanzi application from an earlier version, see Removal of JavaScript functionality.
Removed the deprecated Play Animation action. Use the Animation Player instead. See Using keyframe animations and Creating animations and timelines using the Kanzi Engine API.
Changes in Kanzi Studio Android deployment:
When you deploy your application to an Android device from Kanzi Studio, Kanzi Studio no longer adapts the orientation of the Android Activities in the manifest of your Android application based on the orientation of the Screen node in your Kanzi Studio project.
Updated the Android platform package to use Android Studio 4.1.3 and Gradle 6.7.1.
To migrate your Kanzi application from an earlier version, see Android Gradle Plugin and Gradle.
Linux_imx6_armhf (GCC 4.9) is no longer supported and is replaced by linux_imx6_armhf_gcc6.
Added these QNX7.1 platform packages:
qnx710_screen_aarch64_cxx
qnx710_screen_x86_64_cxx
Changed the version of the kzb file format to 16.0.
Microsoft Visual C++ 2013 Redistributable is no longer required by Kanzi Studio.
Kanzi documentation is no longer included in the installer. See Using Kanzi documentation offline.
Updated these third-party libraries:
ICU from 52.1 to 62.1
libjpeg from 9c to 9d
libpng from 1.6.35 to 1.6.37
FreeImage from 3.17.0 to 3.18.0
FreeType from 2.9.1 to 2.10.4
The new version changes the position in some fonts and includes fixes to vulnerabilities. For details about changes to the FreeType library, see the release notes provided with the FreeType library.
You can now find the license information for the third-party libraries used in Kanzi in the
C:\Program Files\Rightware\Kanzi <KanziVersion>
directory. See What is installed with Kanzi?.Kanzi applications now close using the Alt F4 keys, instead of the Esc, Backspace, and Q keys.
When you open in Kanzi Studio a project that contains fonts and was created before Kanzi 3.8, during the conversion now Kanzi Studio assigns to each font file a unique font family.
Bindings can now receive the default value of a property type. See Bindings.
Changes to the Key Manipulator:
The Key Pressed trigger now reports whether a key press is a repeat caused by the user holding down a keyboard key.
Removed the Key Hold Timeout and Key Repeat Interval properties from the Key Manipulator node component.
Changes to input handling properties:
Deprecated the Click Enabled property. See Using the Click Manipulator.
Kanzi Studio now shows the Double-Click Enabled property as a frequently used property only in the Button, Toggle Button, and List Box Item Container nodes, which have a built-in multi-click manipulator.
To use the Kanzi Engine API to create a custom node that has built-in click and multi-click manipulators, derive from the
ClickConceptImpl<>
template class.Kanzi Studio now shows the Double-Click Enabled, Enabled, Hit Testable, and Hit Testable Container properties in the Input property category.
Starting with this version, to decide whether you can move focus to a node, use the focus scope types and the properties related to the focus management. To limit the focus chain navigation in a node tree, attach the Focus Scope Type property to your node and set its value to Fence, Modal or Popup. See Input and focus handling.
Removed
KzcHashMap
KzcHashSet
KzcDynamicArray
KzcMemoryManager
kzs_time
functionsKzuBoundingVolume
Legacy Render Pass (deprecated)
Fixed uniforms
To migrate your Kanzi application from an earlier version, see Other changes.
Revised and updated the Kanzi software license terms. See KANZI ONE SOFTWARE LICENSE TERMS.
Documentation¶
Overhauled the presentation of documentation, including the documentation layout and conceptual images.
Kanzi documentation is no longer available in a Kanzi Studio dockable window.
Added information on how you can add or customize the behavior and functionality of your Kanzi application. See Application development.
Added to the Working with ... section a topic dedicated to node components. See Node components.
Added a procedure that shows how to use a tile atlas. By using a tile atlas you can improve the performance of your application. See Using a tile atlas.
Improved the documentation of Text nodes by adding:
A section that describes the different options for wrapping and truncating text in Text Block nodes. See Wrapping and truncating text.
Instructions on how to fine-tune the rendering of characters in Text Block 2D nodes. See Setting the rendering of characters in a Text Block 2D node. and Setting the appearance of the composition text in a Text Box 2D node.
Instructions on how to set font hinting for Text Block and Text Box nodes. See Setting font hinting.
Updated the bindings reference to include instructions on how to use the matrix and vector constants in bindings. See Constants.
Added instructions for setting how Kanzi handles OpenGL ES content on the Windows platform, which does not support OpenGL ES. See Setting the OpenGL ES wrapper for the Preview.
Notable fixes¶
ID |
Description |
Area |
---|---|---|
252258 |
The Scroll View 2D and Grid List Box 2D nodes now by default scroll the same amount as the user drags the pointer. |
Kanzi Engine |
281239 |
Fixed the issue that caused an ancestor Scroll View node to send the |
Kanzi Engine |
326050 |
Fixed the issue that caused a resource leak warning from a Kanzi application in Android with StrictMode enabled. |
Kanzi Engine |
326192 |
Fixed the issue where expired one-shot timers ( |
Kanzi Engine |
326754 |
Fixed the issues that caused an Animation Player to terminate an application. |
Kanzi Engine |
327163 |
Fixed the issue that caused a Trajectory List Box 3D to scroll when you add or remove an item. |
Kanzi Engine |
328964 |
Fixed the issue that caused a Slider 3D node to lose track of ongoing pan when the pointer moved outside of the node area. |
Kanzi Engine |
332987 |
Fixed the issue that prevented the building of Kanzi Engine applications with ES2 configuration. |
Kanzi Engine |
335743 |
Fixed the issue that caused an Instantiator node to continuously re-render content even when there were no changes. |
Kanzi Engine |
335847 |
After the |
Kanzi Engine |
336563 |
Fixed the issue that prevented Kanzi from applying render transformation to a Scene node. |
Kanzi Engine |
340045 |
|
Kanzi Engine |
340090 |
On QNX7 fixed the issue that used the desktop OpenGL surface instead of the OpenGL ES surface. |
Kanzi Engine |
340965 |
Kanzi State Manager no longer terminates when applying a State Object causes a recursive state change that switches to an empty State. |
Kanzi Engine |
344319 |
In a Text Block node when you set character offset with the Character Spacing property, Kanzi no longer applies the offset to the first character of every new line. |
Kanzi Engine |
344637 |
Fixed the issue that caused applications to terminate when you bind an empty string data source to a 3D node texture property. |
Kanzi Engine |
352179 |
Fixed the issue in the Clamp binding expression that caused applications to terminate. |
Kanzi Engine |
353843 |
Slider nodes no longer override the values of the Minimum Value and Maximum Value properties. You can now set the values of the Range properties in a Slider node in any order. |
Kanzi Engine |
358819 |
Fixed the coordinate system in the Scroll View, Grid List Box, and Trajectory List Box 3D nodes so that when the user:
|
Kanzi Engine |
360045 |
Text Block and Text Box nodes now clip their text content to fit into the node size. |
Kanzi Engine |
362849 |
Slider nodes that use a Linear Trajectory now take the trajectory direction into account when processing up and down navigation key events. This makes the default navigation keys work for a vertical slider. |
Kanzi Engine |
365460 |
Fixed the issue that prevented focus from moving continuously when the user keeps the Tab or BackTab key pressed down. |
Kanzi Engine |
374489 |
Fixed the issue that prevented the Cubemap Render Pass from generating mipmaps. |
Kanzi Engine |
378740 |
Kanzi applications running on Android no longer terminate when you resize multiple views. |
Kanzi Engine |
132578 |
Fixed the issue that prevented Kanzi Studio from detecting a change in the Data Context property. |
Kanzi Studio |
207731 |
Kanzi Studio Preview now remembers the zoom level after the Preview restart. |
Kanzi Studio |
244106 |
Fixed the issue that in some cases prevented the Preview Node tool from correctly picking items in Grid List Box 3D nodes. |
Kanzi Studio |
261824 |
Fixed the issue in Kanzi Studio that prevented Kanzi Engine plugins from extending metaclasses. |
Kanzi Studio |
264205 |
Fixed the issue that prevented the Preview from starting after you rename a Kanzi Engine plugin dll that is in use in that Kanzi Studio project. |
Kanzi Studio |
281595 |
Select Item Index property is now available to all nodes. |
Kanzi Studio |
300664 |
Fixed the issue that prevented the Preview Analyze mode from working when you set in a Camera node the Projection Type property to Orthographic. |
Kanzi Studio |
305468 |
Fixed the issue that prevented the Activity Browser from updating the top-level Activity Host node. |
Kanzi Studio |
306618 |
Fixed the issue that caused the code behind template to ignore some non-alphanumeric characters in the generated Visual Studio solution name. |
Kanzi Studio |
310783 |
The Node tool in Kanzi Studio Preview now correctly snaps nodes in Grid Layout nodes. |
Kanzi Studio |
311137 |
Fixed the issue that caused Kanzi Studio to modify projects that use code behind when you open such project in Kanzi Studio. |
Kanzi Studio |
312062 |
Fixed the issue that prevented To Source and Two way bindings from working with data sources. |
Kanzi Studio |
319866 |
Fixed the issue where Kanzi Studio set an invalid path in the Project > Properties > Binary Export Directory property when you select the directory using the folder selection dialog. |
Kanzi Studio |
326600 |
Kanzi Studio no longer terminates when you delete a custom property type that is used in a state manager by a named property type. |
Kanzi Studio |
330260 |
When in Kanzi Studio you press F1 in the context of Activity functionality, Kanzi Studio now takes you to the correct documentation topic. |
Kanzi Studio |
330385 |
Fixed the issue that caused Kanzi Studio to issue a warning when you set in a Scene node the Blend Mode property to Alpha: Premultiplied. |
Kanzi Studio |
332025 |
Fixed the issue that prevented you from adding some property types to a Style. |
Kanzi Studio |
336512 |
Fixed the issue that made Kanzi Studio think you must restart the Preview after editing user preferences. |
Kanzi Studio |
336546 |
Fixed the issue that caused Kanzi Studio to show extra message triggers. |
Kanzi Studio |
356886 |
Fixed the issue that prevented Kanzi Studio from showing message arguments for a Trigger Condition in a custom Message Trigger. |
Kanzi Studio |
360308 |
To comply with the glTF 2.0 specification, Kanzi Studio now automatically removes the ICC profile from images that you import with glTF assets. |
Kanzi Studio |