X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-manager.cpp;h=7971b4d336003a68db5c5bdca831b6b4c73b7c99;hp=8e47d810047489481f5028a855329d11868f1965;hb=e8954068388a568c9d89de31ae033fe94d0ce20d;hpb=6de1ee72f32ce241e32d653b427348cf553cf006;ds=sidebyside diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp index 8e47d81..7971b4d 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2020 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,100 +19,117 @@ #include // EXTERNAL INCLUDES -#include #include +#include // INTERNAL INCLUDES #include namespace Dali { - namespace Toolkit { - namespace Internal { - namespace { - #if defined(DEBUG_ENABLED) -Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_VECTOR_ANIMATION" ); +Debug::Filter* gVectorAnimationLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_VECTOR_ANIMATION"); #endif } // unnamed namespace VectorAnimationManager::VectorAnimationManager() : mEventCallbacks(), - mVectorAnimationThread( nullptr ), - mProcessorRegistered( false ) + mLifecycleObservers(), + mVectorAnimationThread(nullptr), + mProcessorRegistered(false) { } VectorAnimationManager::~VectorAnimationManager() { - for( auto&& iter : mEventCallbacks ) + for(auto&& iter : mEventCallbacks) { delete iter; } mEventCallbacks.clear(); - if( mProcessorRegistered ) + if(mProcessorRegistered) + { + Adaptor::Get().UnregisterProcessor(*this, true); + } + + for(auto observer : mLifecycleObservers) + { + observer->VectorAnimationManagerDestroyed(); + } +} + +void VectorAnimationManager::AddObserver(VectorAnimationManager::LifecycleObserver& observer) +{ + DALI_ASSERT_DEBUG(mLifecycleObservers.end() == std::find(mLifecycleObservers.begin(), mLifecycleObservers.end(), &observer)); + mLifecycleObservers.push_back(&observer); +} + +void VectorAnimationManager::RemoveObserver(VectorAnimationManager::LifecycleObserver& observer) +{ + auto iterator = std::find(mLifecycleObservers.begin(), mLifecycleObservers.end(), &observer); + if(iterator != mLifecycleObservers.end()) { - Adaptor::Get().UnregisterProcessor( *this ); + mLifecycleObservers.erase(iterator); } } VectorAnimationThread& VectorAnimationManager::GetVectorAnimationThread() { - if( !mVectorAnimationThread ) + if(!mVectorAnimationThread) { - mVectorAnimationThread = std::unique_ptr< VectorAnimationThread >( new VectorAnimationThread() ); + mVectorAnimationThread = std::unique_ptr(new VectorAnimationThread()); mVectorAnimationThread->Start(); } return *mVectorAnimationThread; } -void VectorAnimationManager::RegisterEventCallback( CallbackBase* callback ) +void VectorAnimationManager::RegisterEventCallback(CallbackBase* callback) { - mEventCallbacks.push_back( callback ); + mEventCallbacks.push_back(callback); - if( !mProcessorRegistered ) + if(!mProcessorRegistered) { - Adaptor::Get().RegisterProcessor( *this ); + Adaptor::Get().RegisterProcessor(*this, true); // Use post processor to trigger after layoutting mProcessorRegistered = true; } } -void VectorAnimationManager::UnregisterEventCallback( CallbackBase* callback ) +void VectorAnimationManager::UnregisterEventCallback(CallbackBase* callback) { - auto iter = std::find( mEventCallbacks.begin(), mEventCallbacks.end(), callback ); - if( iter != mEventCallbacks.end() ) + auto iter = std::find(mEventCallbacks.begin(), mEventCallbacks.end(), callback); + if(iter != mEventCallbacks.end()) { - mEventCallbacks.erase( iter ); + mEventCallbacks.erase(iter); - if( mEventCallbacks.empty() ) + if(mEventCallbacks.empty()) { - if( Adaptor::IsAvailable() ) + if(Adaptor::IsAvailable()) { - Adaptor::Get().UnregisterProcessor( *this ); + Adaptor::Get().UnregisterProcessor(*this, true); mProcessorRegistered = false; } } } } -void VectorAnimationManager::Process() +void VectorAnimationManager::Process(bool postProcessor) { - for( auto&& iter : mEventCallbacks ) + for(auto&& iter : mEventCallbacks) { - CallbackBase::Execute( *iter ); + CallbackBase::Execute(*iter); delete iter; } mEventCallbacks.clear(); - Adaptor::Get().UnregisterProcessor( *this ); + Adaptor::Get().UnregisterProcessor(*this, true); mProcessorRegistered = false; }