Dont constrain absolute children to zero sized parents
Summary: Absolute children should not be constraint to the size of their parent if the parent does not have a size as this was causes the layout of the child to be skipped. Reviewed By: gkassabli Differential Revision: D4453612 fbshipit-source-id: e8269521560d2f42b2d6f0f0ff264a1605a57d79
This commit is contained in:
committed by
Facebook Github Bot
parent
d391323129
commit
a2a84532ff
@@ -47,6 +47,27 @@ TEST(YogaTest, dont_measure_single_grow_shrink_child) {
|
||||
YGNodeFreeRecursive(root);
|
||||
}
|
||||
|
||||
TEST(YogaTest, measure_absolute_child_with_no_constraints) {
|
||||
const YGNodeRef root = YGNodeNew();
|
||||
|
||||
const YGNodeRef root_child0 = YGNodeNew();
|
||||
YGNodeInsertChild(root, root_child0, 0);
|
||||
|
||||
int measureCount = 0;
|
||||
|
||||
const YGNodeRef root_child0_child0 = YGNodeNew();
|
||||
YGNodeStyleSetPositionType(root_child0_child0, YGPositionTypeAbsolute);
|
||||
YGNodeSetContext(root_child0_child0, &measureCount);
|
||||
YGNodeSetMeasureFunc(root_child0_child0, _measure);
|
||||
YGNodeInsertChild(root_child0, root_child0_child0, 0);
|
||||
|
||||
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||
|
||||
ASSERT_EQ(1, measureCount);
|
||||
|
||||
YGNodeFreeRecursive(root);
|
||||
}
|
||||
|
||||
#if GTEST_HAS_DEATH_TEST
|
||||
TEST(YogaTest, cannot_add_child_to_node_with_measure_func) {
|
||||
const YGNodeRef root = YGNodeNew();
|
||||
|
@@ -1431,11 +1431,10 @@ static void YGNodeAbsoluteLayoutChild(const YGNodeRef node,
|
||||
childHeightMeasureMode =
|
||||
YGFloatIsUndefined(childHeight) ? YGMeasureModeUndefined : YGMeasureModeExactly;
|
||||
|
||||
// According to the spec, if the main size is not definite and the
|
||||
// child's inline axis is parallel to the main axis (i.e. it's
|
||||
// horizontal), the child should be sized using "UNDEFINED" in
|
||||
// the main size. Otherwise use "AT_MOST" in the cross axis.
|
||||
if (!isMainAxisRow && YGFloatIsUndefined(childWidth) && widthMode != YGMeasureModeUndefined) {
|
||||
// If the size of the parent is defined then try to constrain the absolute child to that size
|
||||
// as well. This allows text within the absolute child to wrap to the size of its parent.
|
||||
// This is the same behavior as many browsers implement.
|
||||
if (!isMainAxisRow && YGFloatIsUndefined(childWidth) && widthMode != YGMeasureModeUndefined && width > 0) {
|
||||
childWidth = width;
|
||||
childWidthMeasureMode = YGMeasureModeAtMost;
|
||||
}
|
||||
|
Reference in New Issue
Block a user