Browse Source

Make LayoutManager pass new tests.

pull/1021/head
Steven Kirk 9 years ago
parent
commit
ac3ca7ca29
  1. 38
      src/Avalonia.Layout/LayoutManager.cs
  2. 31
      tests/Avalonia.Layout.UnitTests/LayoutManagerTests.cs

38
src/Avalonia.Layout/LayoutManager.cs

@ -124,21 +124,21 @@ namespace Avalonia.Layout
private void Measure(ILayoutable control)
{
var root = control as ILayoutRoot;
var parent = control.VisualParent as ILayoutable;
if (root != null)
{
root.Measure(root.MaxClientSize);
}
else if (parent != null)
if (control.VisualParent is ILayoutable parent)
{
Measure(parent);
}
if (!control.IsMeasureValid)
{
control.Measure(control.PreviousMeasure.Value);
if (control is ILayoutRoot root)
{
root.Measure(Size.Infinity);
}
else if (!control.IsMeasureValid && control.IsAttachedToVisualTree)
{
control.Measure(control.PreviousMeasure.Value);
}
}
_toMeasure.Remove(control);
@ -146,21 +146,21 @@ namespace Avalonia.Layout
private void Arrange(ILayoutable control)
{
var root = control as ILayoutRoot;
var parent = control.VisualParent as ILayoutable;
if (root != null)
{
root.Arrange(new Rect(root.DesiredSize));
}
else if (parent != null)
if (control.VisualParent is ILayoutable parent)
{
Arrange(parent);
}
if (control.PreviousArrange.HasValue)
if (!control.IsArrangeValid)
{
control.Arrange(control.PreviousArrange.Value);
if (control is ILayoutRoot root)
{
root.Arrange(new Rect(control.DesiredSize));
}
else if (!control.IsArrangeValid && control.IsAttachedToVisualTree)
{
control.Arrange(control.PreviousArrange.Value);
}
}
_toArrange.Remove(control);

31
tests/Avalonia.Layout.UnitTests/LayoutManagerTests.cs

@ -228,6 +228,37 @@ namespace Avalonia.Layout.UnitTests
}
}
[Fact]
public void Arranges_Root_With_DesiredSize()
{
var target = new LayoutManager();
using (Start(target))
{
var root = new LayoutTestRoot
{
Width = 100,
Height = 100,
};
var arrangeSize = default(Size);
root.DoArrangeOverride = (_, s) =>
{
arrangeSize = s;
return s;
};
target.ExecuteInitialLayoutPass(root);
Assert.Equal(new Size(100, 100), arrangeSize);
root.Width = 120;
target.ExecuteLayoutPass();
Assert.Equal(new Size(120, 100), arrangeSize);
}
}
[Fact]
public void Invalidating_Child_Remeasures_Parent()
{

Loading…
Cancel
Save