diff --git a/CSSLayout/CSSLayout.c b/CSSLayout/CSSLayout.c
index 699e62c2..bba34228 100644
--- a/CSSLayout/CSSLayout.c
+++ b/CSSLayout/CSSLayout.c
@@ -1544,9 +1544,10 @@ static void layoutNodeImpl(const CSSNodeRef node,
// If we are using "at most" rules in the main axis. Calculate the remaining space when
// constraint by the min size defined for the main axis.
- if (measureModeMainDim == CSSMeasureModeAtMost) {
+
+ if (measureModeMainDim == CSSMeasureModeAtMost && remainingFreeSpace > 0) {
if (!CSSValueIsUndefined(node->style.minDimensions[dim[mainAxis]]) && node->style.minDimensions[dim[mainAxis]] >= 0) {
- remainingFreeSpace = fmaxf(0, node->style.minDimensions[dim[mainAxis]] - (availableInnerMainDim - remainingFreeSpace));
+ remainingFreeSpace = fmax(0, node->style.minDimensions[dim[mainAxis]] - (availableInnerMainDim - remainingFreeSpace));
} else {
remainingFreeSpace = 0;
}
diff --git a/tests/CSSLayoutMinMaxDimensionTest.cpp b/tests/CSSLayoutMinMaxDimensionTest.cpp
index 72501e43..b58f22db 100644
--- a/tests/CSSLayoutMinMaxDimensionTest.cpp
+++ b/tests/CSSLayoutMinMaxDimensionTest.cpp
@@ -35,6 +35,12 @@
+
+
*
*/
@@ -290,3 +296,70 @@ TEST(CSSLayoutTest, align_items_min_max) {
CSSNodeFreeRecursive(root);
}
+
+TEST(CSSLayoutTest, justify_content_overflow_min_max) {
+ const CSSNodeRef root = CSSNodeNew();
+ CSSNodeStyleSetJustifyContent(root, CSSJustifyCenter);
+ CSSNodeStyleSetMinHeight(root, 100);
+ CSSNodeStyleSetMaxHeight(root, 110);
+
+ const CSSNodeRef root_child0 = CSSNodeNew();
+ CSSNodeStyleSetWidth(root_child0, 50);
+ CSSNodeStyleSetHeight(root_child0, 50);
+ CSSNodeInsertChild(root, root_child0, 0);
+
+ const CSSNodeRef root_child1 = CSSNodeNew();
+ CSSNodeStyleSetWidth(root_child1, 50);
+ CSSNodeStyleSetHeight(root_child1, 50);
+ CSSNodeInsertChild(root, root_child1, 1);
+
+ const CSSNodeRef root_child2 = CSSNodeNew();
+ CSSNodeStyleSetWidth(root_child2, 50);
+ CSSNodeStyleSetHeight(root_child2, 50);
+ CSSNodeInsertChild(root, root_child2, 2);
+ CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionLTR);
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root));
+ ASSERT_EQ(0, CSSNodeLayoutGetTop(root));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root));
+ ASSERT_EQ(110, CSSNodeLayoutGetHeight(root));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child0));
+ ASSERT_EQ(-20, CSSNodeLayoutGetTop(root_child0));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child0));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child0));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child1));
+ ASSERT_EQ(30, CSSNodeLayoutGetTop(root_child1));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child1));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child1));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child2));
+ ASSERT_EQ(80, CSSNodeLayoutGetTop(root_child2));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child2));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child2));
+
+ CSSNodeCalculateLayout(root, CSSUndefined, CSSUndefined, CSSDirectionRTL);
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root));
+ ASSERT_EQ(0, CSSNodeLayoutGetTop(root));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root));
+ ASSERT_EQ(110, CSSNodeLayoutGetHeight(root));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child0));
+ ASSERT_EQ(-20, CSSNodeLayoutGetTop(root_child0));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child0));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child0));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child1));
+ ASSERT_EQ(30, CSSNodeLayoutGetTop(root_child1));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child1));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child1));
+
+ ASSERT_EQ(0, CSSNodeLayoutGetLeft(root_child2));
+ ASSERT_EQ(80, CSSNodeLayoutGetTop(root_child2));
+ ASSERT_EQ(50, CSSNodeLayoutGetWidth(root_child2));
+ ASSERT_EQ(50, CSSNodeLayoutGetHeight(root_child2));
+
+ CSSNodeFreeRecursive(root);
+}