Kanzi 3.9.6 release notes

New features

Feature improvements

  • Introduced advanced color blending modes. See Advanced color blending modes.

    ../../_images/blend-mode-soft-light.png

    Source

    Destination

    Result

    ../../_images/advanced-blend-modes-source-color1.png ../../_images/advanced-blend-modes-destination1.png ../../_images/blend-mode-soft-light-color1.png
  • Introduced these ARGB graphics formats:

    • GraphicsFormatA8R8G8B8_SNORM

    • GraphicsFormatA8R8G8B8_UINT

    • GraphicsFormatA8R8G8B8_SINT

    • GraphicsFormatA16R16G16B16_UINT

    • GraphicsFormatA16R16G16B16_SINT

    • GraphicsFormatA16R16G16B16_UNORM

    • GraphicsFormatA16R16G16B16_SNORM

    • GraphicsFormatA16R16G16B16_SFLOAT

    • GraphicsFormatA32R32G32B32_UINT

    • GraphicsFormatA32R32G32B32_SINT

    • GraphicsFormatA32R32G32B32_SFLOAT

  • You can now define the surface format, filtering, and clear color for the render targets generated by NodeEffectRenderer2D.

  • Kanzi Java API improvements:

    • Added to the KanziObject class the tryCreateObjectRef(Class<>) function that attempts to create an owning ObjectRef for any KanziObject. You can use it to avoid throwing a StaleObjectException when an object is stale. See Managing instance lifetime.

    • Added to the TextResource class function create(Domain domain, String name, String value) the value parameter that enables you to create a TextResource with a value.

    • Added the ColorWorkflow enum with Legacy and Linear values to represent the color workflow in use. Added to the Domain class the getColorWorkflow() function that returns the current ColorWokflow.

    • Added to the BitmapImage class the premultiplyAlpha() function that premultiplies the color and luminance channels with the alpha channel.

    • Modified the ResourceManager.LoadTask and ResourceManager.ProtocolHandler.Result types to use strong ObjectRef instances for tracking resources. See Changes to Kanzi Java API Custom Resource Manager Protocol.

    • Added to the ResourceManager class the setDefaultMemoryStrategy(MemoryStrategy) and getDefaultMemoryStrategy() functions that can control the Resource Manager memory strategy.

    • Added to the Node2D class the getWorldTransform() and transform() functions.

    • Added the TaskDispatcher class that enables you to dispatch tasks to the Kanzi UI thread from other threads.

    • You can now access the ResourceDictionary class from Java.

    • Added to the Node class these methods to access the Resource Dictionary of a Node:

      • Node.getResourceDictionary()

      • Node.acquireResourceDictionary()

      • Node.setResourceDictionary(ResourceDictionary)

      • Node.setResourceDictionary(ResourceDictionary)

      • Node.notifyResourceDictionaryModified()

  • Kanzi Android framework (droidfw) improvements:

    • Kanzi views now use independent input and focus management. This means that:

      • Input in one view does not have a direct effect on another view.

      • Focus overlays, such as modals, are restricted to their owning view.

      This improvement changed the structure of the node tree in a Kanzi view. See Changes to accessing Kanzi Java API from Kanzi Android framework (droidfw) and Accessing the Kanzi Java and Kotlin API.

    • Improved startup performance by:

      • Changing the default DeploymentQueueBudget for Kanzi Android framework (droidfw) applications to 5 milliseconds per frame. See DeploymentQueueBudget.

      • Improving the utilization of DeploymentQueueBudget per frame for loading of dependencies.

    • When its reference count drops to zero, KanziRuntime.Reference now automatically releases its payload, if you do not close it manually.

  • Kanzi Studio now shows more details, including callstack, for runtime errors in Java plugins.

  • Introduced to the ActivityCodeBehind class callback methods for Activity status changes. These methods make it easier to define the behavior of Code Behind when the state of the Activity changes.

    The updated Activity Code Behind template replaces the use of registerStatusChangeOverride with the new methods.

  • Added the Data Context property as a frequently used property of the Data-Driven Exclusive Activity Host.

  • In the Activity Browser, you can now:

    • Add Activity Hosts directly under other Activity Hosts.

    • Add more than one Activity Host under an Activity.

    • Delete a manually added Activity of a Data-Driven Exclusive Activity Host.

    • Toggle automatic layout of items by clicking auto-layout.

    • Change the order and parent of Activity or Activity Host, by dragging that item in the Activity Browser. See Changing the order of nodes and Changing the parent of nodes.

      ../../_images/ab-reordering.gif ../../_images/ab-reparenting.gif
  • You can now use the Viewport 3D node in Kanzi Studio. The Viewport 3D node enables you to render 2D nodes in a 3D scene. See Using the Viewport 3D node.

    ../../_images/preview-viewport-3d-complete.gif
  • You can now use the Write Log Action to print property and message argument values. See Using Write Log action.

    ../../_images/node-components-write-log-action-advanced-formatting.png ../../_images/log-window-advanced-formatting.png
  • In the Shadow Effect 2D effect, introduced the Override Shadow Offset property that enables you to set the offset of the shadow from the object along the x and y axes. See Using the Shadow Effect 2D effect.

    ../../_images/override-shadow-offset.png ../../_images/shadow-offset.gif
  • Introduced in the ShaderProgram::CreateInfo class these functions that make it easier to use uniforms with shaders that you create in application code:

    • void addUniformAndBinding(AbstractPropertyType propertyType) adds a uniform and the default render value binding for that uniform.

    • void addUniformAndBinding(AbstractPropertyType propertyType, ShaderProgram::UniformTransformation transformation) adds a uniform and the default render value binding for that uniform with the transform function that you specify.

    • void addFixedUniform(string_view name) adds a uniform and the default binding to a fixed uniform function with pass through transform.

    • void addFixedUniform(string_view name, ShaderProgram::UniformTransformation transformation) adds a uniform and the default binding to a fixed uniform function with the transform function that you specify.

  • You can now use SPIR-V binary shaders on OpenGL targets. See Using binary shaders.

  • Introduced the getCameraNormalMatrix() uniform binding function that gets the matrix to transform object normals to view space. See getCameraNormalMatrix.

  • You can now use the Kanzi Engine API to create a Mesh from existing OpenGL buffer handles and query those handles from an existing Mesh. See Creating a mesh from native handles.

  • In the Mesh class, introduced support for instancing:

    • In Mesh::CreateInfo, you can now define the instance buffer.

    • In MeshVertexAttribute, you can now set whether an attribute is per vertex or per instance.

  • The Kanzi FreeType and iType font engines now support word wrapping for Lao, Khmer, Myanmar, and Thai. Kanzi no longer requires Thai dictionary for the iType font engine to support word wrapping, but still supports it. See Customizing word wrapping in Thai text with iType font engine and Font engine dictionaries.

  • Added options for truncating text that does not fit in the available space of Text Block and Text Box nodes. You can now set whether you want to truncate text:

    • At beginning, middle, or end

      ../../_images/text-block-truncation-direction.gif
    • Character by character or by entire words

      ../../_images/text-block-truncation.gif

    See Wrapping and truncating text and Setting truncation in a Text Box.

  • In a multi-project setup you can now share between referenced projects Kanzi resource IDs that you create in the Screen nodes.

  • Added to the On Property Change trigger the Ignore Initial Value property. Use this property to set off a trigger only when the value of the monitored property changes after the trigger is already attached.

  • In the Factory Content Slider you can now set the style and size of the knob and rail. See Using the slider from the Factory Content.

    ../../_images/fc-slider-color-properties.png ../../_images/fc-slider-in-preview.png
  • You can now use multiline parameters when you run Kanzi Studio from the command line. See Setting property values using a script.

