X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Fupdate-manager.cpp;h=72304ef3e4f28ac408f5679b4a2591d20f30cde8;hb=4fc8109063295777c56c090736aedada518fcb2a;hp=f8f42a4b1a55afde8574730820712c579bbf935a;hpb=4d27549395813e4798102f6876b8e7ac90654cce;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/manager/update-manager.cpp b/dali/internal/update/manager/update-manager.cpp index f8f42a4..72304ef 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.cpp @@ -130,22 +130,6 @@ inline void EraseUsingDiscardQueue(OwnerKeyContainer& container, const Mem } } -/** - * Descends into node's hierarchy and sorts the children of each child according to their depth-index. - * @param[in] node The node whose hierarchy to descend - */ -void SortSiblingNodesRecursively(Node& node) -{ - NodeContainer& container = node.GetChildren(); - std::sort(container.Begin(), container.End(), [](Node* a, Node* b) { return a->GetDepthIndex() < b->GetDepthIndex(); }); - - // Descend tree and sort as well - for(auto&& iter : container) - { - SortSiblingNodesRecursively(*iter); - } -} - } // unnamed namespace /** @@ -1278,19 +1262,18 @@ void UpdateManager::SetLayerDepths(const SortedLayerPointers& layers, const Laye void UpdateManager::SetDepthIndices(OwnerPointer& nodeDepths) { - // note,this vector is already in depth order. It could be used as-is to - // remove sorting in update algorithm. However, it lacks layer boundary markers. - for(auto&& iter : nodeDepths->nodeDepths) - { - iter.node->SetDepthIndex(iter.sortedDepth); - } - - for(auto&& scene : mImpl->scenes) + // note, this vector is already in depth order. + // So if we reverse iterate, we can assume that + // my descendant node's depth index are updated. + for(auto rIter = nodeDepths->nodeDepths.rbegin(), rEndIter = nodeDepths->nodeDepths.rend(); rIter != rEndIter; rIter++) { - if(scene) + auto* node = rIter->node; + node->SetDepthIndex(rIter->sortedDepth); + if(node->IsChildrenReorderRequired()) { - // Go through node hierarchy and rearrange siblings according to depth-index - SortSiblingNodesRecursively(*scene->root); + // Reorder children container only if sibiling order changed. + NodeContainer& container = node->GetChildren(); + std::sort(container.Begin(), container.End(), [](Node* a, Node* b) { return a->GetDepthIndex() < b->GetDepthIndex(); }); } } }