Skip to content

RivePlayer: render through Uno's SKCanvasElement on Uno 7 - #825

Draft
MartinZikmund wants to merge 22 commits into
CommunityToolkit:mainfrom
MartinZikmund:mzikmund/rive-uno7
Draft

MartinZikmund wants to merge 22 commits into
CommunityToolkit:mainfrom
MartinZikmund:mzikmund/rive-uno7

Conversation

@MartinZikmund

@MartinZikmund MartinZikmund commented Nov 4, 2026 •

Copy link
Copy Markdown
Contributor

Note

Stacked on #822 (the Uno 7 migration), so the diff includes those commits until it merges. The RivePlayer change is just the last commit, 60ed6f5.

Why

On Uno 7, the Uno.Sdk head fails for net10.0-browserwasm with UNOB0023:

The runtime-enabled package(s) [SkiaSharp.Views.Uno.WinUI] did not provide any runtime assembly for net10.0-browserwasm.

Bumping the package doesn't help. Every SkiaSharp.Views.Uno.WinUI release, up to and including the 4.156 previews, still ships the Uno 6 uno-runtime/<tfm>/skia|webassembly layout.

What

On WinUI 3 / Uno only, RivePlayer now draws through SKCanvasElement from Uno.WinUI.Graphics2DSK, versioned with Uno itself:

  • New RiveCanvasElement: its RenderOverride forwards to PaintNextAnimationFrame.
  • PaintNextAnimationFrame now takes an SKCanvas rather than an SKSurface. The Clear() call moved into the SkiaSharp.Views callbacks, because SKCanvasElement draws on a canvas shared with the rest of the window.
  • UWP, WinAppSDK and WinUI 2 wasm are unchanged and still use SkiaSharp.Views.

Uno 7 already brings in SkiaSharp 4.151.1. RiveSharp is built against 2.88.3, so I checked its member references: all 42 SkiaSharp members it uses still exist with the same signatures in 4.151.1.

Validation

Local builds of CommunityToolkit.WinUI.Rive.RivePlayer succeed for both WinUI 3 wasm and WinUI 2 wasm. The WinUI 3 build restores Uno.WinUI.Graphics2DSK and SkiaSharp 4.151.1, and no longer references SKXamlCanvas.

🤖 Generated with Claude Code

https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz

MartinZikmund and others added 19 commits October 9, 2026 11:54
Points the tooling submodule at the Uno 7 branch and updates global.json
(.NET SDK 10.0.401, Uno.Sdk 7.0.0-dev.51, MSBuild.Sdk.Extras 3.0.44).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Uno annotates TextPointer.GetPositionAtOffset as nullable, which fails the build with warnings as errors.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
…is a stub

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01E8bkzyS24p8CYDWLUPsaPC
Resolves global.json and tooling: global.json follows the Uno 7 tooling branch
(SDK 10.0.402, MSBuild.Sdk.Extras 3.0.44, Uno.Sdk 7.0.0-dev.89), tooling moves to
its head (4e83b8a), which already contains main's tooling commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The Uno 7 tooling renamed linuxgtk to linux and added the win32 desktop target;
Filter-Supported-Components rejects the old name, failing every build job.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Ports the CommunityToolkit/Windows workflow changes for the Uno 7 tooling: the
win32/linux matrix, the Uno.Sdk head on the WinUI 3 wasm job and wasm-linux
becoming uno-linux, which builds that head for browserwasm and desktop.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Uno 5 generates a partial declaration for every DependencyObject (CS0260).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On Uno 5 Android, Android.Widget.TableRow is also in scope (CS0104).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
1.33.1 installs Microsoft.Android.Sdk 36.1.2, under which the .NET 10.0.403 SDK
adds the host RID to the Android head's RuntimeIdentifiers and restore looks
for Microsoft.NETCore.App.Runtime.Mono.win-x64 (NU1102). Matches the Windows
and tooling repos.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
The ApiInformation probe names Windows.UI.Xaml.UIElement, which isn't trim-safe
on Uno 7 (IL2122) and returns false on WinUI 3, so every WinUI 3 target fell
back to the obsolete FocusManager.GetFocusedElement() (CS0618). XamlRoot always
exists on WinUI 3, matching ApiInformationHelper in CommunityToolkit/Windows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
uno-check leaves Microsoft.Android.Sdk 36.1.2 selected, where the .NET 10.0.403
SDK adds the host RID to the Uno 7 Android head and restore fails on
Microsoft.NETCore.App.Runtime.Mono.win-x64 (NU1102). 36.1.118 doesn't.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
ImplicitUsings pulls Android.App and Android.Widget into the Android builds,
whose Application, Orientation and TableRow clash with the XAML and Markdig
types (CS0104). Replaces the per-file TableRow alias.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
On Uno 5 Android the sample pages are ViewGroups, whose Debug(int) method hides
System.Diagnostics.Debug (CS0119).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
uno-check already installs it, so install was a no-op; update moves the manifest
past 36.1.2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
MartinZikmund and others added 2 commits November 4, 2026 01:14
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
SkiaSharp.Views.Uno.WinUI has no build for Uno 7 (every release, including the
4.156 previews, still ships the Uno 6 uno-runtime layout), so the Uno.Sdk head
fails with UNOB0023 on net10.0-browserwasm. On WinUI 3 / Uno, draw through
Uno.WinUI.Graphics2DSK's SKCanvasElement instead. Uno 7 already brings in
SkiaSharp 4.151.1, and every SkiaSharp member RiveSharp references still exists
there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNu1EDpoRrpP3hnDukwz
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TXMNtyvCafb6Ej7cqotkAC

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant