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.

../../_images/dt-complete.gif

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.

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.

See Modifying the main loop logic.

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.

../../_images/legacy-blending.png ../../_images/linear-blending.png

See Color workflow.

Effects

Introduced these post-processing effects for 2D nodes:

See Effects for 2D nodes.

glTF 2.0 support

../../_images/glTF_RGB_June16.svg

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.

../../_images/gltf-pbr.png

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.

See Data Triggers and Tutorial: Control application UI.

../../_images/apply-activation-set.gif

Text Box nodes

Use the Text Box nodes to add single-line text input to your application.

See Using the Text Box nodes.

../../_images/text-box-selection-preview-default.png

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.

See Using the Content Layout nodes.

../../_images/content-layout.gif

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.

    ../../_images/gather-lights-render-pass.svg
  • 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.

    ../../_images/node-list-render-pass.svg

Ranges

Introduced the range property type. You can use ranges to:

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.

../../_images/textured-default-uniform-bindings.png

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.

    ../../_images/settingspanel-uicontrols.gif
  • 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.

    ../../_images/activity-browser-create-root-eah.png
  • 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

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.

    ../../_images/slider-scroll-list-box.gif

Toggle Button Group nodes

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.

    See Controlling how a node reacts to input.

    ../../_images/node-enabled-disabled.gif
  • Improved the input method status exchange and input method action handling. See TextBoxConcept, TextInputManipulator, InputMethod, and InputMethodListener.

  • 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 traversal

      • FocusScope::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 the KeyMapEventFilter together with event sources to translate key input in Kanzi.

    • KeyRepeatGenerator. Use the KeyRepeatGenerator 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.

    ../../_images/new-project.png
  • Added a project template that includes the shaders for physically-based rendering. See Physically-based shaders.

    ../../_images/new-project-physically-based-rendering.png
  • 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.

    ../../_images/triggers-navigate-to-next.png
  • 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.

    ../../_images/keyboard-input-enabled.png
  • In the Properties and in the Preview tab Kanzi Studio now shows the effective size of the Screen node.

    ../../_images/effective-screen-size-preview.png ../../_images/effective-screen-size-properties.png
  • 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.

    ../../_images/inspect-kanzi-engine-plugin.png
  • 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.

    ../../_images/open-project-in-windows-explorer1.png
  • Refreshed and improved the Factory Content that you can use in Kanzi Studio to create prototype projects faster. See Factory Content assets.

    ../../_images/asset-packages-factory-content-selected.png
  • 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.

    ../../_images/asset-packages-window.png
  • 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.

    ../../_images/myassetsource.png
  • 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.

    ../../_images/compose-and-blit-pass-create2.png ../../_images/compose-and-blit-pass-library3.png
  • 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.

    ../../_images/vertexphongskinned-1001.png

Other improvements

  • In the On Property Change trigger (OnPropertyChangedTrigger) added a boolean property IgnoreIdenticalValue. 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 the acquireResourcesAsync 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 the MainLoopScheduler subsystem and it replaces the removed Timer 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.

    See Using the Key Manipulator.

  • 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 functions

    • KzuBoundingVolume

    • 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

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 UserScrollStarted and UserScrollEnded messages when the user panned a Scroll View node.

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 (KZU_TIMER_MESSAGE_MODE_ONCE) prevented an application from entering the idle state, until you explicitly removed them.

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 PropertyFieldTargetInterpolationTimelinePlayback reaches the target value, Kanzi no longer keeps updating the value of that property.

Kanzi Engine

336563

Fixed the issue that prevented Kanzi from applying render transformation to a Scene node.

Kanzi Engine

340045

acquireResourcesAsync no longer throws an exception when the ResourceManager file protocol cannot open a file.

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:

  • Pans right, the value of the Scroll Position property X property field decreases.

  • Pans down, the value of the Scroll Position property Y property field decreases.

  • Scrolls right, the value of the Scroll Position property X property field increases.

  • Scrolls down, the value of the Scroll Position property Y property field increases.

  • Scrolls to home, Kanzi sets the value of the Scroll Position property to the value of the Scroll Bounds Minimum property.

  • Scrolls to end, Kanzi sets the value of the Scroll Position property to the value of the Scroll Bounds Maximum property.

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