+ mIsJumpTo = false;
+ }
+ else if( mActionStatus == DevelAnimatedImageVisual::Action::PAUSE )
+ {
+ return false;
+ }
+ else if( mActionStatus == DevelAnimatedImageVisual::Action::STOP )
+ {
+ mCurrentLoopIndex = 0;
+ if( mStopBehavior == DevelImageVisual::StopBehavior::FIRST_FRAME )
+ {
+ mCurrentFrameIndex = 0;
+ }
+ else if( mStopBehavior == DevelImageVisual::StopBehavior::LAST_FRAME )
+ {
+ mCurrentFrameIndex = mFrameCount - 1;
+ }
+ else
+ {
+ return false; // Do not draw already rendered scene twice.
+ }
+ }
+ else
+ {
+ if( mFrameCount > 1 )
+ {
+ // Wrap the frame index
+ bool finished = false;
+ ++mCurrentFrameIndex;
+ if( mCurrentFrameIndex >= mFrameCount )
+ {
+ ++mCurrentLoopIndex;
+ finished = true;
+ }
+
+ if( mLoopCount < 0 || mCurrentLoopIndex < mLoopCount)
+ {
+ if( finished )
+ {
+ mCurrentFrameIndex = 0; // Back to the first frame
+ }
+ }
+ else
+ {
+ // This will stop timer
+ mActionStatus = DevelAnimatedImageVisual::Action::STOP;
+ return DisplayNextFrame();
+ }
+ }
+
+ if( mFrameDelayContainer.Count() > 0 )
+ {
+ unsigned int delay = mFrameDelayContainer[mCurrentFrameIndex];
+
+ if( mFrameDelayTimer.GetInterval() != delay )
+ {
+ mFrameDelayTimer.SetInterval( delay );
+ }
+ }
+ }
+
+ DALI_LOG_INFO( gAnimImgLogFilter,Debug::Concise,"AnimatedImageVisual::DisplayNextFrame(this:%p) CurrentFrameIndex:%d\n", this, mCurrentFrameIndex);
+
+ TextureSet textureSet;
+ if( mImageCache )
+ {
+ textureSet = mImageCache->Frame( mCurrentFrameIndex );
+ if( textureSet )
+ {
+ SetImageSize( textureSet );
+ mImpl->mRenderer.SetTextures( textureSet );
+ }