@@ -1557,6 +1557,39 @@ static void YGZeroOutLayoutRecursivly(const YGNodeRef node) {
1557
1557
}
1558
1558
}
1559
1559
1560
+ static float YGNodeCalculateAvailableInnerDim (
1561
+ const YGNodeRef node,
1562
+ YGFlexDirection axis,
1563
+ float availableDim,
1564
+ float parentDim) {
1565
+ YGFlexDirection direction =
1566
+ YGFlexDirectionIsRow (axis) ? YGFlexDirectionRow : YGFlexDirectionColumn;
1567
+ YGDimension dimension =
1568
+ YGFlexDirectionIsRow (axis) ? YGDimensionWidth : YGDimensionHeight;
1569
+
1570
+ const float margin = YGNodeMarginForAxis (node, direction, parentDim);
1571
+ const float paddingAndBorder =
1572
+ YGNodePaddingAndBorderForAxis (node, direction, parentDim);
1573
+
1574
+ float availableInnerDim = availableDim - margin - paddingAndBorder;
1575
+ // Max dimension overrides predefined dimension value; Min dimension in turn
1576
+ // overrides both of the above
1577
+ if (!YGFloatIsUndefined (availableInnerDim)) {
1578
+ // We want to make sure our available height does not violate min and max
1579
+ // constraints
1580
+ const float minInnerDim =
1581
+ YGResolveValue (node->getStyle ().minDimensions [dimension], parentDim) -
1582
+ paddingAndBorder;
1583
+ const float maxInnerDim =
1584
+ YGResolveValue (node->getStyle ().maxDimensions [dimension], parentDim) -
1585
+ paddingAndBorder;
1586
+ availableInnerDim =
1587
+ fmaxf (fminf (availableInnerDim, maxInnerDim), minInnerDim);
1588
+ }
1589
+
1590
+ return availableInnerDim;
1591
+ }
1592
+
1560
1593
//
1561
1594
// This is the main routine that implements a subset of the flexbox layout
1562
1595
// algorithm
@@ -1775,7 +1808,6 @@ static void YGNodelayoutImpl(const YGNodeRef node,
1775
1808
const float marginAxisRow = YGNodeMarginForAxis (node, YGFlexDirectionRow, parentWidth);
1776
1809
const float marginAxisColumn = YGNodeMarginForAxis (node, YGFlexDirectionColumn, parentWidth);
1777
1810
1778
- // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS
1779
1811
const float minInnerWidth =
1780
1812
YGResolveValue (
1781
1813
node->getStyle ().minDimensions [YGDimensionWidth], parentWidth) -
@@ -1795,19 +1827,12 @@ static void YGNodelayoutImpl(const YGNodeRef node,
1795
1827
const float minInnerMainDim = isMainAxisRow ? minInnerWidth : minInnerHeight;
1796
1828
const float maxInnerMainDim = isMainAxisRow ? maxInnerWidth : maxInnerHeight;
1797
1829
1798
- // Max dimension overrides predefined dimension value; Min dimension in turn overrides both of the
1799
- // above
1800
- float availableInnerWidth = availableWidth - marginAxisRow - paddingAndBorderAxisRow;
1801
- if (!YGFloatIsUndefined (availableInnerWidth)) {
1802
- // We want to make sure our available width does not violate min and max constraints
1803
- availableInnerWidth = fmaxf (fminf (availableInnerWidth, maxInnerWidth), minInnerWidth);
1804
- }
1830
+ // STEP 2: DETERMINE AVAILABLE SIZE IN MAIN AND CROSS DIRECTIONS
1805
1831
1806
- float availableInnerHeight = availableHeight - marginAxisColumn - paddingAndBorderAxisColumn;
1807
- if (!YGFloatIsUndefined (availableInnerHeight)) {
1808
- // We want to make sure our available height does not violate min and max constraints
1809
- availableInnerHeight = fmaxf (fminf (availableInnerHeight, maxInnerHeight), minInnerHeight);
1810
- }
1832
+ float availableInnerWidth = YGNodeCalculateAvailableInnerDim (
1833
+ node, YGFlexDirectionRow, availableWidth, parentWidth);
1834
+ float availableInnerHeight = YGNodeCalculateAvailableInnerDim (
1835
+ node, YGFlexDirectionColumn, availableHeight, parentHeight);
1811
1836
1812
1837
float availableInnerMainDim = isMainAxisRow ? availableInnerWidth : availableInnerHeight;
1813
1838
const float availableInnerCrossDim = isMainAxisRow ? availableInnerHeight : availableInnerWidth;
0 commit comments