From a8a6769f7269ce2415870381ca06a9939a1f0ac3 Mon Sep 17 00:00:00 2001 From: Nikita Tsukanov Date: Sat, 20 Dec 2025 02:00:44 +0500 Subject: [PATCH] Matrix stuff --- .../Composition/Server/CompositionMatrix.cs | 4 +-- .../Server/ServerCompositionDrawListVisual.cs | 2 +- src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs | 27 +++++++++++++++++-- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs b/src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs index da1cd57d30..e0ce257ebd 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/CompositionMatrix.cs @@ -152,7 +152,7 @@ public struct CompositionMatrix(Matrix matrix) var actual = res.ToMatrix(); if (!expected.Equals(actual)) { - Console.WriteLine("BUG!"); + throw new InvalidOperationException("BUG"); } return res; @@ -224,7 +224,7 @@ public struct CompositionMatrix(Matrix matrix) var expected = p.Transform(ToMatrix()); if (res != expected) { - Console.WriteLine("Bug!"); + throw new InvalidOperationException("BUG"); } return res; diff --git a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs index ba9b042ad3..42b46f1986 100644 --- a/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs +++ b/src/Avalonia.Base/Rendering/Composition/Server/ServerCompositionDrawListVisual.cs @@ -43,7 +43,7 @@ internal class ServerCompositionDrawListVisual : ServerCompositionContainerVisua protected override void RenderCore(ServerVisualRenderContext context, LtrbRect currentTransformedClip) { if (_renderCommands != null - && context.ShouldRenderOwnContent(this, currentTransformedClip)) + && context.ShouldRenderOwnContent(this, ref currentTransformedClip)) { _renderCommands.Render(context.Canvas); } diff --git a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs index 007fae8877..8f9b75d5b4 100644 --- a/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs +++ b/src/Skia/Avalonia.Skia/SkiaSharpExtensions.cs @@ -174,13 +174,36 @@ namespace Avalonia.Skia return sm; } - - + + public static SKMatrix44 ToSKMatrix44(this CompositionMatrix m) +#if DEBUG_COMPOSITION_MATRIX + { + var rv = ToSKMatrix44Core(m); + var expected = m.ToMatrix().ToSKMatrix44(); + if (rv != expected) + throw new Exception(); + return rv; + } + public static SKMatrix44 ToSKMatrix44Core(CompositionMatrix m) +#endif { if (m.GuaranteedIdentity) return SKMatrix44.Identity; + if (m.GuaranteedTranslateAndScaleOnly) + { + return new SKMatrix44() + { + M00 = (float)m.ScaleX, + M11 = (float)m.ScaleY, + M22 = 1, + M30 = (float)m.OffsetX, + M31 = (float)m.OffsetY, + M33 = 1 + }; + } + return new SKMatrix44 { M00 = (float)m.ScaleX,