(Vector) Stop the animation when the actor is off-stage or invisible
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / animated-vector-image / animated-vector-image-visual.cpp
index 122d407..2ed0502 100644 (file)
@@ -100,10 +100,9 @@ AnimatedVectorImageVisual::AnimatedVectorImageVisual( VisualFactoryCache& factor
   mImageVisualShaderFactory( shaderFactory ),
   mVisualSize(),
   mVisualScale( Vector2::ONE ),
+  mPlayRange(),
   mPlacementActor(),
   mLoopCount( LOOP_FOREVER ),
-  mStartFrame( 0 ),
-  mEndFrame( 0 ),
   mResendFlag( 0 ),
   mActionStatus( DevelAnimatedVectorImageVisual::Action::STOP ),
   mStopBehavior( DevelImageVisual::StopBehavior::CURRENT_FRAME ),
@@ -226,25 +225,8 @@ void AnimatedVectorImageVisual::DoSetProperty( Property::Index index, const Prop
       Property::Array* array = value.GetArray();
       if( array )
       {
-        size_t count = array->Count();
-        if( count >= 2 )
-        {
-          int startFrame, endFrame;
-          int totalFrame = mVectorAnimationTask->GetTotalFrameNumber();
-          array->GetElementAt( 0 ).Get( startFrame );
-          array->GetElementAt( 1 ).Get( endFrame );
-
-          if( startFrame >= 0 && startFrame < totalFrame && endFrame >= 0 && endFrame < totalFrame )
-          {
-            mStartFrame = startFrame;
-            mEndFrame = endFrame;
-            mResendFlag |= RESEND_PLAY_RANGE;
-          }
-          else
-          {
-            DALI_LOG_ERROR( "Invalid play range [%d, %d / %d]\n", startFrame, endFrame, totalFrame );
-          }
-        }
+        mPlayRange = *array;
+        mResendFlag |= RESEND_PLAY_RANGE;
       }
       break;
     }
@@ -325,7 +307,7 @@ void AnimatedVectorImageVisual::DoSetOnStage( Actor& actor )
 
 void AnimatedVectorImageVisual::DoSetOffStage( Actor& actor )
 {
-  PauseAnimation();
+  StopAnimation();
 
   if( mImpl->mRenderer )
   {
@@ -509,7 +491,7 @@ void AnimatedVectorImageVisual::SendAnimationData()
 
     if( mResendFlag & RESEND_PLAY_RANGE )
     {
-      mVectorAnimationTask->SetPlayRange( mStartFrame, mEndFrame );
+      mVectorAnimationTask->SetPlayRange( mPlayRange );
     }
 
     if( mResendFlag & RESEND_STOP_BEHAVIOR )
@@ -553,13 +535,13 @@ void AnimatedVectorImageVisual::SetVectorImageSize()
   }
 }
 
-void AnimatedVectorImageVisual::PauseAnimation()
+void AnimatedVectorImageVisual::StopAnimation()
 {
-  if( mActionStatus == DevelAnimatedVectorImageVisual::Action::PLAY )
+  if( mActionStatus != DevelAnimatedVectorImageVisual::Action::STOP )
   {
-    mVectorAnimationTask->PauseAnimation();
+    mVectorAnimationTask->StopAnimation();
 
-    mActionStatus = DevelAnimatedVectorImageVisual::Action::PAUSE;
+    mActionStatus = DevelAnimatedVectorImageVisual::Action::STOP;
 
     if( mImpl->mRenderer )
     {
@@ -602,7 +584,7 @@ void AnimatedVectorImageVisual::OnControlVisibilityChanged( Actor actor, bool vi
 {
   if( !visible )
   {
-    PauseAnimation();
+    StopAnimation();
 
     DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnControlVisibilityChanged: invisibile. Pause animation [%p]\n", this );
   }
@@ -612,7 +594,7 @@ void AnimatedVectorImageVisual::OnWindowVisibilityChanged( Window window, bool v
 {
   if( !visible )
   {
-    PauseAnimation();
+    StopAnimation();
 
     DALI_LOG_INFO( gVectorAnimationLogFilter, Debug::Verbose, "AnimatedVectorImageVisual::OnWindowVisibilityChanged: invisibile. Pause animation [%p]\n", this );
   }