提交 066056dc 编写于 作者: D David

fix(reg): Fix shappes offset being ignored

上级 25a95dbd
......@@ -3,13 +3,47 @@
using SkiaSharp;
using System;
using System.Numerics;
using Uno.Extensions;
using Uno.UI.Composition;
namespace Windows.UI.Composition;
public partial class CompositionShape
{
internal virtual void Render(in DrawingSession session)
{
using var localSession = BeginDrawing(in session);
Draw(in session); // We use the session on purpose here!
}
internal virtual void Draw(in DrawingSession session)
{
}
private DrawingSession? BeginDrawing(in DrawingSession session)
{
var offset = Offset;
var transform = this.GetTransform();
if (offset == Vector2.Zero && transform is { IsIdentity: true })
{
return default; // Use the session without saving it, nothing to dispose
}
session.Surface.Canvas.Save();
if (offset != Vector2.Zero)
{
session.Surface.Canvas.Translate(offset.X, offset.Y);
}
if (transform is { IsIdentity: false })
{
var skTransform = transform.ToSKMatrix();
session.Surface.Canvas.Concat(ref skTransform);
}
return session;
}
}
......@@ -27,24 +27,7 @@ public partial class ShapeVisual
for (var i = 0; i < shapes.Count; i++)
{
var shape = shapes[i];
var shapeTransform = shape.GetTransform();
if (shapeTransform.IsIdentity)
{
shape.Draw(in session);
}
else
{
var shapeTransformMatrix = shapeTransform.ToSKMatrix();
session.Surface.Canvas.Save();
session.Surface.Canvas.Concat(ref shapeTransformMatrix);
shape.Draw(in session);
session.Surface.Canvas.Restore();
}
shapes[i].Render(in session);
}
}
......
#nullable enable
#define TRACE_COMPOSITION
//#define TRACE_COMPOSITION
using System;
using System.Linq;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册