X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Fupdate-manager.cpp;h=86db620c2772829e7fa6f26fcc6557d70faf3bda;hb=a2e592d0588a244ac62162bf6c91cd8d2d6863a6;hp=7f8eca8d0595a4248b95498f6e43a1a3419b9a98;hpb=30348d45dbb3d1b08475f4760008190223a99004;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 7f8eca8..86db620 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.cpp @@ -268,6 +268,7 @@ struct UpdateManager::Impl OwnerContainer customObjects; ///< A container of owned objects (with custom properties) OwnerContainer propertyResetters; ///< A container of property resetters + OwnerContainer nodeResetters; ///< A container of node resetters OwnerContainer animations; ///< A container of owned animations PropertyNotificationContainer propertyNotifications; ///< A container of owner property notifications. OwnerContainer renderers; ///< A container of owned renderers @@ -340,6 +341,9 @@ void UpdateManager::InstallRoot(OwnerPointer& layer) rootLayer->CreateTransform(&mImpl->transformManager); rootLayer->SetRoot(true); + OwnerPointer nodeResetter = SceneGraph::NodeResetter::New(*rootLayer); + AddNodeResetter(nodeResetter); + mImpl->scenes.emplace_back(new Impl::SceneInfo(rootLayer)); } @@ -384,6 +388,9 @@ void UpdateManager::ConnectNode(Node* parent, Node* node) parent->ConnectChild(node); + OwnerPointer nodeResetter = SceneGraph::NodeResetter::New(*node); + AddNodeResetter(nodeResetter); + // Inform the frame-callback-processor, if set, about the node-hierarchy changing if(mImpl->frameCallbackProcessor) { @@ -555,6 +562,12 @@ void UpdateManager::AddPropertyResetter(OwnerPointer& prop mImpl->propertyResetters.PushBack(propertyResetter.Release()); } +void UpdateManager::AddNodeResetter(OwnerPointer& nodeResetter) +{ + nodeResetter->Initialize(); + mImpl->nodeResetters.PushBack(nodeResetter.Release()); +} + void UpdateManager::AddPropertyNotification(OwnerPointer& propertyNotification) { mImpl->propertyNotifications.PushBack(propertyNotification.Release()); @@ -659,19 +672,36 @@ void UpdateManager::ResetProperties(BufferIndex bufferIndex) // Clear the "animations finished" flag; This should be set if any (previously playing) animation is stopped mImpl->animationFinishedDuringUpdate = false; + // Reset node properties + std::vector nodeResetterToDelete; + for(auto&& element : mImpl->nodeResetters) + { + element->ResetToBaseValue(bufferIndex); + if(element->IsFinished()) + { + nodeResetterToDelete.push_back(element); + } + } + + // If a node resetter is no longer required, delete it. + for(auto&& elementPtr : nodeResetterToDelete) + { + mImpl->nodeResetters.EraseObject(elementPtr); + } + // Reset all animating / constrained properties - std::vector toDelete; + std::vector propertyResettertoDelete; for(auto&& element : mImpl->propertyResetters) { element->ResetToBaseValue(bufferIndex); if(element->IsFinished()) { - toDelete.push_back(element); + propertyResettertoDelete.push_back(element); } } - // If a resetter is no longer required (the animator or constraint has been removed), delete it. - for(auto&& elementPtr : toDelete) + // If a property resetter is no longer required (the animator or constraint has been removed), delete it. + for(auto&& elementPtr : propertyResettertoDelete) { mImpl->propertyResetters.EraseObject(elementPtr); }