From 36607d34575c66123f0d4c7d9a5ebd993b351a1e Mon Sep 17 00:00:00 2001 From: shiyizju Date: Wed, 30 Jan 2019 17:44:23 +0800 Subject: [PATCH] minus total outer flex basis for available width or height --- yoga/Yoga.cpp | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index 6d146c30..90a33dac 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -1937,6 +1937,20 @@ static void YGNodeComputeFlexBasisForChildren( } for (auto child : children) { + + float availableWidthForChild = availableInnerWidth; + float availableHeightForChild = availableInnerHeight; + + if (YGFlexDirectionIsRow(mainAxis)) { + if (!YGFloatIsUndefined(availableInnerWidth)) { + availableWidthForChild -= totalOuterFlexBasis; + } + } else { + if (!YGFloatIsUndefined(availableInnerHeight)) { + availableHeightForChild -= totalOuterFlexBasis; + } + } + child->resolveDimension(); if (child->getStyle().display == YGDisplayNone) { YGZeroOutLayoutRecursivly(child); @@ -1948,11 +1962,11 @@ static void YGNodeComputeFlexBasisForChildren( // Set the initial position (relative to the owner). const YGDirection childDirection = child->resolveDirection(direction); const float mainDim = YGFlexDirectionIsRow(mainAxis) - ? availableInnerWidth - : availableInnerHeight; + ? availableWidthForChild + : availableHeightForChild; const float crossDim = YGFlexDirectionIsRow(mainAxis) - ? availableInnerHeight - : availableInnerWidth; + ? availableHeightForChild + : availableWidthForChild; child->setPosition( childDirection, mainDim, crossDim, availableInnerWidth); } @@ -1967,9 +1981,9 @@ static void YGNodeComputeFlexBasisForChildren( YGNodeComputeFlexBasisForChild( node, child, - availableInnerWidth, + availableWidthForChild, widthMeasureMode, - availableInnerHeight, + availableHeightForChild, availableInnerWidth, availableInnerHeight, heightMeasureMode,