public void Dock(Margins margins, Rect expectedRect) { var sut = new LeftDocker(new Size(100, 50)); var actualRect = sut.GetDockingRect(_layoutable.DesiredSize, margins, new Alignments(Alignment.Middle, Alignment.Stretch)); Assert.Equal(expectedRect, actualRect); }
public Size ArrangeAndGetUsedSize(Size availableSize, IEnumerable <IControl> children) { var leftArranger = new LeftDocker(availableSize); var rightArranger = new RightDocker(availableSize); var topArranger = new LeftDocker(availableSize.Swap()); var bottomArranger = new RightDocker(availableSize.Swap()); UsedMargin = new Margin(); foreach (var control in children) { Rect dockedRect; var dock = control.GetValue(DockProperty); switch (dock) { case Dock.Left: dockedRect = leftArranger.GetDockedRect(control.DesiredSize, UsedMargin, control.GetAlignments()); break; case Dock.Top: UsedMargin.Swap(); dockedRect = topArranger.GetDockedRect(control.DesiredSize.Swap(), UsedMargin, control.GetAlignments().Swap()).Swap(); UsedMargin.Swap(); break; case Dock.Right: dockedRect = rightArranger.GetDockedRect(control.DesiredSize, UsedMargin, control.GetAlignments()); break; case Dock.Bottom: UsedMargin.Swap(); dockedRect = bottomArranger.GetDockedRect(control.DesiredSize.Swap(), UsedMargin, control.GetAlignments().Swap()).Swap(); UsedMargin.Swap(); break; default: throw new InvalidOperationException($"Invalid dock value {dock}"); } control.Arrange(dockedRect); } return(availableSize); }