Kanzi 3.9.1 release notes

Feature improvements

  • Introduced new blend modes:

    • Multiply and Screen modes for darkening and lightening content

      ../../_images/multiply-overlay-with-content.png ../../_images/screen-overlay-with-content.png
    • Porter-Duff blend modes for alpha compositing

      ../../_images/mask-completed.png

    See Blending and compositing 2D nodes.

  • Focus handling:

    • Introduced the Contains Focus property that reports whether a node or any of its descendant nodes have keyboard focus.

      For example, use this property to visually indicate to the user whether a user interface element has focus.

      See Showing when a user interface element has focus.

      ../../_images/contains-focus-binding.gif
    • Kanzi can now set focus to a visible node that is effectively invisible.

      For example, Kanzi can set focus to an item in a List Box node when the list item container is not visible.

  • Introduced application configuration option that enables you to control the maximum duration that Kanzi spends each frame to deploy asynchronously loaded resources. Use this configuration option to optimize loading time when your application asynchronously loads many assets. See DeploymentQueueBudget.

  • Kanzi Java API. You can now modify the Kanzi main loop using tasks and timers. See Modifying the main loop logic.

  • Kanzi Android framework (droidfw):

    • You can now use Kanzi Android framework (droidfw) and Kanzi Java API from Kotlin. See Using Java and Kotlin.

    • You can now use the kzbPathList attribute on a Kanzi View to set a list of kzb files that you want to load automatically when Kanzi attaches the View. This way you can replace manual loading of files with the Java KanziRuntime.loadKzb method.

  • Kanzi Activity system

    • Introduced messages:

      • Activity Activating (ActivityConcept::ActivityActivatingMessage)

        An Activity sends this message when it is in the activating state.

      • Activity Activated (ActivityConcept::ActivityActivatedMessage)

        An Activity sends this message when it is activated.

      • Activity Deactivating (ActivityConcept::ActivityDeactivatingMessage)

        An Activity sends this message when it is in the deactivating state.

      • Activity Deactivated (ActivityConcept::ActivityDeactivatedMessage)

        An Activity sends this message when it is deactivated.

    • Kanzi Studio now automatically synchronizes the selection of Activities and Activity Hosts between the Activity Browser, Node Tree, and Prefabs.

      For example, when you select an Activity or Activity Host in the Activity Browser, Kanzi Studio now automatically selects the Activity prefab in the Prefabs and the Activity Host either in the Node Tree or the Prefabs.

Changes

  • Removed the focus reason arguments from FocusManager::trySetFocus() methods. Now these methods use FocusManager::ForceFocusReason when setting the focus on the node.

  • Activities and focus:

    • Kanzi Studio no longer by default adds the Save Last Focused Node and Focus Scope Type properties to Activity Host nodes. You no longer have to set these properties on Activity Host nodes to enable the saving and restoring of the last-focused node in their Activities.

    • When you restart a Kanzi application or the Kanzi Studio Preview, an activating Activity now gains the initial application focus if the only focusable content in the node tree is inside that Activity.

  • Removed the requirement to set the KANZI_HOME environment variable for Code Behind.

  • Changed the default blend mode of materials from Opaque to Alpha: Premultiplied. See Kanzi 3.9.1 migration guide.

  • Added the Activity Name (ActivityConcept::ActivityMessageArguments::ActivityName) message argument to filter Activities by name.

    When you open a Kanzi Studio project that uses the Activity Prefab Attached or the Activity Prefab Detached message, Kanzi Studio automatically applies the change.

  • Kanzi Java API:

    • Changed the ResourceManager.LoadTask interface to add ability to enqueue dependencies. See Kanzi 3.9.1 migration guide.

    • To make it easier to access asynchronously loaded resources, added the ResourceManager.AcquireTask.getLoadedResource method.

    • When constructing a Metaclass instance, the class type parameter is now optional.

    • When running a Java plugin on Windows, the search path for the JDK now by default supports more computer configurations.

  • Kanzi no longer depends on the ICU library version 52.1.

  • Added a standalone package that enables you to develop Kanzi applications for Android without Kanzi Studio. For example, when you use this package you can develop Kanzi applications using Android Studio on Linux, using command line interface and Gradle on Linux, or use it with your own build automation that uses Gradle. See Requirements for Android application development with Kanzi.

    The package includes libraries for both Freetype and Monotype's iType and requires that you have a valid Monotype license.

Documentation

  • Added a tutorial that helps you learn how to program Activities with the Code Behind workflow. See Tutorial: Program Activities with C++ Code Behind.

    ../../_images/code-behind-drag-widgets.gif
  • Added a tutorial that helps you learn how to apply a Gaussian blur effect and how to apply that effect when a condition is met. See Tutorial: Create a Gaussian blur effect.

    ../../_images/blur-completed.gif
  • Updated the tutorial that helps you learn how to create cluster indicators. The tutorial now shows how you can use a tile atlas for the indicators.

    When you use a tile atlas, instead of single images for each indicator, you can improve application performance by decreasing the number of texture switches that your application must make during runtime. See Tutorial: Create cluster indicators.

    ../../_images/indicator-full-completed1.gif
  • Added a procedure that shows how you can create the frosted glass effect. See Creating a frosted glass effect.

    ../../_images/frosted-glass-with-content.png

Notable fixes

ID

Description

Area

385135

In a node that uses a 2D effect, setting the Opacity and Blend Mode properties now works.

Kanzi Engine

351666

Fixed the rendering of cubemap images. You no longer need to flip cubemap images or modify reflections to get the expected result. The fix also enables you to use the same image both as a single texture and in a cubemap texture. See Kanzi 3.9.1 migration guide.

Kanzi Studio

388168

Fixed the creation of integral PropertyType instances and other metadata when using Kotlin. PropertyType now supports both the boxed and unboxed versions of an integer and floating point number. See Using Java and Kotlin.

Kanzi Android framework (droidfw)

393023

Fixed the rendering of nodes in Kanzi Android framework (droidfw) when PerspectiveTransformation property was set.

Kanzi Android framework (droidfw)