Uno Platform 4.4 is our 4th release in 2022, keeping us on a once-in-six-weeks rapid release schedule we aim for. The release packs numerous UI and performance improvements across all target platforms. First, on the UI side you’ll be able to produce beautiful fluid animations on .NET Android, .NET iOS and Skia-based targets, as well as increase high-fidelity renderings of all your texts on Skia-based targets. Second, on the performance side we are including support for the most recent WebAssembly advances available in .NET 7 – Wasm Threading and Exception Handling. Lastly, we also enabled new input scenarios via GamePad API support and improved the default project templates.
In total we have implemented and resolved over 90 new feature requests and issues.
View the full announcement in our blog post.
Some of Highlights:
- Skottie integration (MUX
ProgressRing
on all Skia targets and .NET 6 mobile targets) (@jeromelaban) - Overhauled Skia TextBlock rendering with HarfBuzz (Support for wrapping, rich formatting, etc...) (@mikernet)
dotnet new unoapp
now uses .NET 6 and WinAppSDK (@jeromelaban)- The Skia.WPF project is now available as one project (no more .Skia.Wpf.Host project), and now supports .NET 6/C# 10 (@jeromelaban)
- GamePad APIs (@MartinZikmund)
- Experimental Wasm threads support (@jeromelaban)
- Wasm Exceptions support (@jeromelaban)
- Many small performance improvements for all platforms (@ebariche, @spouliot)
As always, thanks to our contributors:
- Pre-Android 23 fix (@queequac)
- Docs updates (@aki32, @mmarinchenko, @workgroupengineering)
You'll find below the full change log.
Features
- lottie: Add support for AnimatedVisualPlayer on net6.0 mobile and Skia targets. f0a8ac9
- Add the ability to set the Window background color 67f8ffe
- implement CoreWindows.Bounds 41b21a3
- Merge Wpf and Wpf.Host projects 3f82834
- Move unoapp to unoapp-uwo f27c285
- Move unoapp-net6 to unoapp-uwp-net6 d1b6ac2
- Move unoapp-winui to unoapp-winui-xamarin 68dba9a
- Move unoapp-winui-net6 to unoapp 1a0c349
- BitmapImage: [Skia] Add support for ms-appdata, BitmapImage.ImageOpened/ImageFailed 639fac2
- gamepad: GamepadAdded/Removed on Android a82cafa
- Gamepad: GamepadAdded/Removed for WASM 1160c40
- Gamepad: GamepadAdded/Removed on iOS, macOS dd0a1b2
- Gamepad: GetCurrentReading on Android 96cd0bb
- Gamepad: GetCurrentReading on iOS and macOS 2ce9933
- Gamepad: GetCurrentReading on WASM 52dab51
- TextBlock: [Skia] New HarfBuzz-based text rendering engine dcb83be
- wasm: Add support for threads e53ca2f
- Add WinUI 3 item templates d6a7c22
Performance Improvements
- drawables: Generate resolver to avoid reflection at startup bab524b
- iOS: Cache DisplayInformation properties a5919a8
- iOSmacOS: Directly convert from
Color
toCGColor
b9f8051 - iOSmacOS: Remove dead code and reduce casts in Layouter 7b783b1
- macOS: Avoid calling
Subviews
getter insideDispose
eff8fd7 - macOS: Cache DisplayInformation properties 67e02bd
- paintpool: Avoid unnecessary managed/unmanaged transitions d11d4e2
- selectoritem: Use monotonic clock instead of DateTime.Now e8d9813
Bug Fixes
- Adjust harbuzz initialization to avoid Gtk3 interference cc0b352
- Never enable the interpreter on net6.0-macos 5c75735
- Skia: [TextBlock] Fix rendering when font properties change 3dc5b2d
- [Android] TextBox EmailSmtpAddress InputScope does not work ebb290a
- [TextBlock] Prevent Text value overriding when it isn't necessary 3808c00
- Adjust default timeout for vscode debugger 507b9c9
- Adjust formatting in the vsix mobile template 4a96a92
- Adjust net6 library template for default xaml includes a6e56ed
- Adjust new net6 library from vsix 48ce808
- Adjust solution filter for unoapp-net6 7741611
- Align resource conversion for empty values 658b3f0
- Allow explicit disabling of the browser context menu 6744488
- AutoSuggestBox Reason with inconsistency 8d8686d
- Avoid Layout property event subscription leaks 2f13d2c
- Calculate SystemFocusVisual position relative to root element 996fd06
- ChildrenInTabFocusOrderIterable skipping first element 908c1e4
- Correct attribute argument for auto navigation 4b8a997
- DataTemplateSelector should throw if container is null 4a296e4
- Don't use
GRGlInterface.Create
to determine OpenGL availability 503d60b - Enable VerifyUIElementsInItemsSource test c802530
- Ensure app is started after native WPF template is applied 08b3e0e
- Gamepad readings improvements on WASM and Android 7036e6c
- Invalid support check in OpenGLRenderSurface 3c1b5b8
- Lower roslyn generation selection log message b85366b
- Make Clipboard.GetContentAsync reliable 4762bb2
- missing guarding leads to crashs under Android prior to API 23 97a88cb
- Missing mobile project for unoapp 41e1059
- NavigationViewTests waiting 7b4c596
- Replicates the linker default behavior for xamarin.mac 8e69ea8
- Use fully qualified name lookup for xClass resolution fa9f6b3
- UWP Samples app runtime tests attempt to use DP from non-UI thread d656f03
- codegen: Serialize XamlGenerator executions 38705eb
- DatePicker: Ensure proper native picker readability when the system theme is overriden. 77b795b
- dotnetnew: Fix incorrect restore in unoapp-winui f50e281
- dotnetnew: Misc adjust unoapp-winui-net6 d77a1a4
- expander: properly clip to bounds on expand/collapse 66cdc45
- ItemsRepeater: Avoid ItemsSource and Layout memory leaks 9320a67
- ItemsRepeater: FindFocusCandidate did not return focused child 6fcf1dd
- macOS: Remove warning/usage about/of deprecated
userSpaceScaleFactor
f2b76cc - measure_dirty_path: recycled ItemsControl not re-measuring 6f87bb8
- net6: Windows iOS build fails to package bundle resource properly dc6b864
- pointers: [iOS] Fix frame id capping to uint.MaxValue (Breaks Drag and Drop after about 10 days of device uptime with latests version of iOS) 2a08809
- skia: Add missing Harfbuzz dependencies for Wpf, Tizen and Framebuffer 260ae4d
- skia: Adjust more Harfbuzz dependencies a7a6797
- winui: Adjust path for manifest a318b3a
- Reset NSObject InFinalizerQueue after calling ReRegisterForFinalize 79425c9
- Sync system focus visual with the focused element on scroll 523a82c
- TextWrapping="Wrap" does not seem to work for TextBox on Android 1727f40
- try to fix broken initial nav 22d69aa
- Using long path format for Attachment 99c410f
- Validation for GL instance b1e50af
- Window Title by Manifest in SKIA WPF and GTK 7081442
- xbind: Ensure source updates update the target during a two-way binding 55d166f
- TryFocusAsync on non-focusable elements 3e60ded
- Turn Window Title by Manifest in SKIA 3665d46
- reg: Add missing harfbuzz dependency e42bf4e
- WebViewBehavior: nre 9aaa7e0