Browse Source

Fixed matrix multiplication order

pull/8105/head
Nikita Tsukanov 4 years ago
parent
commit
1849ca4caa
  1. 4
      src/Avalonia.Base/Rendering/Composition/Server/DrawingContextProxy.cs
  2. 4
      src/Avalonia.Base/Rendering/Composition/Server/ServerVisual.cs

4
src/Avalonia.Base/Rendering/Composition/Server/DrawingContextProxy.cs

@ -33,7 +33,7 @@ internal class CompositorDrawingContextProxy : IDrawingContextImpl, IDrawingCont
set => _visualBrushRenderer.VisualBrushDrawList = value;
}
public Matrix PreTransform { get; set; } = Matrix.Identity;
public Matrix PostTransform { get; set; } = Matrix.Identity;
public void Dispose()
{
@ -44,7 +44,7 @@ internal class CompositorDrawingContextProxy : IDrawingContextImpl, IDrawingCont
public Matrix Transform
{
get => _transform;
set => _impl.Transform = PreTransform * (_transform = value);
set => _impl.Transform = (_transform = value) * PostTransform;
}
public void Clear(Color color)

4
src/Avalonia.Base/Rendering/Composition/Server/ServerVisual.cs

@ -41,7 +41,7 @@ namespace Avalonia.Rendering.Composition.Server
Root!.RenderedVisuals++;
var transform = GlobalTransformMatrix;
canvas.PreTransform = MatrixUtils.ToMatrix(transform);
canvas.PostTransform = MatrixUtils.ToMatrix(transform);
canvas.Transform = Matrix.Identity;
if (Opacity != 1)
canvas.PushOpacity(Opacity);
@ -56,7 +56,7 @@ namespace Avalonia.Rendering.Composition.Server
RenderCore(canvas, currentTransformedClip);
// Hack to force invalidation of SKMatrix
canvas.PreTransform = MatrixUtils.ToMatrix(transform);
canvas.PostTransform = MatrixUtils.ToMatrix(transform);
canvas.Transform = Matrix.Identity;
if (OpacityMaskBrush != null)

Loading…
Cancel
Save