Features
Keyboard focus in the Rive composable
Set the new focus parameter to RiveFocusMode.On to make the Rive surface part of Android focus navigation. Tab and Shift+Tab then move through the instance's focusable content and back out to the surrounding UI. RiveFocusMode.Automatic does this only in keyboard input mode. Requires opting into @ExperimentalRiveFocus. (Change)
The experimental StateMachine focus API also changed. focusNext() and focusPrevious() are replaced by the suspending moveFocus(RiveFocusDirection), and RiveFocusState is now Unfocused or Focused(expectsKeyboardInput).
System fallback fonts
Missing characters are now looked up across all system fallback fonts, not just the default sans-serif font. CJK text uses the face for the device locale and follows locale changes. In most cases, you no longer need your own FontFallbackStrategy. See System font fallback and locale changes. (Change, bundled in this commit)
Layout and drawing
- Scroll virtualization now supports grids and wrapping layouts, in one or both directions. (Change, Change)
- Strokes can be drawn inside or outside their path (Editor early access). Legacy Canvas rendering draws them centered. (Change, bundled in this commit)
- Scripts can transform a paint's gradient with
gradientTransform. (Change, bundled in this commit)
Fixes
- Triggers: A trigger fired by a nested state machine could be cleared before a sibling state machine saw it. Triggers are no longer reset every frame. (Fix, bundled in this commit)
- Listener actions: A view model value written by a listener action was missed by the next transition check, so a button could need two taps. (Fix, bundled in this commit)
- Color emoji: COLRv1 emoji gradients drew as solid black. (Fix, bundled in this commit)
- Focus teardown: Destroying an artboard that shared its host's focus manager could call into deleted components. (Fix)
- Stroke caps: The Rive renderer could leave a hairline seam beside a cap. (Fix, bundled in this commit)
- Virtualized scrolls: A virtualized scroll now rebuilds when its lists swap or are replaced. (Fix, bundled in this commit)
- Scripting: 2D script vectors always have
z = 0. GPU Canvas bind errors now raise a script error. (Fix, Fix)
Performance
- System fallback fonts are memory-mapped instead of copied and are decoded only when they contain a needed glyph. (Change, bundled in this commit)
- The runtime no longer walks every view model value each frame, and large virtualized lists load and scroll faster. (Change, bundled in this commit, Change)
- Luau
MeshInstanceswrites are committed once per draw instead of on everyset(). (Change)