MCPcopy Create free account
hub / github.com/Snapchat/Valdi / setRootViewNode

Method setRootViewNode

valdi/src/valdi/runtime/Context/ViewNodeTree.cpp:544–575  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

542}
543
544void ViewNodeTree::setRootViewNode(Ref<ViewNode> rootViewNode, bool useDefaultViewFactory) {
545 auto oldRootViewNode = std::move(_rootViewNode);
546 if (oldRootViewNode != nullptr) {
547 setViewToRootViewNode(oldRootViewNode, nullptr);
548 }
549
550 auto& viewTransactionScope = getCurrentViewTransactionScope();
551
552 _rootViewNode = std::move(rootViewNode);
553
554 if (_rootViewNode != nullptr) {
555 _rootViewNode->removeFromParent(viewTransactionScope);
556 if (useDefaultViewFactory) {
557 SC_ASSERT_NOTNULL(_viewManager);
558 _rootViewNode->setViewFactory(viewTransactionScope,
559 getOrCreateViewFactory(_viewManager->getDefaultViewClass()));
560 }
561
562 if (_rootViewNode->isFlexLayoutDirty()) {
563 onLayoutDirty();
564 }
565 }
566
567 setViewToRootViewNode(_rootViewNode, _rootView);
568
569 if (oldRootViewNode != nullptr &&
570 (_rootViewNode != nullptr && _rootViewNode->getRawId() != oldRootViewNode->getRawId())) {
571 // If we are switching from a root view node to another one with a different id, we automatically destroy
572 // the previous view node to ensure we don't have a dangling subtree
573 removeViewNode(oldRootViewNode->getRawId());
574 }
575}
576
577void ViewNodeTree::addViewNode(const Ref<ViewNode>& viewNode) {
578 SC_ASSERT(viewNode->getRawId() != 0);

Callers 2

createRootViewMethod · 0.80
visitMethod · 0.80

Calls 5

setViewFactoryMethod · 0.80
isFlexLayoutDirtyMethod · 0.80
getRawIdMethod · 0.80
removeFromParentMethod · 0.45
getDefaultViewClassMethod · 0.45

Tested by 1

createRootViewMethod · 0.64