diff --git a/yoga/YGNode.cpp b/yoga/YGNode.cpp index d1601272..7b741acf 100644 --- a/yoga/YGNode.cpp +++ b/yoga/YGNode.cpp @@ -571,3 +571,22 @@ bool YGNode::isLayoutTreeEqualToNode(const YGNode& node) const { } return isLayoutTreeEqual; } + +void YGNode::reset() { + YGAssertWithNode( + this, + children_.size() == 0, + "Cannot reset a node which still has children attached"); + YGAssertWithNode( + this, owner_ == nullptr, "Cannot reset a node still attached to a owner"); + + clearChildren(); + + auto config = getConfig(); + *this = YGNode{}; + if (config->useWebDefaults) { + setStyleFlexDirection(YGFlexDirectionRow); + setStyleAlignContent(YGAlignStretch); + } + setConfig(config); +} diff --git a/yoga/YGNode.h b/yoga/YGNode.h index cf236728..42c99f00 100644 --- a/yoga/YGNode.h +++ b/yoga/YGNode.h @@ -342,4 +342,5 @@ public: bool isNodeFlexible(); bool didUseLegacyFlag(); bool isLayoutTreeEqualToNode(const YGNode& node) const; + void reset(); }; diff --git a/yoga/Yoga.cpp b/yoga/Yoga.cpp index bbdf724e..27072c1c 100644 --- a/yoga/Yoga.cpp +++ b/yoga/Yoga.cpp @@ -323,25 +323,8 @@ void YGNodeFreeRecursive(const YGNodeRef root) { return YGNodeFreeRecursiveWithCleanupFunc(root, nullptr); } -void YGNodeReset(const YGNodeRef node) { - YGAssertWithNode( - node, - YGNodeGetChildCount(node) == 0, - "Cannot reset a node which still has children attached"); - YGAssertWithNode( - node, - node->getOwner() == nullptr, - "Cannot reset a node still attached to a owner"); - - node->clearChildren(); - - const YGConfigRef config = node->getConfig(); - *node = YGNode(); - if (config->useWebDefaults) { - node->setStyleFlexDirection(YGFlexDirectionRow); - node->setStyleAlignContent(YGAlignStretch); - } - node->setConfig(config); +void YGNodeReset(YGNodeRef node) { + node->reset(); } int32_t YGNodeGetInstanceCount(void) {