Fix absolute position if align-item or justify-content is center or flex-end
Summary: Fix #310 (```center```) additionally fixes if ```flex-end``` is set. Closes https://github.com/facebook/yoga/pull/349 Reviewed By: dshahidehpour Differential Revision: D4458528 Pulled By: emilsjolander fbshipit-source-id: f073c80bfc3ea6675cb95b00283074d10e91a042
This commit is contained in:
parent
8b4272b2fd
commit
48e346193a
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue