Bladeren bron

Added rotate transform test.

Steven Kirk 5 jaren geleden
bovenliggende
commit
a0e8afe841
1 gewijzigde bestanden met toevoegingen van 36 en 1 verwijderingen
  1. 36 1
      tests/Avalonia.Layout.UnitTests/LayoutableTests_EffectiveViewportChanged.cs

+ 36 - 1
tests/Avalonia.Layout.UnitTests/LayoutableTests_EffectiveViewportChanged.cs

@@ -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
         {