Measure nodes which have margin: auto and align-item: stretch

Summary:
If you have a measurable node and set ```marign-left: auto``` + ```align-item:stretch``` on it, it won't get measured and they get a width/height of ```-(nan)```. This change fixes that behaviour. Fixes #644.
Closes https://github.com/facebook/yoga/pull/645

Differential Revision: D6413512

Pulled By: emilsjolander

fbshipit-source-id: 755febeb33bb0d4520ca6b3c28d56ac333e4a14d
This commit is contained in:
Lukas Wöhrl 2017-11-27 05:29:15 -08:00 committed by Facebook Github Bot
parent 1050e0b476
commit 5f99b1a55f
1 changed files with 6 additions and 2 deletions

View File

@ -2327,7 +2327,9 @@ static void YGNodelayoutImpl(const YGNodeRef node,
availableInnerCrossDim) && availableInnerCrossDim) &&
measureModeCrossDim == YGMeasureModeExactly && measureModeCrossDim == YGMeasureModeExactly &&
!(isNodeFlexWrap && flexBasisOverflows) && !(isNodeFlexWrap && flexBasisOverflows) &&
YGNodeAlignItem(node, currentRelativeChild) == YGAlignStretch) { YGNodeAlignItem(node, currentRelativeChild) == YGAlignStretch &&
YGMarginLeadingValue(currentRelativeChild, crossAxis)->unit != YGUnitAuto &&
YGMarginTrailingValue(currentRelativeChild, crossAxis)->unit != YGUnitAuto) {
childCrossSize = availableInnerCrossDim; childCrossSize = availableInnerCrossDim;
childCrossMeasureMode = YGMeasureModeExactly; childCrossMeasureMode = YGMeasureModeExactly;
} else if (!YGNodeIsStyleDimDefined(currentRelativeChild, } else if (!YGNodeIsStyleDimDefined(currentRelativeChild,
@ -2363,7 +2365,9 @@ static void YGNodelayoutImpl(const YGNodeRef node,
const bool requiresStretchLayout = const bool requiresStretchLayout =
!YGNodeIsStyleDimDefined(currentRelativeChild, crossAxis, availableInnerCrossDim) && !YGNodeIsStyleDimDefined(currentRelativeChild, crossAxis, availableInnerCrossDim) &&
YGNodeAlignItem(node, currentRelativeChild) == YGAlignStretch; YGNodeAlignItem(node, currentRelativeChild) == YGAlignStretch &&
YGMarginLeadingValue(currentRelativeChild, crossAxis)->unit != YGUnitAuto &&
YGMarginTrailingValue(currentRelativeChild, crossAxis)->unit != YGUnitAuto;
const float childWidth = isMainAxisRow ? childMainSize : childCrossSize; const float childWidth = isMainAxisRow ? childMainSize : childCrossSize;
const float childHeight = !isMainAxisRow ? childMainSize : childCrossSize; const float childHeight = !isMainAxisRow ? childMainSize : childCrossSize;