YGNode *YogaLayoutableShadowNode::yogaNodeCloneCallbackConnector( YGNode *oldYogaNode, YGNode *parentYogaNode, int childIndex) { // At this point it is garanteed that all shadow nodes associated with yoga // nodes are `YogaLayoutableShadowNode` subclasses. auto parentNode = static_cast<YogaLayoutableShadowNode *>(parentYogaNode->getContext()); auto oldNode = static_cast<YogaLayoutableShadowNode *>(oldYogaNode->getContext()); auto clonedNode = static_cast<YogaLayoutableShadowNode *>( parentNode->cloneAndReplaceChild(oldNode, childIndex)); return &clonedNode->yogaNode_; }
void YogaLayoutableShadowNode::appendChild(SharedYogaLayoutableShadowNode child) { ensureUnsealed(); auto yogaNodeRawPtr = &yogaNode_; auto childYogaNodeRawPtr = &child->yogaNode_; if (childYogaNodeRawPtr->getOwner() != nullptr) { child = std::static_pointer_cast<const YogaLayoutableShadowNode>(cloneAndReplaceChild(child)); childYogaNodeRawPtr = &child->yogaNode_; } child->ensureUnsealed(); childYogaNodeRawPtr->setOwner(yogaNodeRawPtr); yogaNodeRawPtr->insertChild(childYogaNodeRawPtr, yogaNodeRawPtr->getChildren().size()); }
void YogaLayoutableShadowNode::appendChild(YogaLayoutableShadowNode *child) { ensureUnsealed(); auto yogaNodeRawPtr = &yogaNode_; auto childYogaNodeRawPtr = &child->yogaNode_; if (childYogaNodeRawPtr->getOwner() != nullptr) { child = static_cast<YogaLayoutableShadowNode *>( cloneAndReplaceChild(child, yogaNode_.getChildren().size())); childYogaNodeRawPtr = &child->yogaNode_; assert(childYogaNodeRawPtr->getOwner() == nullptr); } child->ensureUnsealed(); childYogaNodeRawPtr->setOwner(yogaNodeRawPtr); yogaNodeRawPtr->insertChild( childYogaNodeRawPtr, yogaNodeRawPtr->getChildren().size()); }