X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-image%2Fanimated-image-visual.cpp;h=745c45c743ef9a783addc208a9d907ad1dbfef95;hp=6b7adf3059d2e2afdf14f2e22e9b3bd75c780c64;hb=6ecc4c026c8e398c1a13cba2584c62092f4cf014;hpb=43ca048f4200d2f1d6e59c2163af59cd99a45b2e diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 6b7adf3..745c45c 100755 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -82,7 +82,7 @@ Debug::Filter* gAnimImgLogFilter = Debug::Filter::New(Debug::NoLogging, false, " * | new cache * | cache->LoadBatch() * | - * | DoSetOnStage() + * | DoSetOnScene() * | PrepareTextureSet() * | cache->FirstFrame() * | CreateRenderer() (Doesn't become ready until first frame loads) @@ -174,7 +174,7 @@ AnimatedImageVisual::AnimatedImageVisual( VisualFactoryCache& factoryCache, Imag mPixelArea( FULL_TEXTURE_RECT ), mImageUrl(), mAnimatedImageLoading(), - mCurrentFrameIndex( 0 ), + mFrameIndexForJumpTo( 0 ), mImageUrls( NULL ), mImageCache( NULL ), mCacheSize( 2 ), @@ -272,7 +272,7 @@ void AnimatedImageVisual::OnDoAction( const Dali::Property::Index actionId, cons } case DevelAnimatedImageVisual::Action::PLAY: { - if( mFrameDelayTimer && IsOnStage() && mActionStatus != DevelAnimatedImageVisual::Action::PLAY ) + if( mFrameDelayTimer && IsOnScene() && mActionStatus != DevelAnimatedImageVisual::Action::PLAY ) { mFrameDelayTimer.Start(); } @@ -284,7 +284,7 @@ void AnimatedImageVisual::OnDoAction( const Dali::Property::Index actionId, cons // STOP reset functionality will actually be done in a future change // Stop will be executed on next timer tick mActionStatus = DevelAnimatedImageVisual::Action::STOP; - if( IsOnStage() ) + if( IsOnScene() ) { DisplayNextFrame(); } @@ -302,8 +302,8 @@ void AnimatedImageVisual::OnDoAction( const Dali::Property::Index actionId, cons else { mIsJumpTo = true; - mCurrentFrameIndex = frameNumber; - if( IsOnStage() ) + mFrameIndexForJumpTo = frameNumber; + if( IsOnScene() ) { DisplayNextFrame(); } @@ -481,7 +481,7 @@ void AnimatedImageVisual::DoSetProperty( Property::Index index, } } -void AnimatedImageVisual::DoSetOnStage( Actor& actor ) +void AnimatedImageVisual::DoSetOnScene( Actor& actor ) { mPlacementActor = actor; TextureSet textureSet = PrepareTextureSet(); @@ -497,7 +497,7 @@ void AnimatedImageVisual::DoSetOnStage( Actor& actor ) } } -void AnimatedImageVisual::DoSetOffStage( Actor& actor ) +void AnimatedImageVisual::DoSetOffScene( Actor& actor ) { DALI_ASSERT_DEBUG( (bool)mImpl->mRenderer && "There should always be a renderer whilst on stage"); @@ -544,8 +544,6 @@ void AnimatedImageVisual::CreateRenderer() { mImpl->mRenderer.RegisterProperty( PIXEL_AREA_UNIFORM_NAME, mPixelArea ); } - - mCurrentFrameIndex = 0; } void AnimatedImageVisual::LoadFirstBatch() @@ -618,14 +616,12 @@ void AnimatedImageVisual::StartFirstFrame( TextureSet& textureSet ) mPlacementActor.Reset(); } - mCurrentFrameIndex = 0; - if( mFrameCount > 1 ) { - int frameDelay = mFrameDelay; // from URL array - if( mAnimatedImageLoading && mImageCache ) + int frameDelay = mImageCache->GetFrameInterval( 0 ); + if( frameDelay == 0u ) { - frameDelay = mImageCache->GetFrameInterval( 0 ); + frameDelay = mFrameDelay; // from URL array } mFrameDelayTimer = Timer::New( frameDelay ); mFrameDelayTimer.TickSignal().Connect( this, &AnimatedImageVisual::DisplayNextFrame ); @@ -642,15 +638,11 @@ TextureSet AnimatedImageVisual::PrepareTextureSet() { textureSet = mImageCache->FirstFrame(); } + if( textureSet ) { SetImageSize( textureSet ); } - else - { - DALI_LOG_INFO( gAnimImgLogFilter, Debug::Concise, "ResourceReady(ResourceStatus::FAILED)\n" ); - ResourceReady( Toolkit::Visual::ResourceStatus::FAILED ); - } return textureSet; } @@ -670,26 +662,38 @@ void AnimatedImageVisual::SetImageSize( TextureSet& textureSet ) void AnimatedImageVisual::FrameReady( TextureSet textureSet ) { - SetImageSize( textureSet ); - - if( mStartFirstFrame ) + if(textureSet) { - StartFirstFrame( textureSet ); + SetImageSize(textureSet); + + if(mStartFirstFrame) + { + StartFirstFrame(textureSet); + } + else + { + if(mImpl->mRenderer) + { + mImpl->mRenderer.SetTextures(textureSet); + } + } } else { - if( mImpl->mRenderer ) - { - mImpl->mRenderer.SetTextures( textureSet ); - } + DALI_LOG_INFO( gAnimImgLogFilter, Debug::Concise, "ResourceReady(ResourceStatus::FAILED)\n" ); + ResourceReady( Toolkit::Visual::ResourceStatus::FAILED ); } } bool AnimatedImageVisual::DisplayNextFrame() { + bool nextFrame = false; + uint32_t frameIndex = mImageCache->GetCurrentFrameIndex(); + if( mIsJumpTo ) { mIsJumpTo = false; + frameIndex = mFrameIndexForJumpTo; } else if( mActionStatus == DevelAnimatedImageVisual::Action::PAUSE ) { @@ -697,14 +701,14 @@ bool AnimatedImageVisual::DisplayNextFrame() } else if( mActionStatus == DevelAnimatedImageVisual::Action::STOP ) { - mCurrentLoopIndex = 0; + frameIndex = 0; if( mStopBehavior == DevelImageVisual::StopBehavior::FIRST_FRAME ) { - mCurrentFrameIndex = 0; + frameIndex = 0; } else if( mStopBehavior == DevelImageVisual::StopBehavior::LAST_FRAME ) { - mCurrentFrameIndex = mFrameCount - 1; + frameIndex = mFrameCount - 1; } else { @@ -715,33 +719,25 @@ bool AnimatedImageVisual::DisplayNextFrame() { if( mFrameCount > 1 ) { - // Wrap the frame index - bool finished = false; - ++mCurrentFrameIndex; - if( mCurrentFrameIndex >= mFrameCount ) + nextFrame = true; + frameIndex++; + if( frameIndex >= mFrameCount ) { + frameIndex %= mFrameCount; ++mCurrentLoopIndex; - finished = true; } - if( mLoopCount < 0 || mCurrentLoopIndex < mLoopCount) - { - if( finished ) - { - mCurrentFrameIndex = 0; // Back to the first frame - } - } - else + if(mLoopCount >= 0 && mCurrentLoopIndex >= mLoopCount) { // This will stop timer mActionStatus = DevelAnimatedImageVisual::Action::STOP; return DisplayNextFrame(); } } - // TODO : newly added one. - if( mAnimatedImageLoading && mImageCache ) + + unsigned int delay = mImageCache->GetFrameInterval( frameIndex ); + if( delay > 0u ) { - unsigned int delay = mImageCache->GetFrameInterval( mCurrentFrameIndex ); if( mFrameDelayTimer.GetInterval() != delay ) { mFrameDelayTimer.SetInterval( delay ); @@ -749,12 +745,20 @@ bool AnimatedImageVisual::DisplayNextFrame() } } - DALI_LOG_INFO( gAnimImgLogFilter,Debug::Concise,"AnimatedImageVisual::DisplayNextFrame(this:%p) CurrentFrameIndex:%d\n", this, mCurrentFrameIndex); + DALI_LOG_INFO( gAnimImgLogFilter,Debug::Concise,"AnimatedImageVisual::DisplayNextFrame(this:%p) CurrentFrameIndex:%d\n", this, frameIndex); TextureSet textureSet; if( mImageCache ) { - textureSet = mImageCache->Frame( mCurrentFrameIndex ); + if(nextFrame) + { + textureSet = mImageCache->NextFrame(); + } + else + { + textureSet = mImageCache->Frame( frameIndex ); + } + if( textureSet ) { SetImageSize( textureSet );