Fix min/max percentage constraints on measured nodes
Summary: Fix min/max percentage constraints on measured nodes. Currently we passed in the available size instead of the parent size. Fixes #611 Closes https://github.com/facebook/yoga/pull/649 Reviewed By: priteshrnandgaonkar Differential Revision: D6408019 Pulled By: emilsjolander fbshipit-source-id: 18be5056dbc0dc179970ec231ab8b4e2cdba65c5
This commit is contained in:
committed by
Facebook Github Bot
parent
2e468d9c8c
commit
ad1240e276
@@ -635,3 +635,56 @@ TEST(YogaTest, cant_call_negative_measure_horizontal) {
|
|||||||
YGNodeFreeRecursive(root);
|
YGNodeFreeRecursive(root);
|
||||||
YGConfigFree(config);
|
YGConfigFree(config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static YGSize _measure_90_10(YGNodeRef node,
|
||||||
|
float width,
|
||||||
|
YGMeasureMode widthMode,
|
||||||
|
float height,
|
||||||
|
YGMeasureMode heightMode) {
|
||||||
|
|
||||||
|
return YGSize{
|
||||||
|
.width = 90, .height = 10,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(YogaTest, percent_with_text_node) {
|
||||||
|
const YGConfigRef config = YGConfigNew();
|
||||||
|
|
||||||
|
const YGNodeRef root = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
|
||||||
|
YGNodeStyleSetJustifyContent(root, YGJustifySpaceBetween);
|
||||||
|
YGNodeStyleSetAlignItems(root, YGAlignCenter);
|
||||||
|
YGNodeStyleSetWidth(root, 100);
|
||||||
|
YGNodeStyleSetHeight(root, 80);
|
||||||
|
|
||||||
|
const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
|
||||||
|
YGNodeInsertChild(root, root_child0, 0);
|
||||||
|
|
||||||
|
const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
|
||||||
|
|
||||||
|
YGNodeSetMeasureFunc(root_child1, _measure_90_10);
|
||||||
|
YGNodeStyleSetMaxWidthPercent(root_child1, 50);
|
||||||
|
YGNodeStyleSetPaddingPercent(root_child1, YGEdgeTop, 50);
|
||||||
|
YGNodeInsertChild(root, root_child1, 1);
|
||||||
|
|
||||||
|
YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
|
||||||
|
ASSERT_FLOAT_EQ(100, YGNodeLayoutGetWidth(root));
|
||||||
|
ASSERT_FLOAT_EQ(80, YGNodeLayoutGetHeight(root));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(40, YGNodeLayoutGetTop(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetWidth(root_child0));
|
||||||
|
ASSERT_FLOAT_EQ(0, YGNodeLayoutGetHeight(root_child0));
|
||||||
|
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetLeft(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(15, YGNodeLayoutGetTop(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetWidth(root_child1));
|
||||||
|
ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child1));
|
||||||
|
|
||||||
|
YGNodeFreeRecursive(root);
|
||||||
|
|
||||||
|
YGConfigFree(config);
|
||||||
|
}
|
||||||
|
@@ -1592,8 +1592,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(const YGNodeRef node,
|
|||||||
widthMeasureMode == YGMeasureModeAtMost)
|
widthMeasureMode == YGMeasureModeAtMost)
|
||||||
? measuredSize.width + paddingAndBorderAxisRow
|
? measuredSize.width + paddingAndBorderAxisRow
|
||||||
: availableWidth - marginAxisRow,
|
: availableWidth - marginAxisRow,
|
||||||
availableWidth,
|
parentWidth,
|
||||||
availableWidth);
|
parentWidth);
|
||||||
node->layout.measuredDimensions[YGDimensionHeight] =
|
node->layout.measuredDimensions[YGDimensionHeight] =
|
||||||
YGNodeBoundAxis(node,
|
YGNodeBoundAxis(node,
|
||||||
YGFlexDirectionColumn,
|
YGFlexDirectionColumn,
|
||||||
@@ -1601,8 +1601,8 @@ static void YGNodeWithMeasureFuncSetMeasuredDimensions(const YGNodeRef node,
|
|||||||
heightMeasureMode == YGMeasureModeAtMost)
|
heightMeasureMode == YGMeasureModeAtMost)
|
||||||
? measuredSize.height + paddingAndBorderAxisColumn
|
? measuredSize.height + paddingAndBorderAxisColumn
|
||||||
: availableHeight - marginAxisColumn,
|
: availableHeight - marginAxisColumn,
|
||||||
availableHeight,
|
parentHeight,
|
||||||
availableWidth);
|
parentWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user