public double _getIntrinsicSize( Axis sizingDirection, double extent, _ChildSizingFunction childSize ) { if (this._direction == sizingDirection) { double totalFlex = 0.0; double inflexibleSpace = 0.0; double maxFlexFractionSoFar = 0.0; RenderBox child = this.firstChild; while (child != null) { int flex = this._getFlex(child); totalFlex += flex; if (flex > 0) { double flexFraction = childSize(child, extent) / this._getFlex(child); maxFlexFractionSoFar = Math.Max(maxFlexFractionSoFar, flexFraction); } else { inflexibleSpace += childSize(child, extent); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } return(maxFlexFractionSoFar * totalFlex + inflexibleSpace); } else { double availableMainSpace = extent; int totalFlex = 0; double inflexibleSpace = 0.0; double maxCrossSize = 0.0; RenderBox child = this.firstChild; while (child != null) { int flex = this._getFlex(child); totalFlex += flex; if (flex == 0) { double mainSize = 0.0; double crossSize = 0.0; switch (this._direction) { case Axis.horizontal: mainSize = child.getMaxIntrinsicWidth(double.PositiveInfinity); crossSize = childSize(child, mainSize); break; case Axis.vertical: mainSize = child.getMaxIntrinsicHeight(double.PositiveInfinity); crossSize = childSize(child, mainSize); break; } inflexibleSpace += mainSize; maxCrossSize = Math.Max(maxCrossSize, crossSize); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } double spacePerFlex = Math.Max(0.0, (availableMainSpace - inflexibleSpace) / totalFlex); child = this.firstChild; while (child != null) { int flex = this._getFlex(child); if (flex > 0) { maxCrossSize = Math.Max(maxCrossSize, childSize(child, spacePerFlex * flex)); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } return(maxCrossSize); } }
public float _getIntrinsicSize( Axis sizingDirection, float extent, _ChildSizingFunction childSize ) { if (_direction == sizingDirection) { float totalFlex = 0.0f; float inflexibleSpace = 0.0f; float maxFlexFractionSoFar = 0.0f; RenderBox child = firstChild; while (child != null) { int flex = _getFlex(child); totalFlex += flex; if (flex > 0) { float flexFraction = childSize(child, extent) / _getFlex(child); maxFlexFractionSoFar = Mathf.Max(maxFlexFractionSoFar, flexFraction); } else { inflexibleSpace += childSize(child, extent); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } return(maxFlexFractionSoFar * totalFlex + inflexibleSpace); } else { float? availableMainSpace = extent; int totalFlex = 0; float inflexibleSpace = 0.0f; float maxCrossSize = 0.0f; RenderBox child = firstChild; while (child != null) { int flex = _getFlex(child); totalFlex += flex; if (flex == 0) { float mainSize = 0.0f; float crossSize = 0.0f; switch (_direction) { case Axis.horizontal: mainSize = child.getMaxIntrinsicWidth(float.PositiveInfinity); crossSize = childSize(child, mainSize); break; case Axis.vertical: mainSize = child.getMaxIntrinsicHeight(float.PositiveInfinity); crossSize = childSize(child, mainSize); break; } inflexibleSpace += mainSize; maxCrossSize = Mathf.Max(maxCrossSize, crossSize); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } float spacePerFlex = Mathf.Max(0.0f, ((availableMainSpace - inflexibleSpace) / totalFlex) ?? 0.0f); child = firstChild; while (child != null) { int flex = _getFlex(child); if (flex > 0) { maxCrossSize = Mathf.Max(maxCrossSize, childSize(child, spacePerFlex * flex)); } var childParentData = (FlexParentData)child.parentData; child = childParentData.nextSibling; } return(maxCrossSize); } }