diff --git a/ReactCommon/yoga/yoga/Yoga.c b/ReactCommon/yoga/yoga/Yoga.c index 51a9287c5ea..ff944368bca 100644 --- a/ReactCommon/yoga/yoga/Yoga.c +++ b/ReactCommon/yoga/yoga/Yoga.c @@ -1471,6 +1471,14 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node, child->layout.measuredDimensions[dim[mainAxis]] - YGNodeTrailingBorder(node, mainAxis) - YGNodeTrailingPosition(child, mainAxis, width); + } else if (!YGNodeIsLeadingPosDefined(child, mainAxis) && + node->style.justifyContent == YGJustifyCenter) { + child->layout.position[leading[mainAxis]] = (node->layout.measuredDimensions[dim[mainAxis]] - + child->layout.measuredDimensions[dim[mainAxis]]) / 2.0f; + } else if (!YGNodeIsLeadingPosDefined(child, mainAxis) && + node->style.justifyContent == YGJustifyFlexEnd) { + child->layout.position[leading[mainAxis]] = (node->layout.measuredDimensions[dim[mainAxis]] - + child->layout.measuredDimensions[dim[mainAxis]]); } if (YGNodeIsTrailingPosDefined(child, crossAxis) && @@ -1479,6 +1487,14 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node, child->layout.measuredDimensions[dim[crossAxis]] - YGNodeTrailingBorder(node, crossAxis) - YGNodeTrailingPosition(child, crossAxis, width); + } else if (!YGNodeIsLeadingPosDefined(child, crossAxis) && + YGNodeAlignItem(node, child) == YGAlignCenter) { + child->layout.position[leading[crossAxis]] = (node->layout.measuredDimensions[dim[crossAxis]] - + child->layout.measuredDimensions[dim[crossAxis]]) / 2.0f; + } else if (!YGNodeIsLeadingPosDefined(child, crossAxis) && + YGNodeAlignItem(node, child) == YGAlignFlexEnd) { + child->layout.position[leading[crossAxis]] = (node->layout.measuredDimensions[dim[crossAxis]] - + child->layout.measuredDimensions[dim[crossAxis]]); } } @@ -2785,7 +2801,7 @@ static inline bool YGMeasureModeOldSizeIsUnspecifiedAndStillFits(YGMeasureMode s YGMeasureMode lastSizeMode, float lastComputedSize) { return sizeMode == YGMeasureModeAtMost && lastSizeMode == YGMeasureModeUndefined && - size >= lastComputedSize; + (size >= lastComputedSize || YGFloatsEqual(size, lastComputedSize)); } static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid(YGMeasureMode sizeMode, @@ -2794,7 +2810,7 @@ static inline bool YGMeasureModeNewMeasureSizeIsStricterAndStillValid(YGMeasureM float lastSize, float lastComputedSize) { return lastSizeMode == YGMeasureModeAtMost && sizeMode == YGMeasureModeAtMost && - lastSize > size && lastComputedSize <= size; + lastSize > size && (lastComputedSize <= size || YGFloatsEqual(size, lastComputedSize)); } bool YGNodeCanUseCachedMeasurement(const YGMeasureMode widthMode,