}
}
}
+
+ {
+ Dali::Mutex::ScopedLock lock( mMutex );
+
+ auto triggeredHandler = std::find( mTriggeredHandlers.begin(), mTriggeredHandlers.end(), &handler );
+ if( triggeredHandler != mTriggeredHandlers.end() )
+ {
+ mTriggeredHandlers.erase( triggeredHandler );
+ }
+ }
}
void TizenVectorAnimationManager::TriggerEvent( TizenVectorAnimationEventHandler& handler )
OnEventTriggered();
}
+// This function is called in the main thread.
void TizenVectorAnimationManager::OnEventTriggered()
{
- Dali::Mutex::ScopedLock lock( mMutex );
+ std::vector< TizenVectorAnimationEventHandler* > handlers;
- for( auto&& iter : mTriggeredHandlers )
{
- iter->NotifyEvent();
+ Dali::Mutex::ScopedLock lock( mMutex );
+
+ // Copy the list to the local variable and clear
+ handlers = mTriggeredHandlers;
+ mTriggeredHandlers.clear();
}
- mTriggeredHandlers.clear();
+ for( auto&& iter : handlers )
+ {
+ iter->NotifyEvent();
+ }
}
} // namespace Plugin
Dali::Mutex::ScopedLock lock( mMutex );
ResetBuffers();
-
- TizenVectorAnimationManager::Get().RemoveEventHandler( *this );
}
bool TizenVectorAnimationRenderer::Initialize( const std::string& url )
return true;
}
+void TizenVectorAnimationRenderer::Finalize()
+{
+ Dali::Mutex::ScopedLock lock( mMutex );
+
+ TizenVectorAnimationManager::Get().RemoveEventHandler( *this );
+
+ mRenderer.Reset();
+ mTexture.Reset();
+ mRenderedTexture.Reset();
+ mVectorRenderer.reset();
+
+ mTargetSurface = nullptr;
+ mTbmQueue = NULL;
+}
+
void TizenVectorAnimationRenderer::SetRenderer( Renderer renderer )
{
mRenderer = renderer;
{
Dali::Mutex::ScopedLock lock( mMutex );
+ if( !mTbmQueue || !mVectorRenderer )
+ {
+ return false;
+ }
+
if( tbm_surface_queue_can_dequeue( mTbmQueue, 0 ) )
{
tbm_surface_h tbmSurface;
{
Dali::Mutex::ScopedLock lock( mMutex );
- auto layerInfo = mVectorRenderer->layers();
-
- for( auto&& iter : layerInfo )
+ if( mVectorRenderer )
{
- Property::Array frames;
- frames.PushBack( std::get< 1 >( iter ) );
- frames.PushBack( std::get< 2 >( iter ) );
- map.Add( std::get< 0 >( iter ), frames );
+ auto layerInfo = mVectorRenderer->layers();
+
+ for( auto&& iter : layerInfo )
+ {
+ Property::Array frames;
+ frames.PushBack( std::get< 1 >( iter ) );
+ frames.PushBack( std::get< 2 >( iter ) );
+ map.Add( std::get< 0 >( iter ), frames );
+ }
}
}
DALI_LOG_RELEASE_INFO( "TizenVectorAnimationRenderer::NotifyEvent: Set Texture [%p]\n", this );
// Set texture
- if( mRenderer )
+ if( mRenderer && mRenderedTexture )
{
TextureSet textureSet = mRenderer.GetTextures();
textureSet.SetTexture( 0, mRenderedTexture );