|
|
@@ -280,11 +280,40 @@ namespace Avalonia.Layout.UnitTests
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ [Fact]
|
|
|
+ public async Task Rotate_Transform_On_Parent_Affects_EffectiveViewport()
|
|
|
+ {
|
|
|
+ await RunOnUIThread.Execute(async () =>
|
|
|
+ {
|
|
|
+ var root = CreateRoot();
|
|
|
+ var target = new Canvas { Width = 100, Height = 100 };
|
|
|
+ var parent = new Border { Width = 200, Height = 200, Child = target };
|
|
|
+ var raised = 0;
|
|
|
+
|
|
|
+ root.Child = parent;
|
|
|
+
|
|
|
+ await ExecuteInitialLayoutPass(root);
|
|
|
+
|
|
|
+ target.EffectiveViewportChanged += (s, e) =>
|
|
|
+ {
|
|
|
+ AssertArePixelEqual(new Rect(-651, -792, 1484, 1484), e.EffectiveViewport);
|
|
|
+ ++raised;
|
|
|
+ };
|
|
|
+
|
|
|
+ parent.RenderTransformOrigin = new RelativePoint(0, 0, RelativeUnit.Absolute);
|
|
|
+ parent.RenderTransform = new RotateTransform { Angle = 45 };
|
|
|
+ parent.InvalidateMeasure();
|
|
|
+ await ExecuteLayoutPass(root);
|
|
|
+
|
|
|
+ Assert.Equal(1, raised);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private TestRoot CreateRoot() => new TestRoot { Width = 1200, Height = 900 };
|
|
|
|
|
|
private Task ExecuteInitialLayoutPass(TestRoot root)
|
|
|
{
|
|
|
- root.LayoutManager.ExecuteInitialLayoutPass(root);
|
|
|
+ root.LayoutManager.ExecuteInitialLayoutPass();
|
|
|
return Task.CompletedTask;
|
|
|
}
|
|
|
|
|
|
@@ -359,6 +388,12 @@ namespace Avalonia.Layout.UnitTests
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ private void AssertArePixelEqual(Rect expected, Rect actual)
|
|
|
+ {
|
|
|
+ var expectedRounded = new Rect((int)expected.X, (int)expected.Y, (int)expected.Width, (int)expected.Height);
|
|
|
+ var actualRounded = new Rect((int)actual.X, (int)actual.Y, (int)actual.Width, (int)actual.Height);
|
|
|
+ Assert.Equal(expectedRounded, actualRounded);
|
|
|
+ }
|
|
|
|
|
|
private class TestCanvas : Canvas
|
|
|
{
|