Changes

  • Kanzi now handles SYN_DROPPED event according to the evdev specification.

  • To improve build time and runtime performance, changed kanzi::variant from boost::variant to boost::variant2. To migrate your Kanzi application, see Changes to kanzi::variant.

  • To improve build time, removed unnecessary includes and now use more forward declarations. To migrate your Kanzi application, see Changes to header files.

  • Removed the Cotire CMake module from the Kanzi workspace. To migrate your application, see Changes to CMake configuration files.

  • Added support for Python 3 for building Kanzi applications with SCons.

  • In the Kanzi application framework (appfw) on Android:

  • Kanzi Engine on Android platform is now using std::strtof, std::snprintf, and std::to_string instead of KZ_USE_C99_SNPRINTF, KZ_EMULATE_STRTOF, and KZ_EMULATE_TO_STRING.

  • Updated glslang to version 12.0.0.

  • Updated Android, Linux, QNX, and Windows platform packages to use:

    • Zlib 1.2.13

    • FreeType 2.12.1

      This version of the library introduces an improvement in smooth rasterizer performance by more than 10%. In some cases, these changes introduce subtle differences to text rendering.

    • HarfBuzz 5.3.1

      This version of the library introduces changes to text shaping, which in some cases can cause small differences in text layout.

  • Updated Integrity platform packages to use:

    • Zlib 1.2.13

    • FreeType 2.12.1

  • Deprecated the KzsResourceFile class for non-Android platforms. Use the functionality provided by the ReadOnlyDiskFile class.

  • A Node now knows the Screen node to which it is attached and can get the FocusManager and InputManager instances from that Screen. See Changes to focus and input management.

  • Deprecated the kzuEngine structure and moved its functionality to the Application, Node, ResourceManager, and Screen classes. See Changes to KzuEngine.

  • Changed the version of the kzb file format to 23.0.

