|
@@ -36,7 +36,10 @@ namespace Avalonia.Controls
|
|
|
foreach (Layoutable child in Children)
|
|
|
{
|
|
|
if (child == null)
|
|
|
+ {
|
|
|
continue;
|
|
|
+ }
|
|
|
+
|
|
|
var node = _childGraph.AddNode(child);
|
|
|
|
|
|
node.AlignLeftWithNode = _childGraph.AddLink(node, GetDependencyElement(AlignLeftWithProperty, child));
|
|
@@ -51,17 +54,18 @@ namespace Avalonia.Controls
|
|
|
|
|
|
node.AlignHorizontalCenterWith = _childGraph.AddLink(node, GetDependencyElement(AlignHorizontalCenterWithProperty, child));
|
|
|
node.AlignVerticalCenterWith = _childGraph.AddLink(node, GetDependencyElement(AlignVerticalCenterWithProperty, child));
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
_childGraph.Measure(availableSize);
|
|
|
|
|
|
_childGraph.Reset(false);
|
|
|
- var calcWidth = Width.IsNaN() && HorizontalAlignment != HorizontalAlignment.Stretch;
|
|
|
- var calcHeight = Height.IsNaN() && VerticalAlignment != VerticalAlignment.Stretch;
|
|
|
+ var calcWidth = Width.IsNaN() && (HorizontalAlignment != HorizontalAlignment.Stretch);
|
|
|
+ var calcHeight = Height.IsNaN() && (VerticalAlignment != VerticalAlignment.Stretch);
|
|
|
|
|
|
var boundingSize = _childGraph.GetBoundingSize(calcWidth, calcHeight);
|
|
|
_childGraph.Reset();
|
|
|
_childGraph.Measure(boundingSize);
|
|
|
+
|
|
|
return boundingSize;
|
|
|
}
|
|
|
|
|
@@ -171,6 +175,7 @@ namespace Avalonia.Controls
|
|
|
prevSize = prevSize.WithWidth(prevSize.Width + prevNode.OriginDesiredSize.Width);
|
|
|
prevNode.HorizontalOffsetFlag = true;
|
|
|
}
|
|
|
+
|
|
|
if (node.VerticalOffsetFlag)
|
|
|
{
|
|
|
prevNode.VerticalOffsetFlag = true;
|
|
@@ -186,6 +191,7 @@ namespace Avalonia.Controls
|
|
|
prevSize = prevSize.WithHeight(prevSize.Height + node.OriginDesiredSize.Height);
|
|
|
prevNode.VerticalOffsetFlag = true;
|
|
|
}
|
|
|
+
|
|
|
if (node.HorizontalOffsetFlag)
|
|
|
{
|
|
|
prevNode.HorizontalOffsetFlag = true;
|
|
@@ -269,16 +275,16 @@ namespace Avalonia.Controls
|
|
|
MeasureChild(node);
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (node.OutgoingNodes.All(item => item.Measured))
|
|
|
{
|
|
|
MeasureChild(node);
|
|
|
continue;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (!set.Add(node.Element))
|
|
|
throw new Exception("RelativePanel error: Circular dependency detected. Layout could not complete.");
|
|
|
-
|
|
|
+
|
|
|
Measure(node.OutgoingNodes, set);
|
|
|
|
|
|
if (!node.Measured)
|
|
@@ -507,8 +513,11 @@ namespace Avalonia.Controls
|
|
|
boundingSize = boundingSize.WithHeight(Math.Max(boundingSize.Height, size.Height));
|
|
|
}
|
|
|
|
|
|
- boundingSize = boundingSize.WithWidth(calcWidth ? boundingSize.Width : AvailableSize.Width);
|
|
|
- boundingSize = boundingSize.WithHeight(calcHeight ? boundingSize.Height : AvailableSize.Height);
|
|
|
+ var availableWidth = double.IsInfinity(AvailableSize.Width) ? boundingSize.Width : AvailableSize.Width;
|
|
|
+ var availableHeight = double.IsInfinity(AvailableSize.Height) ? boundingSize.Height : AvailableSize.Height;
|
|
|
+
|
|
|
+ boundingSize = boundingSize.WithWidth(calcWidth ? boundingSize.Width : availableWidth);
|
|
|
+ boundingSize = boundingSize.WithHeight(calcHeight ? boundingSize.Height : availableHeight);
|
|
|
return boundingSize;
|
|
|
}
|
|
|
}
|