Skip to content

Commit

Permalink
Zero out all fields in YGZeroOutLayoutRecursivly using memset
Browse files Browse the repository at this point in the history
Summary:
Add a new test named YGZeroOutLayoutRecursivlyTest, which verifies that padding and margin of a child node should be set to 0 when the display is set to none.
Modify YGZeroOutLayoutRecursivly function, use memset to clear the layout struct of the node.

Reviewed By: emilsjolander

Differential Revision: D5842351

fbshipit-source-id: d2c2b6f829588a200525b7ccbdb63003cb4dcc4e
  • Loading branch information
Mingwei Pan authored and facebook-github-bot committed Sep 15, 2017
1 parent 1605208 commit bcc36cc
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
39 changes: 39 additions & 0 deletions tests/YGZeroOutLayoutRecursivlyTest.cpp
Original file line number Diff line number Diff line change
@@ -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 <gtest/gtest.h>
#include <yoga/Yoga.h>

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);
}
13 changes: 1 addition & 12 deletions yoga/Yoga.c
Original file line number Diff line number Diff line change
Expand Up @@ -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++) {
Expand Down

0 comments on commit bcc36cc

Please sign in to comment.