From 785713c9c085f99dcde140356bcdc52963cf3b09 Mon Sep 17 00:00:00 2001 From: Emil Sjolander Date: Wed, 1 Mar 2017 07:10:00 -0800 Subject: [PATCH] default root node to size of parent contraints Summary: This is a follow up on a recent change which made the constraints passed into conculateLayout describe the parent constraints and not the root node constraints. This broke some assumptions and was not very inuitive if no size was set on the root. Therefor this diff ensure that if the root node does not have any size set then it will adopt the size of the parent constraints. Reviewed By: dshahidehpour Differential Revision: D4634616 fbshipit-source-id: 089eb4313c5bb810a6ff56f158cd19cec71808ec --- yoga/Yoga.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/yoga/Yoga.c b/yoga/Yoga.c index f4de9b95..4bd7bc28 100644 --- a/yoga/Yoga.c +++ b/yoga/Yoga.c @@ -3251,7 +3251,7 @@ static void YGRoundToPixelGrid(const YGNodeRef node) { float fractialTop = fmodf(nodeTop, gPointScaleFactor); float roundedLeft = nodeLeft - fractialLeft; float roundedTop = nodeTop - fractialTop; - + // To do the actual rounding we check if leftover fraction is bigger or equal than half of the grid step if (fractialLeft >= gPointScaleFactor / 2.0) { roundedLeft += gPointScaleFactor; @@ -3263,13 +3263,13 @@ static void YGRoundToPixelGrid(const YGNodeRef node) { } node->layout.position[YGEdgeLeft] = roundedLeft; node->layout.position[YGEdgeTop] = roundedTop; - + // Now we round width and height in the same way accounting for fractial leftovers from rounding position const float adjustedWidth = fractialLeft + node->layout.dimensions[YGDimensionWidth]; const float adjustedHeight = fractialTop + node->layout.dimensions[YGDimensionHeight]; float roundedWidth = adjustedWidth - fmodf(adjustedWidth, gPointScaleFactor); float roundedHeight = adjustedHeight - fmodf(adjustedHeight, gPointScaleFactor); - + if (adjustedWidth - roundedWidth >= gPointScaleFactor / 2.0) { roundedWidth += gPointScaleFactor; } @@ -3307,6 +3307,9 @@ void YGNodeCalculateLayout(const YGNodeRef node, } else if (YGValueResolve(&node->style.maxDimensions[YGDimensionWidth], parentWidth) >= 0.0f) { width = YGValueResolve(&node->style.maxDimensions[YGDimensionWidth], parentWidth); widthMeasureMode = YGMeasureModeAtMost; + } else { + width = parentWidth; + widthMeasureMode = YGFloatIsUndefined(width) ? YGMeasureModeUndefined : YGMeasureModeExactly; } float height = YGUndefined; @@ -3319,6 +3322,9 @@ void YGNodeCalculateLayout(const YGNodeRef node, 0.0f) { height = YGValueResolve(&node->style.maxDimensions[YGDimensionHeight], parentHeight); heightMeasureMode = YGMeasureModeAtMost; + } else { + height = parentHeight; + heightMeasureMode = YGFloatIsUndefined(height) ? YGMeasureModeUndefined : YGMeasureModeExactly; } if (YGLayoutNodeInternal(node,