Documentation

Notable fixes

ID

Description

Area

300598

Fixed the issue that caused incorrect registration of click events in 3D nodes when using camera with orthographic projection and absolute coordinates.

Kanzi Engine

324230

Fixed the issue that caused a discrepancy in multiline bidirectional text rendering between iType and FreeType font engines in Kanzi.

Kanzi Engine

334589

Fixed the issue that prevented the data context bindings from functioning properly when you target a sub-object of a root data context. For example, [DataContext] = {DataContext.subcontext}.

Kanzi Engine

395640

Kanzi no longer avoids clearing framebuffers when compositing 2D nodes. This improves performance on tiled rendering GPUs and fixes the issue that caused Kanzi to cut out part of a character in the text of a Text Block 2D node when you enable caching for that node. See Changes to brush rendering.

Kanzi Engine

428214

Fixed performance issues in bindings that use range property types.

Kanzi Engine

428303

Fixed the issue that caused the Preview to terminate when a Text Box node shows only overflow characters.

Kanzi Engine

431183

Fixed the issue where unapplying an Apply Property Action did not correctly restore the value of the Active Activity Index property.

Kanzi Engine

433346

Fixed the issue that caused a small offset in the rendering of 3D content when you apply a 2D effect to an ancestor of a Viewport 2D node.

Kanzi Engine

433605

Fixed the issue that caused the Click trigger to not contain any message arguments when the recognition of the click is triggered by the cancellation of a higher-priority input manipulator.

Kanzi Engine

436687

In a binding expression, casting to string a text resource that you get using the acquire binding function now works.

Kanzi Engine

437894

Fixed the issues in touch input handling that caused Kanzi to:

  • Incorrectly cancel touch input handling when the key focus node changes.

  • Sometimes fail to cancel touch input handling when the touch input no longer reaches the node that is handling the input.

Kanzi Engine

438534

When handling resources with dependencies, Kanzi now handles DeploymentQueueBudget in a way that enables deployment of such resources in the same frame as their dependencies, if the DeploymentQueueBudget allows.

Kanzi Engine

441268

The Performance HUD now reports correct GPU memory usage when using 32-bit mesh index buffer.

Kanzi Engine

442127

Fixed the issue that caused Kanzi Android application that consists of an overlay scope to terminate.

Kanzi Engine

442298

Fixed the issue that caused incorrect rendering of the Shadow Effect 2D effect when you set the value of the Shadow Color property to a non-black translucent color.

Kanzi Engine

442592

Fixed the issue where changes to a data source were not immediately reflected in the active Activity under a Data-Driven Exclusive Activity Host.

Kanzi Engine

444596

Fixed the issue that caused ObjectRef instances, if not explicitly closed, to cause a memory leak.

Kanzi Java API

416869

Fixed the issue that caused the Delete Unreferenced Items window to show auto-generated cubemap texture images even though they are used by your project.

Kanzi Studio

420138

Fixed the issue that prevented deletion of root node in the Activity Browser when you open a 3D Activity or Activity Host prefab in composition.

Kanzi Studio

420151

Fixed the issue that displayed <Isolation preview model placeholder> as the name of the root node in the Activity Browser when you open a 3D Activity or Activity Host prefab in composition.

Kanzi Studio

440396

Fixed the issue that prevented styles from working with node components other than triggers.

Kanzi Studio

441717

Fixed the issue that prevented the Activity Browser from adding a root Activity Host after you rename the Screen node.

Kanzi Studio

442274

Fixed the issue that prevented renaming of Activity Hosts in the Activity Browser.

Kanzi Studio

444700

Fixed the issue that corrupted the CMakeLists.txt of a project when in Kanzi Studio you added a referenced project.

Kanzi Studio

445492

The Kanzi Studio Preview now uses JAR Kanzi Engine plugins with same build configuration as that which you set for the Preview.

Kanzi Studio

420292

Fixed the issue in the Factory Content Slider that caused a one-frame delay in the rendering of the slider rail.

Kanzi framework SDK

421869

Fixed the issue that prevented the Node2D plugin example from working on Android.

Kanzi framework SDK

See also

Kanzi 3.9.6 migration guide

Known issues