Repository navigation
Use SkiaSharp arc drawing API - #37955
Conversation
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Updates the pinned `@microsoft/vally-cli` version used by skill validation and live soak workflows from 0.12.0 to the latest stable release, 0.14.0. Also updates direct lint command examples and makes eval-spec comments version-neutral where the described scoring behavior remains unchanged. ## Validation - Installed Vally 0.14.0 through `.github/scripts/SetupVallyRuntime.sh` - Strict-linted all 16 Vally evaluation specifications with Vally 0.14.0 Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Removes the `IlcTreatWarningsAsErrors=false` workaround and its TODO from the Apple NativeAOT simulator integration test. The linked tracking issue, #19397, was closed after all template trimming warnings were resolved. The dedicated `AOTTemplateTest.PublishNativeAOT` suite also maintains an empty expected-warning baseline for Apple NativeAOT builds, so the simulator run should enforce the default ILC warning policy again. ## Validation - The exact `AppleTemplateTests.RunOniOS_MauiNativeAOT` test compiled and started on Windows, but Windows could not complete the Apple ILC phase because the iOS-simulator NativeAOT runtime pack was unavailable (`MSB3030` for `System.Runtime.InteropServices.RuntimeInformation.dll`). - The Windows `AOTTemplateTest.PublishNativeAOT(... win-arm64)` proxy passed, including its assertion that the complete NativeAOT binlog warning list is empty. Apple-specific ILC/codegen and simulator execution require the macOS CI lanes and will be monitored on this draft PR. Copilot-Session: 37f90cb9-27a1-41b7-b954-95bbbcc9e81e Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com>
Replace the temporary SKPath workaround now that SKCanvas.DrawArc is available, and cover both arc directions with pixel-equivalence tests. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.sh | bash -s -- 37955Or
iex "& { $(irm https://raw.githubusercontent.com/dotnet/maui/main/eng/scripts/get-maui-pr.ps1) } 37955" |
|
Azure Pipelines: Successfully started running 1 pipeline(s). There may be pipelines that require an authorized user to comment /azp run to run. |
There was a problem hiding this comment.
Copilot review overview
Review tier: Lite
Findings: 1
New issues introduced by this change (1)
| Severity | Finding |
|---|---|
src/Graphics/tests/Graphics.Tests/SkiaCanvasTests.cs — CreateBitmap returns a newly allocated SKBitmap without clearing it. SKBitmap pixel memory is not… |
What changed in this PR
This PR updates the Graphics.Skia renderer to use SkiaSharp’s supported SKCanvas.DrawArc API for drawing open (stroked) arcs and filled arcs, replacing the prior SKPath.AddArc workaround, and adds unit tests to validate pixel-equivalence against the previous path-based rendering.
Changes:
- Replace open-arc stroke rendering from
SKPath+DrawPathtoSKCanvas.DrawArc. - Replace filled-arc rendering from
SKPath+DrawPathtoSKCanvas.DrawArc. - Add new Skia canvas arc tests that compare
SkiaCanvasoutput against equivalentSKPath.AddArcrendering for clockwise and counterclockwise cases.
| File | Description |
|---|---|
| src/Graphics/src/Graphics.Skia/SkiaCanvas.cs | Switches arc drawing/filling implementation to SKCanvas.DrawArc (removes temporary path workaround). |
| src/Graphics/tests/Graphics.Tests/SkiaCanvasTests.cs | Adds pixel-equivalence tests for stroked and filled arcs across clockwise/counterclockwise rendering. |
Clear the bitmap buffers before full-byte comparisons so untouched pixels cannot make the equivalence tests nondeterministic. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
There was a problem hiding this comment.
Copilot review overview
Review tier: Lite
Findings: None
Issues resolved since last review (1)
| Severity | Finding |
|---|---|
src/Graphics/tests/Graphics.Tests/SkiaCanvasTests.cs — CreateBitmap returns a newly allocated SKBitmap without clearing it. SKBitmap pixel memory is not… View resolved comment |
This comment has been minimized.
This comment has been minimized.
MauiBot
left a comment
There was a problem hiding this comment.
Expert Review — 3 findings
See inline comments for details.
Keep the SKPath implementation for full stroked sweeps, where SKCanvas.DrawArc uses different open-contour semantics, and cover cap styles and degenerate bounds. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
There was a problem hiding this comment.
Copilot review overview
🟢 Approval recommended
Review tier: Lite
Findings: None
Suppressed comments (2)
Previously missed (1) — in code that hasn't changed since the last review.
src/Graphics/src/Graphics.Skia/SkiaCanvas.cs:469
sweepis afloat, butMath.Abs(sweep)uses thedoubleoverload, causing an implicit float→double conversion on every arc draw. UsingMathF.Abskeeps the computation infloatand avoids the extra conversion in this hot path.
This issue also appears on line 516 of the same file.
else if (Math.Abs(sweep) >= 360)
src/Graphics/src/Graphics.Skia/SkiaCanvas.cs:516
- Same as PlatformDrawArc:
sweepisfloat, soMath.Abs(sweep)selects thedoubleoverload. PreferMathF.Abs(and afloatliteral) to avoid float→double conversion in the rendering path.
if (Math.Abs(sweep) >= 360)
|
/azp run |
|
Azure Pipelines: Successfully started running 3 pipeline(s). |
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. ## Testing - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. ## Testing - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. ## Testing - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! ## Description Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. ## Testing - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203
<!-- Please let the below note in for people that find this PR --> > [!NOTE] > Are you waiting for the changes in this PR to be merged? > It would be very helpful if you could [test the resulting artifacts](https://github.com/dotnet/maui/wiki/Testing-PR-Builds) from this PR and let us know in a comment if this change resolves your issue. Thank you! Replace the temporary `SKPath` workaround for partial Skia canvas arcs with the supported `SKCanvas.DrawArc` API. Full sweeps retain `SKPath.AddArc` for behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from other `ICanvas` implementations, but correcting that observable behavior is outside this binding-cleanup scope. Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work. - Added pixel-equivalence tests for clockwise and counterclockwise partial arcs - Added cardinal and non-cardinal full-sweep compatibility coverage, including stroke caps and dash patterns - Added degenerate rectangle and non-empty/empty rendering assertions - Existing Windows Skia golden rendering scenarios remain unchanged - Built Graphics.Skia for `netstandard2.0`, `netstandard2.1`, and `net10.0-windows10.0.19041.0` --------- Co-authored-by: Shane Neuville <5375137+PureWeen@users.noreply.github.com> Co-authored-by: PureWeen <223556219+Copilot@users.noreply.github.com> Co-authored-by: Jakub Florkowski <42434498+kubaflo@users.noreply.github.com> Copilot-Session: 9e73594e-38bc-4937-80c8-cc054aa890d2 Copilot-Session: 52631b63-ad61-4de7-91b3-10a973848203

Note
Are you waiting for the changes in this PR to be merged?
It would be very helpful if you could test the resulting artifacts from this PR and let us know in a comment if this change resolves your issue. Thank you!
Description
Replace the temporary
SKPathworkaround for partial Skia canvas arcs with the supportedSKCanvas.DrawArcAPI.Full sweeps retain
SKPath.AddArcfor behavioral compatibility. For strokes, cardinal full sweeps must remain closed ovals rather than open contours with caps at the seam. For fills and strokes, some non-cardinal full sweeps retain the existing empty-contour behavior; this is a known deviation from otherICanvasimplementations, but correcting that observable behavior is outside this binding-cleanup scope.Bitmap filtering and unrelated unimplemented Graphics.Skia TODOs remain unchanged because resolving them could alter rendering behavior or requires separate feature work.
Testing
netstandard2.0,netstandard2.1, andnet10.0-windows10.0.19041.0