protected override void performLayout() { BoxConstraints constraints = this.constraints; float maxHeight = CupertinoSegmentedControlsUtils._kMinSegmentedControlHeight; float childWidth = constraints.minWidth / childCount; foreach (RenderBox child in getChildrenAsList()) { childWidth = Mathf.Max(childWidth, child.getMaxIntrinsicWidth(float.PositiveInfinity)); } childWidth = Mathf.Min(childWidth, constraints.maxWidth / childCount); RenderBox child1 = firstChild; while (child1 != null) { float boxHeight = child1.getMaxIntrinsicHeight(childWidth); maxHeight = Mathf.Max(maxHeight, boxHeight); child1 = childAfter(child1); } constraints.constrainHeight(maxHeight); BoxConstraints childConstraints = BoxConstraints.tightFor( width: childWidth, height: maxHeight ); child1 = firstChild; while (child1 != null) { child1.layout(childConstraints, parentUsesSize: true); child1 = childAfter(child1); } switch (textDirection) { case TextDirection.rtl: _layoutRects( childBefore, lastChild, firstChild ); break; case TextDirection.ltr: _layoutRects( childAfter, firstChild, lastChild ); break; } size = constraints.constrain(new Size(childWidth * childCount, maxHeight)); }
protected override void performLayout() { BoxConstraints constraints = this.constraints; float childWidth = (constraints.minWidth - totalSeparatorWidth) / childCount; float maxHeight = CupertinoSlidingSegmentedControlsUtils._kMinSegmentedControlHeight; foreach (RenderBox child1 in getChildrenAsList()) { childWidth = Mathf.Max(childWidth, child1.getMaxIntrinsicWidth(float.PositiveInfinity) + 2 * CupertinoSlidingSegmentedControlsUtils._kSegmentMinPadding); } childWidth = Mathf.Min( childWidth, (constraints.maxWidth - totalSeparatorWidth) / childCount ); RenderBox child = firstChild; while (child != null) { float boxHeight = child.getMaxIntrinsicHeight(childWidth); maxHeight = Mathf.Max(maxHeight, boxHeight); child = childAfter(child); } constraints.constrainHeight(maxHeight); BoxConstraints childConstraints = BoxConstraints.tightFor( width: childWidth, height: maxHeight ); // Layout children. child = firstChild; while (child != null) { child.layout(childConstraints, parentUsesSize: true); child = childAfter(child); } float start = 0; child = firstChild; while (child != null) { _SlidingSegmentedControlContainerBoxParentData childParentData = child.parentData as _SlidingSegmentedControlContainerBoxParentData; Offset childOffset = new Offset(start, 0); childParentData.offset = childOffset; start += child.size.width + CupertinoSlidingSegmentedControlsUtils._kSeparatorWidth + CupertinoSlidingSegmentedControlsUtils._kSeparatorInset.horizontal; child = childAfter(child); } size = constraints.constrain(new Size(childWidth * childCount + totalSeparatorWidth, maxHeight)); }
protected internal override float computeMaxIntrinsicHeight(float width) { RenderBox child = firstChild; float maxHeight = 0.0f; while (child != null) { _SegmentedControlContainerBoxParentData childParentData = child.parentData as _SegmentedControlContainerBoxParentData; float childHeight = child.getMaxIntrinsicHeight(width); maxHeight = Mathf.Max(maxHeight, childHeight); child = childParentData.nextSibling; } return(maxHeight); }
protected override float computeMinIntrinsicHeight(float width) { D.assert(this._children.Count == this.rows * this.columns); List <float> widths = this._computeColumnWidths(BoxConstraints.tightForFinite(width: width)); float rowTop = 0.0f; for (int y = 0; y < this.rows; y++) { float rowHeight = 0.0f; for (int x = 0; x < this.columns; x++) { int xy = x + y * this.columns; RenderBox child = this._children[xy]; if (child != null) { rowHeight = Mathf.Max(rowHeight, child.getMaxIntrinsicHeight(widths[x])); } } rowTop += rowHeight; } return(rowTop); }
static float _maxHeight(RenderBox box, float width) { return(box == null ? 0.0f : box.getMaxIntrinsicHeight(width)); }