123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357 |
- using Avalonia.Controls.Shapes;
- using Avalonia.Media;
- using Avalonia.UnitTests;
- using Xunit;
- namespace Avalonia.Controls.UnitTests
- {
- public class LayoutTransformControlTests : ScopedTestBase
- {
- [Fact]
- public void Measure_On_Scale_x2_Is_Correct()
- {
- double scale = 2;
- TransformMeasureSizeTest(
- new Size(100, 50),
- new ScaleTransform() { ScaleX = scale, ScaleY = scale },
- new Size(200, 100));
- }
- [Fact]
- public void Measure_On_Scale_x0_5_Is_Correct()
- {
- double scale = 0.5;
- TransformMeasureSizeTest(
- new Size(100, 50),
- new ScaleTransform() { ScaleX = scale, ScaleY = scale },
- new Size(50, 25));
- }
- [Fact]
- public void Measure_On_Skew_X_axis_45_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 100),
- new SkewTransform() { AngleX = 45 },
- new Size(200, 100));
- }
- [Fact]
- public void Measure_On_Skew_Y_axis_45_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 100),
- new SkewTransform() { AngleY = 45 },
- new Size(100, 200));
- }
- [Fact]
- public void Measure_On_Skew_X_axis_minus_45_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 100),
- new SkewTransform() { AngleX = -45 },
- new Size(200, 100));
- }
- [Fact]
- public void Measure_On_Skew_Y_axis_minus_45_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 100),
- new SkewTransform() { AngleY = -45 },
- new Size(100, 200));
- }
- [Fact]
- public void Measure_On_Skew_0_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 100),
- new SkewTransform() { AngleX = 0, AngleY = 0 },
- new Size(100, 100));
- }
- [Fact]
- public void Measure_On_Rotate_90_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 90 },
- new Size(25, 100));
- }
- [Fact]
- public void Measure_On_Rotate_minus_90_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 25),
- new RotateTransform() { Angle = -90 },
- new Size(25, 100));
- }
- [Fact]
- public void Measure_On_Rotate_0_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 0 },
- new Size(100, 25));
- }
- [Fact]
- public void Measure_On_Rotate_180_degrees_Is_Correct()
- {
- TransformMeasureSizeTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 180 },
- new Size(100, 25));
- }
- [Fact]
- public void Bounds_On_Scale_x2_Are_correct()
- {
- double scale = 2;
- TransformRootBoundsTest(
- new Size(100, 50),
- new ScaleTransform() { ScaleX = scale, ScaleY = scale },
- new Rect(0, 0, 100, 50));
- }
- [Fact]
- public void Bounds_On_Scale_x0_5_Are_correct()
- {
- double scale = 0.5;
- TransformRootBoundsTest(
- new Size(100, 50),
- new ScaleTransform() { ScaleX = scale, ScaleY = scale },
- new Rect(0, 0, 100, 50));
- }
- [Fact]
- public void Bounds_On_Rotate_180_degrees_Are_correct()
- {
- TransformRootBoundsTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 180 },
- new Rect(100, 25, 100, 25));
- }
- [Fact]
- public void Bounds_On_Rotate_0_degrees_Are_correct()
- {
- TransformRootBoundsTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 0 },
- new Rect(0, 0, 100, 25));
- }
- [Fact]
- public void Bounds_On_Rotate_90_degrees_Are_correct()
- {
- TransformRootBoundsTest(
- new Size(100, 25),
- new RotateTransform() { Angle = 90 },
- new Rect(25, 0, 100, 25));
- }
- [Fact]
- public void Bounds_On_Rotate_minus_90_degrees_Are_correct()
- {
- TransformRootBoundsTest(
- new Size(100, 25),
- new RotateTransform() { Angle = -90 },
- new Rect(0, 100, 100, 25));
- }
- [Fact]
- public void Bounds_On_Transform_Applied_Then_Removed_Are_Correct()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- var control = CreateWithChildAndMeasureAndTransform(
- 100,
- 25,
- new RotateTransform { Angle = 90 });
- Assert.Equal(new Size(25, 100), control.DesiredSize);
- control.LayoutTransform = null;
- control.Measure(Size.Infinity);
- control.Arrange(new Rect(control.DesiredSize));
- Assert.Equal(new Size(100, 25), control.DesiredSize);
- }
- [Fact]
- public void Should_Generate_RotateTransform_90_degrees()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- 100,
- 25,
- new RotateTransform() { Angle = 90 });
- Assert.NotNull(lt.TransformRoot.RenderTransform);
- Matrix m = lt.TransformRoot.RenderTransform.Value;
- Matrix res = Matrix.CreateRotation(Matrix.ToRadians(90));
- Assert.Equal(m.M11, res.M11, 3);
- Assert.Equal(m.M12, res.M12, 3);
- Assert.Equal(m.M21, res.M21, 3);
- Assert.Equal(m.M22, res.M22, 3);
- Assert.Equal(m.M31, res.M31, 3);
- Assert.Equal(m.M32, res.M32, 3);
- }
- [Fact]
- public void Should_Generate_RotateTransform_minus_90_degrees()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- 100,
- 25,
- new RotateTransform() { Angle = -90 });
- Assert.NotNull(lt.TransformRoot.RenderTransform);
- var m = lt.TransformRoot.RenderTransform.Value;
- var res = Matrix.CreateRotation(Matrix.ToRadians(-90));
- Assert.Equal(m.M11, res.M11, 3);
- Assert.Equal(m.M12, res.M12, 3);
- Assert.Equal(m.M21, res.M21, 3);
- Assert.Equal(m.M22, res.M22, 3);
- Assert.Equal(m.M31, res.M31, 3);
- Assert.Equal(m.M32, res.M32, 3);
- }
- [Fact]
- public void Should_Generate_ScaleTransform_x2()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- 100,
- 50,
- new ScaleTransform() { ScaleX = 2, ScaleY = 2 });
- Assert.NotNull(lt.TransformRoot.RenderTransform);
- Matrix m = lt.TransformRoot.RenderTransform.Value;
- Matrix res = Matrix.CreateScale(2, 2);
- Assert.Equal(m.M11, res.M11, 3);
- Assert.Equal(m.M12, res.M12, 3);
- Assert.Equal(m.M21, res.M21, 3);
- Assert.Equal(m.M22, res.M22, 3);
- Assert.Equal(m.M31, res.M31, 3);
- Assert.Equal(m.M32, res.M32, 3);
- }
- [Fact]
- public void Should_Generate_SkewTransform_45_degrees()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- 100,
- 100,
- new SkewTransform() { AngleX = 45, AngleY = 45 });
- Assert.NotNull(lt.TransformRoot.RenderTransform);
- Matrix m = lt.TransformRoot.RenderTransform.Value;
- Matrix res = Matrix.CreateSkew(Matrix.ToRadians(45), Matrix.ToRadians(45));
- Assert.Equal(m.M11, res.M11, 3);
- Assert.Equal(m.M12, res.M12, 3);
- Assert.Equal(m.M21, res.M21, 3);
- Assert.Equal(m.M22, res.M22, 3);
- Assert.Equal(m.M31, res.M31, 3);
- Assert.Equal(m.M32, res.M32, 3);
- }
- [Fact]
- public void Should_Generate_SkewTransform_minus_45_degrees()
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- 100,
- 100,
- new SkewTransform() { AngleX = -45, AngleY = -45 });
- Assert.NotNull(lt.TransformRoot.RenderTransform);
- Matrix m = lt.TransformRoot.RenderTransform.Value;
- Matrix res = Matrix.CreateSkew(Matrix.ToRadians(-45), Matrix.ToRadians(-45));
- Assert.Equal(m.M11, res.M11, 3);
- Assert.Equal(m.M12, res.M12, 3);
- Assert.Equal(m.M21, res.M21, 3);
- Assert.Equal(m.M22, res.M22, 3);
- Assert.Equal(m.M31, res.M31, 3);
- Assert.Equal(m.M32, res.M32, 3);
- }
- private static void TransformMeasureSizeTest(Size size, Transform transform, Size expectedSize)
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(
- size.Width,
- size.Height,
- transform);
- Size outSize = lt.DesiredSize;
- Assert.Equal(outSize.Width, expectedSize.Width);
- Assert.Equal(outSize.Height, expectedSize.Height);
- }
- private static void TransformRootBoundsTest(Size size, Transform transform, Rect expectedBounds)
- {
- using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
- LayoutTransformControl lt = CreateWithChildAndMeasureAndTransform(size.Width, size.Height, transform);
- Rect outBounds = lt.TransformRoot.Bounds;
- Assert.Equal(outBounds.X, expectedBounds.X);
- Assert.Equal(outBounds.Y, expectedBounds.Y);
- Assert.Equal(outBounds.Width, expectedBounds.Width);
- Assert.Equal(outBounds.Height, expectedBounds.Height);
- }
- private static LayoutTransformControl CreateWithChildAndMeasureAndTransform(
- double width,
- double height,
- Transform transform)
- {
- var lt = new LayoutTransformControl()
- {
- LayoutTransform = transform
- };
- lt.Child = new Rectangle() { Width = width, Height = height };
- lt.Measure(Size.Infinity);
- lt.Arrange(new Rect(lt.DesiredSize));
- return lt;
- }
- }
- }
|