diff --git a/tests/YGZeroOutLayoutRecursivlyTest.cpp b/tests/YGZeroOutLayoutRecursivlyTest.cpp new file mode 100644 index 0000000000..9d38a3a34a --- /dev/null +++ b/tests/YGZeroOutLayoutRecursivlyTest.cpp @@ -0,0 +1,39 @@ +/** + * Copyright (c) 2014-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +#include +#include + +TEST(YogaTest, zero_out_layout) { + const YGNodeRef root = YGNodeNew(); + YGNodeStyleSetFlexDirection(root, YGFlexDirectionRow); + YGNodeStyleSetWidth(root, 200); + YGNodeStyleSetHeight(root, 200); + + const YGNodeRef child = YGNodeNew(); + YGNodeInsertChild(root, child, 0); + YGNodeStyleSetWidth(child, 100); + YGNodeStyleSetHeight(child, 100); + YGNodeStyleSetMargin(child, YGEdgeTop, 10); + YGNodeStyleSetPadding(child, YGEdgeTop, 10); + + YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR); + + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetMargin(child, YGEdgeTop)); + ASSERT_FLOAT_EQ(10, YGNodeLayoutGetPadding(child, YGEdgeTop)); + + YGNodeStyleSetDisplay(child, YGDisplayNone); + + YGNodeCalculateLayout(root, 100, 100, YGDirectionLTR); + + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetMargin(child, YGEdgeTop)); + ASSERT_FLOAT_EQ(0, YGNodeLayoutGetPadding(child, YGEdgeTop)); + + YGNodeFreeRecursive(root); +} diff --git a/yoga/Yoga.c b/yoga/Yoga.c index 15ac458607..84aa5a7572 100644 --- a/yoga/Yoga.c +++ b/yoga/Yoga.c @@ -1865,18 +1865,7 @@ static bool YGNodeFixedSizeSetMeasuredDimensions(const YGNodeRef node, } static void YGZeroOutLayoutRecursivly(const YGNodeRef node) { - node->layout.dimensions[YGDimensionHeight] = 0; - node->layout.dimensions[YGDimensionWidth] = 0; - node->layout.position[YGEdgeTop] = 0; - node->layout.position[YGEdgeBottom] = 0; - node->layout.position[YGEdgeLeft] = 0; - node->layout.position[YGEdgeRight] = 0; - node->layout.cachedLayout.availableHeight = 0; - node->layout.cachedLayout.availableWidth = 0; - node->layout.cachedLayout.heightMeasureMode = YGMeasureModeExactly; - node->layout.cachedLayout.widthMeasureMode = YGMeasureModeExactly; - node->layout.cachedLayout.computedWidth = 0; - node->layout.cachedLayout.computedHeight = 0; + memset(&(node->layout), 0, sizeof(YGLayout)); node->hasNewLayout = true; const uint32_t childCount = YGNodeGetChildCount(node); for (uint32_t i = 0; i < childCount; i++) {