============================================== Kanzi 3.8 release notes - April 8, 2020 ============================================== New features ------------ * Property Target Easing Interpolator. Use the Property Target Easing Interpolator when you want to dynamically set the target value for a property and want to interpolate the current value to the target value over time using an easing function. * New functionality for binding expressions. In binding expressions you can now use: - Trigonometric functions - Relational operators - Logical operators - Accessor functions - Vector functions - Multiplication of vectors and quaternions * Asset Packages. With asset packages you can create an asset library with content, such as UI components, materials, brushes, styles, and textures. Use asset packages to make this content readily available for use in different Kanzi Studio projects or to share the content within your company for all your Kanzi applications. * Cubemap Render Pass. Use the Cubemap Render Pass to reflect the environment on the surface of 3D nodes. Feature improvements -------------------- * Kanzi now handles a font file as a Font Family resource, which can contain any number of font files: - Introduced the FontStyleDefinition class to contain a collection of font style property values that are passed inside Kanzi. - Moved from the TextFormat and TextLayouter classes the font style setter and getter functions to the FontStyleDefinition class. - Introduced the FontRuntime class to map FontStyleDefinition to a font file (FontFile) at runtime. FontRuntime is immutable. When a font style changes, request a new FontRuntime object from the FontManager. - Introduced the FontStyleConcept class which includes helper functions to FontRuntime. - TextFormat, TextLayouter, and TextShaper now take FontRuntime instead of Font. - You can now set the appearance of a font with the Weight and Style properties, that set which font file from a font family a Text Block node uses to render text. - The Font property (Node::FontProperty) is replaced with the Font Family property (Node::FontFamilyProperty). * Improved functionality of binding expressions: - Added matrix and transformation functions INVERSE and TRANSFORM. - Added support for matrix and conversion between matrix and SRT conversion. - You can now access text resources using a resource ID. * Improvements to resource loading: - ResourceManager::LoadTask now has LoadAndFinish and FinishOnly load task types. FinishOnly load tasks skip loader threads and Kanzi queues them directly to the main thread FinishingQueue. - A load task can now trigger background loading of dependencies. This improves the use of the loader threads, improves the loading time, and makes the background loading smoother. - Added these resource types to use load tasks and load task dependencies: - Brush - Material - Mesh - Render Pass Prefab - State Manager * Improved the way resource dictionaries are stored in kzb files. This enables faster loading times of kzb files that have large, unused resource dictionaries, such as localization tables. * Introduced speed optimization for setProperty, addPropertyModifier, removePropertyModifier, copyLocalValue. * Introduced Kanzi Engine API to allow notifying an application that the UI is suspended: - Added override function onSuspend that Kanzi calls from suspendOverride. - Added ability to cancel the suspension of the UI. * In Kanzi Engine API introduced PropertyTypeRegistry that keeps a list of all registered property types in an application. See kanzi::beginPropertyTypes and kanzi::endPropertyTypes. * Improved the ResourceManager destructor to print the complete list of referenced resources. * Added these render target formats: - ARGB 8-bit (A8R8G8B8_UNORM) - Alpha 8-bit (A8_UNORM) - Grayscale 8-bit (L8_UNORM) - Grayscale alpha 8-bit (L8A8_UNORM) - Alpha Luminance 8-bit (A8_L8_UNORM) * Improved collection of prefab dependencies. For the State Managers and resource IDs that are used in a prefab, Prefab View asynchronous prefab changes can now load resource dependencies in the background. * Turned font backends into plugins to enable you to have both FreeType and iType font engine for the Kanzi Studio Preview installed at the same time. On platforms that support dynamic libraries, this enables you to select the font engine at application startup. * In Kanzi Studio triggers are now project items, which enables you to: - Reorder the triggers by dragging them - Copy and paste triggers, actions, and trigger conditions - Modify properties in context of the items * Improvements to the Performance HUD: - You can now configure the position of the Performance HUD. - In the Performance HUD you can now see the number of timer subscriptions, recurring tasks, and animations. * Brought back the Overdraw visualization. Overdraw visualization indicates areas where Kanzi renders multiple times to the same pixel. Lighter green color indicates higher amount of overdraw. * Made these improvements to how Kanzi handles hardware keys: - Introduced KeyManipulator class. KeyManipulator dispatches KeyPressedMessage, KeyReleasedMessage messages when the user presses and releases a key, and on cancellation dispatches KeyCanceledMessage message. Keyboard.KeyDown and Keyboard.KeyUp messages are now deprecated. Use KeyManipulator messages with a dedicated key manipulator for each key that you want to handle. - The NavigationManipulator class now handles navigation keys, such as ↑ (Up Arrow), ↓ (Down Arrow), → (Right Arrow) and ← (Left Arrow), Home, End, Page Up, Page Down keyboard keys. - The FocusNavigationManipulator class now handles the keys used in focus chain and directional focus navigation. Use this manipulator on the focus scope nodes. To set the manipulator on focus scopes, use FocusScope. * Refactored MessageType: - Replaced kzuMessageType with AbstractMessageTypeDescriptor. - MessageType now automatically attaches its argument metaclass. This makes optional the attaching of message types to an owning class with macro KZ_METACLASS_MESSAGE_TYPE. - For kzb registered messages, message arguments class is fixed to MessageArguments. - Replaced the constructor of MessageArguments that takes AbstractMessageType as a parameter with Node::dispatchAbstractMessage. * Introduced input manipulator node components to maintain manipulators attached to nodes. You can find these components in Node Components > Input Manipulators: Click Manipulator, Multi-Click Manipulator, Long-Press Manipulator, Pan Manipulator, Key Manipulator. * PanManipulator now reports velocity in these messages: - PanManipulator::MovedMessage - PanManipulator::EnteredMessage - PanManipulator::LeftMessage - PanManipulator::FinishedMessage * Added the functionality and the Depth Compare Function property for setting the depth compare mode for depth render targets in Composition Target Render Pass. * Improved usability of Kanzi Studio: - In Kanzi Studio the items in the Node Components now use the tree control. This improvement provides you more flexibility and reduces the amount of popup windows when you work in the Node Components window. - You can now open files in your default Windows application straight from Kanzi Studio. In the Library > Resource Files right-click a file and select the "Open with default windows app" or the "Open with" command. - Renewed the Kanzi Studio icons for the State Manager, State Tools, and Styles. Changes ------- * Updated PVRTexTool to the version 4.20.0. * Introduced kzb format versioning with major and minor revisions. The kzb format version in Kanzi 3.8 is 11.0. * Changed the syntax of Kanzi Engine plugin metadata attribute SortingIndex to metadata.sortingIndex. * Removed legacy features: - Legacy kzb format support - kzs_thread - kzc_file and kzc_input_stream - kzc_output_stream - kzs_mmap * In Kanzi Studio custom Message Types are now separate from Property Types. In Kanzi Studio you can find them in the Library > Message Types. * Unified the name and case for bindings operations in Kanzi Studio. * Platform package qnx700_screen_aarch64 for Kanzi 3.8 does not support ES2. * Kanzi Studio now more regularly sends usage reports to Rightware, which enables us to keep improving Kanzi Studio. You can find the complete list of changes in Kanzi documentation > Release notes and migration guides.