diff --git a/gentest/fixtures/YGAlignContentTest.html b/gentest/fixtures/YGAlignContentTest.html
index 3cecdf8d54..082ce2c685 100644
--- a/gentest/fixtures/YGAlignContentTest.html
+++ b/gentest/fixtures/YGAlignContentTest.html
@@ -147,4 +147,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tests/YGAlignContentTest.cpp b/tests/YGAlignContentTest.cpp
index 1bb3dce5ba..40393839af 100644
--- a/tests/YGAlignContentTest.cpp
+++ b/tests/YGAlignContentTest.cpp
@@ -4,7 +4,7 @@
* This source code is licensed under the MIT license found in the LICENSE
* file in the root directory of this source tree.
*/
-// @Generated by gentest/gentest.rb from
+// @Generated by gentest/gentest.rb from
// gentest/fixtures/YGAlignContentTest.html
#include
@@ -1876,3 +1876,225 @@ TEST(YogaTest, align_content_stretch_is_not_overriding_align_items) {
YGConfigFree(config);
}
+
+TEST(YogaTest, align_content_space_around_and_align_items_flex_end_with_flex_wrap) {
+ const YGConfigRef config = YGConfigNew();
+
+ const YGNodeRef root = YGNodeNewWithConfig(config);
+ YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
+ YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);
+ YGNodeStyleSetAlignItems(root, YGAlignFlexEnd);
+ YGNodeStyleSetFlexWrap(root, YGWrapWrap);
+ YGNodeStyleSetWidth(root, 300);
+ YGNodeStyleSetHeight(root, 300);
+
+ const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child0, 150);
+ YGNodeStyleSetHeight(root_child0, 50);
+ YGNodeInsertChild(root, root_child0, 0);
+
+ const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child1, 120);
+ YGNodeStyleSetHeight(root_child1, 100);
+ YGNodeInsertChild(root, root_child1, 1);
+
+ const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child2, 120);
+ YGNodeStyleSetHeight(root_child2, 50);
+ YGNodeInsertChild(root, root_child2, 2);
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(88, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeFreeRecursive(root);
+
+ YGConfigFree(config);
+}
+
+TEST(YogaTest, align_content_space_around_and_align_items_center_with_flex_wrap) {
+ const YGConfigRef config = YGConfigNew();
+
+ const YGNodeRef root = YGNodeNewWithConfig(config);
+ YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
+ YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);
+ YGNodeStyleSetAlignItems(root, YGAlignCenter);
+ YGNodeStyleSetFlexWrap(root, YGWrapWrap);
+ YGNodeStyleSetWidth(root, 300);
+ YGNodeStyleSetHeight(root, 300);
+
+ const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child0, 150);
+ YGNodeStyleSetHeight(root_child0, 50);
+ YGNodeInsertChild(root, root_child0, 0);
+
+ const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child1, 120);
+ YGNodeStyleSetHeight(root_child1, 100);
+ YGNodeInsertChild(root, root_child1, 1);
+
+ const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child2, 120);
+ YGNodeStyleSetHeight(root_child2, 50);
+ YGNodeInsertChild(root, root_child2, 2);
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(63, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(63, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeFreeRecursive(root);
+
+ YGConfigFree(config);
+}
+
+TEST(YogaTest, align_content_space_around_and_align_items_flex_start_with_flex_wrap) {
+ const YGConfigRef config = YGConfigNew();
+
+ const YGNodeRef root = YGNodeNewWithConfig(config);
+ YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow);
+ YGNodeStyleSetAlignContent(root, YGAlignSpaceAround);
+ YGNodeStyleSetAlignItems(root, YGAlignFlexStart);
+ YGNodeStyleSetFlexWrap(root, YGWrapWrap);
+ YGNodeStyleSetWidth(root, 300);
+ YGNodeStyleSetHeight(root, 300);
+
+ const YGNodeRef root_child0 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child0, 150);
+ YGNodeStyleSetHeight(root_child0, 50);
+ YGNodeInsertChild(root, root_child0, 0);
+
+ const YGNodeRef root_child1 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child1, 120);
+ YGNodeStyleSetHeight(root_child1, 100);
+ YGNodeInsertChild(root, root_child1, 1);
+
+ const YGNodeRef root_child2 = YGNodeNewWithConfig(config);
+ YGNodeStyleSetWidth(root_child2, 120);
+ YGNodeStyleSetHeight(root_child2, 50);
+ YGNodeInsertChild(root, root_child2, 2);
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionLTR);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeCalculateLayout(root, YGUndefined, YGUndefined, YGDirectionRTL);
+
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetLeft(root));
+ ASSERT_FLOAT_EQ(0, YGNodeLayoutGetTop(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetWidth(root));
+ ASSERT_FLOAT_EQ(300, YGNodeLayoutGetHeight(root));
+
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetLeft(root_child0));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child0));
+ ASSERT_FLOAT_EQ(150, YGNodeLayoutGetWidth(root_child0));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child0));
+
+ ASSERT_FLOAT_EQ(30, YGNodeLayoutGetLeft(root_child1));
+ ASSERT_FLOAT_EQ(38, YGNodeLayoutGetTop(root_child1));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child1));
+ ASSERT_FLOAT_EQ(100, YGNodeLayoutGetHeight(root_child1));
+
+ ASSERT_FLOAT_EQ(180, YGNodeLayoutGetLeft(root_child2));
+ ASSERT_FLOAT_EQ(213, YGNodeLayoutGetTop(root_child2));
+ ASSERT_FLOAT_EQ(120, YGNodeLayoutGetWidth(root_child2));
+ ASSERT_FLOAT_EQ(50, YGNodeLayoutGetHeight(root_child2));
+
+ YGNodeFreeRecursive(root);
+
+ YGConfigFree(config);
+}
diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp
index 33f70e8292..2b0835e6e2 100644
--- a/yoga/Yoga.cpp
+++ b/yoga/Yoga.cpp
@@ -3237,9 +3237,7 @@ static void YGNodelayoutImpl(
case YGAlignSpaceAround:
if (availableInnerCrossDim > totalLineCrossDim) {
currentLead += remainingAlignContentDim / (2 * lineCount);
- if (lineCount > 1) {
- crossDimLead = remainingAlignContentDim / lineCount;
- }
+ crossDimLead = remainingAlignContentDim / lineCount;
} else {
currentLead += remainingAlignContentDim / 2;
}
@@ -3303,7 +3301,8 @@ static void YGNodelayoutImpl(
}
}
endIndex = ii;
- lineHeight += crossDimLead;
+
+ const float lineHeightWithCrossDimLead = lineHeight + crossDimLead;
if (performLayout) {
for (ii = startIndex; ii < endIndex; ii++) {
@@ -3355,14 +3354,14 @@ static void YGNodelayoutImpl(
.measuredDimensions[YGDimensionWidth] +
child->getMarginForAxis(mainAxis, availableInnerWidth)
.unwrap())
- : lineHeight;
+ : lineHeightWithCrossDimLead;
const float childHeight = !isMainAxisRow
? (child->getLayout()
.measuredDimensions[YGDimensionHeight] +
child->getMarginForAxis(crossAxis, availableInnerWidth)
.unwrap())
- : lineHeight;
+ : lineHeightWithCrossDimLead;
if (!(YGFloatsEqual(
childWidth,
@@ -3412,7 +3411,7 @@ static void YGNodelayoutImpl(
}
}
}
- currentLead += lineHeight;
+ currentLead += lineHeightWithCrossDimLead;
}
}