public void RelativePositionRespectsPadding(double left, double top, double right, double bottom, double expectedX, double expectedY) { double width = 20; double height = 20; double propX = 0.5; double propY = 0.5; var abs = CreateTestLayout(); var padding = new Thickness(left, top, right, bottom); abs.Padding.Returns(padding); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(propX, propY, width, height); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.PositionProportional); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); var expectedRectangle = new Rectangle(expectedX, expectedY, width, height); child.Received().Arrange(Arg.Is(expectedRectangle)); }
public void RelativePositionRelativeSize(double propX, double propY, double propHeight, double propWidth) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(propX, propY, propWidth, propHeight); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.All); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); double expectedWidth = 100 * propWidth; double expectedHeight = 100 * propHeight; double expectedX = (100 - expectedWidth) * propX; double expectedY = (100 - expectedHeight) * propY; var expectedRectangle = new Rectangle(expectedX, expectedY, expectedWidth, expectedHeight); child.Received().Arrange(Arg.Is(expectedRectangle)); }
public void ArrangeAccountsForFill() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(0, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); var layoutManager = new AbsoluteLayoutManager(abs); _ = layoutManager.Measure(double.PositiveInfinity, double.PositiveInfinity); var arrangedWidth = 1000; var arrangedHeight = 1000; var target = new Rectangle(Point.Zero, new Size(arrangedWidth, arrangedHeight)); var actual = layoutManager.ArrangeChildren(target); // Since we're arranging in a space larger than needed and the layout is set to Fill in both directions, // we expect the returned actual arrangement size to be as large as the target space Assert.Equal(arrangedWidth, actual.Width); Assert.Equal(arrangedHeight, actual.Height); }
Size MeasureAndArrange(IAbsoluteLayout absoluteLayout, double widthConstraint = double.PositiveInfinity, double heightConstraint = double.PositiveInfinity, double left = 0, double top = 0) { var manager = new AbsoluteLayoutManager(absoluteLayout); var measuredSize = manager.Measure(widthConstraint, heightConstraint); manager.ArrangeChildren(new Rectangle(new Point(left, top), measuredSize)); return(measuredSize); }
public void RtlShouldHaveFirstItemOnTheRight() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rect(10, 0, 100, 100); SetLayoutBounds(abs, child, childBounds); abs.FlowDirection.Returns(FlowDirection.RightToLeft); var manager = new AbsoluteLayoutManager(abs); var measuredSize = manager.Measure(double.PositiveInfinity, 100); manager.ArrangeChildren(new Rect(Point.Zero, measuredSize)); // We expect that the view should be arranged on the right var expectedRectangle = new Rect(0, 0, 100, 100); abs[0].Received().Arrange(Arg.Is(expectedRectangle)); }
public void AbsolutePositionRelativeSize() { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rectangle(10, 20, 0.4, 0.5); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.SizeProportional); var manager = new AbsoluteLayoutManager(abs); var measure = manager.Measure(100, 100); manager.ArrangeChildren(new Rectangle(0, 0, 100, 100)); var expectedMeasure = new Size(10 + 40, 20 + 50); Assert.Equal(expectedMeasure, measure); child.Received().Arrange(Arg.Is <Rectangle>(r => r.X == 10 && r.Y == 20 && r.Width == 40 && r.Height == 50)); }
public void RelativePositionAbsoluteSize(double width, double height, double propX, double propY) { var abs = CreateTestLayout(); var child = CreateTestView(); SubstituteChildren(abs, child); var childBounds = new Rect(propX, propY, width, height); SetLayoutBounds(abs, child, childBounds); SetLayoutFlags(abs, child, AbsoluteLayoutFlags.PositionProportional); var manager = new AbsoluteLayoutManager(abs); manager.Measure(100, 100); manager.ArrangeChildren(new Rect(0, 0, 100, 100)); double expectedX = (100 - width) * propX; double expectedY = (100 - height) * propY; var expectedRectangle = new Rect(expectedX, expectedY, width, height); child.Received().Arrange(Arg.Is(expectedRectangle)); }