From f52d66c3111f2f5254f3c95fdb7332e8fc31d5e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20W=C3=B6hrl?= Date: Tue, 28 Feb 2017 06:57:55 -0800 Subject: [PATCH] Fix percentage in flexing parent Summary: If we don't measure exactly, percentage values aren't exactly either. Fix for #414. Closes https://github.com/facebook/yoga/pull/416 Closes https://github.com/facebook/yoga/pull/414 Reviewed By: astreet Differential Revision: D4604729 Pulled By: emilsjolander fbshipit-source-id: 66880230073209cbe89668b838c2a82e7f9b34df --- ReactCommon/yoga/yoga/Yoga.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/ReactCommon/yoga/yoga/Yoga.c b/ReactCommon/yoga/yoga/Yoga.c index 074fd01c2c5..a67b33d071d 100644 --- a/ReactCommon/yoga/yoga/Yoga.c +++ b/ReactCommon/yoga/yoga/Yoga.c @@ -2045,7 +2045,7 @@ static void YGNodelayoutImpl(const YGNodeRef node, } const bool flexBasisOverflows = - measureModeMainDim == YGMeasureModeUndefined ? false : totalFlexBasis > availableInnerMainDim; + measureModeMainDim == YGMeasureModeUndefined ? false : totalFlexBasis > availableInnerMainDim; if (isNodeFlexWrap && flexBasisOverflows && measureModeMainDim == YGMeasureModeAtMost) { measureModeMainDim = YGMeasureModeExactly; } @@ -2338,8 +2338,12 @@ static void YGNodelayoutImpl(const YGNodeRef node, childCrossSize = YGValueResolve(currentRelativeChild->resolvedDimensions[dim[crossAxis]], availableInnerCrossDim) + marginCross; - childCrossMeasureMode = - YGFloatIsUndefined(childCrossSize) ? YGMeasureModeUndefined : YGMeasureModeExactly; + const bool isLoosePercentageMeasurement = + currentRelativeChild->resolvedDimensions[dim[crossAxis]]->unit == YGUnitPercent && + measureModeCrossDim != YGMeasureModeExactly; + childCrossMeasureMode = YGFloatIsUndefined(childCrossSize) || isLoosePercentageMeasurement + ? YGMeasureModeUndefined + : YGMeasureModeExactly; } if (!YGFloatIsUndefined(currentRelativeChild->style.aspectRatio)) {