(Vector) Change event processing
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / animated-vector-image / animated-vector-image-visual.cpp
index bf3b519..453f14e 100644 (file)
 #include <dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h>
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/common/stage.h>
+#include <dali/devel-api/common/stage.h>
 #include <dali/devel-api/rendering/renderer-devel.h>
 #include <dali/devel-api/adaptor-framework/window-devel.h>
-#include <dali/integration-api/adaptor-framework/adaptor.h>
 #include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
@@ -34,6 +33,7 @@
 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
 #include <dali-toolkit/internal/visuals/visual-base-data-impl.h>
+#include <dali-toolkit/internal/visuals/animated-vector-image/vector-animation-manager.h>
 
 namespace Dali
 {
@@ -84,7 +84,7 @@ AnimatedVectorImageVisualPtr AnimatedVectorImageVisual::New( VisualFactoryCache&
 }
 
 AnimatedVectorImageVisual::AnimatedVectorImageVisual( VisualFactoryCache& factoryCache, ImageVisualShaderFactory& shaderFactory, const VisualUrl& imageUrl )
-: Visual::Base( factoryCache, Visual::FittingMode::FILL ),
+: Visual::Base( factoryCache, Visual::FittingMode::FILL, static_cast<Toolkit::Visual::Type>( Toolkit::DevelVisual::ANIMATED_VECTOR_IMAGE ) ),
   mUrl( imageUrl ),
   mAnimationData(),
   mVectorAnimationTask( new VectorAnimationTask( factoryCache, imageUrl.GetUrl() ) ),
@@ -93,8 +93,8 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual( VisualFactoryCache& factor
   mVisualScale( Vector2::ONE ),
   mPlacementActor(),
   mPlayState( DevelImageVisual::PlayState::STOPPED ),
-  mRendererAdded( false ),
-  mRasterizationTriggered( false )
+  mEventCallback( nullptr ),
+  mRendererAdded( false )
 {
   // the rasterized image is with pre-multiplied alpha format
   mImpl->mFlags |= Impl::IS_PREMULTIPLIED_ALPHA;
@@ -105,9 +105,9 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual( VisualFactoryCache& factor
 
 AnimatedVectorImageVisual::~AnimatedVectorImageVisual()
 {
-  if( mRasterizationTriggered && Adaptor::IsAvailable() )
+  if( mEventCallback )
   {
-    Adaptor::Get().UnregisterProcessor( *this );
+    mFactoryCache.GetVectorAnimationManager().UnregisterEventCallback( mEventCallback );
   }
 
   // Finalize animation task and disconnect the signal in the main thread
@@ -248,7 +248,7 @@ void AnimatedVectorImageVisual::DoSetProperty( Property::Index index, const Prop
   }
 }
 
-void AnimatedVectorImageVisual::DoSetOnStage( Actor& actor )
+void AnimatedVectorImageVisual::DoSetOnScene( Actor& actor )
 {
   Shader shader;
 
@@ -297,10 +297,10 @@ void AnimatedVectorImageVisual::DoSetOnStage( Actor& actor )
     DevelWindow::VisibilityChangedSignal( window ).Connect( this, &AnimatedVectorImageVisual::OnWindowVisibilityChanged );
   }
 
-  DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOnStage [%p]\n", this );
+  DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOnScene [%p]\n", this );
 }
 
-void AnimatedVectorImageVisual::DoSetOffStage( Actor& actor )
+void AnimatedVectorImageVisual::DoSetOffScene( Actor& actor )
 {
   StopAnimation();
   SendAnimationData();
@@ -331,14 +331,14 @@ void AnimatedVectorImageVisual::DoSetOffStage( Actor& actor )
   mVisualSize = Vector2::ZERO;
   mVisualScale = Vector2::ONE;
 
-  DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOffStage [%p]\n", this );
+  DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::DoSetOffScene [%p]\n", this );
 }
 
 void AnimatedVectorImageVisual::OnSetTransform()
 {
   Vector2 visualSize = mImpl->mTransform.GetVisualSize( mImpl->mControlSize );
 
-  if( IsOnStage() && visualSize != mVisualSize )
+  if( IsOnScene() && visualSize != mVisualSize )
   {
     DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnSetTransform: width = %f, height = %f [%p]\n", visualSize.width, visualSize.height, this );
 
@@ -363,7 +363,7 @@ void AnimatedVectorImageVisual::OnDoAction( const Property::Index actionId, cons
   {
     case DevelAnimatedVectorImageVisual::Action::PLAY:
     {
-      if( IsOnStage() && mVisualSize != Vector2::ZERO )
+      if( IsOnScene() && mVisualSize != Vector2::ZERO )
       {
         if( mAnimationData.playState != DevelImageVisual::PlayState::PLAYING )
         {
@@ -418,15 +418,6 @@ void AnimatedVectorImageVisual::OnDoAction( const Property::Index actionId, cons
   TriggerVectorRasterization();
 }
 
-void AnimatedVectorImageVisual::Process()
-{
-  SendAnimationData();
-
-  mRasterizationTriggered = false;
-
-  Adaptor::Get().UnregisterProcessor( *this );
-}
-
 void AnimatedVectorImageVisual::OnUploadCompleted()
 {
   // If weak handle is holding a placement actor, it is the time to add the renderer to actor.
@@ -509,12 +500,11 @@ void AnimatedVectorImageVisual::StopAnimation()
 
 void AnimatedVectorImageVisual::TriggerVectorRasterization()
 {
-  if( !mRasterizationTriggered )
+  if( !mEventCallback )
   {
+    mEventCallback = MakeCallback( this, &AnimatedVectorImageVisual::OnProcessEvents );
+    mFactoryCache.GetVectorAnimationManager().RegisterEventCallback( mEventCallback );
     Stage::GetCurrent().KeepRendering( 0.0f );  // Trigger event processing
-
-    Adaptor::Get().RegisterProcessor( *this );
-    mRasterizationTriggered = true;
   }
 }
 
@@ -576,6 +566,13 @@ void AnimatedVectorImageVisual::OnWindowVisibilityChanged( Window window, bool v
   }
 }
 
+void AnimatedVectorImageVisual::OnProcessEvents()
+{
+  SendAnimationData();
+
+  mEventCallback = nullptr;  // The callback will be deleted in the VectorAnimationManager
+}
+
 } // namespace Internal
 
 } // namespace Toolkit