X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fanimated-vector-image%2Fvector-animation-task.cpp;h=a202747e3404b47ce97a711c0fc822df988b12c1;hb=6da98d4f526029d51c8404964dd954afe9752401;hp=b79f42258ff38633979d8023eb5978fb530f9fbb;hpb=e8954068388a568c9d89de31ae033fe94d0ce20d;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp index b79f422..a202747 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/vector-animation-task.cpp @@ -95,6 +95,10 @@ void VectorAnimationTask::Finalize() { mAnimationFinishedTrigger.reset(); } + if(mLoadCompletedTrigger) + { + mLoadCompletedTrigger.reset(); + } mVectorRenderer.Finalize(); @@ -144,6 +148,11 @@ void VectorAnimationTask::RequestLoad(const std::string& url) mVectorAnimationThread.AddTask(this); } +bool VectorAnimationTask::IsLoadRequested() const +{ + return mLoadRequest; +} + void VectorAnimationTask::SetAnimationData(const AnimationData& data) { ConditionalWait::ScopedLock lock(mConditionalWait); @@ -280,38 +289,33 @@ void VectorAnimationTask::SetPlayRange(const Property::Array& playRange) } // Make sure the range specified is between 0 and the total frame number - if(startFrame < mTotalFrame && endFrame < mTotalFrame) + startFrame = std::min(startFrame, mTotalFrame - 1); + endFrame = std::min(endFrame, mTotalFrame - 1); + + // If the range is not in order swap values + if(startFrame > endFrame) + { + uint32_t temp = startFrame; + startFrame = endFrame; + endFrame = temp; + } + + if(startFrame != mStartFrame || endFrame != mEndFrame) { - // If the range is not in order swap values - if(startFrame > endFrame) + mStartFrame = startFrame; + mEndFrame = endFrame; + + // If the current frame is out of the range, change the current frame also. + if(mStartFrame > mCurrentFrame) { - uint32_t temp = startFrame; - startFrame = endFrame; - endFrame = temp; + mCurrentFrame = mStartFrame; } - - if(startFrame != mStartFrame || endFrame != mEndFrame) + else if(mEndFrame < mCurrentFrame) { - mStartFrame = startFrame; - mEndFrame = endFrame; - - // If the current frame is out of the range, change the current frame also. - if(mStartFrame > mCurrentFrame) - { - mCurrentFrame = mStartFrame; - } - else if(mEndFrame < mCurrentFrame) - { - mCurrentFrame = mEndFrame; - } - - DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::SetPlayRange: [%d, %d] [%s] [%p]\n", mStartFrame, mEndFrame, mUrl.c_str(), this); + mCurrentFrame = mEndFrame; } - } - else - { - DALI_LOG_ERROR("VectorAnimationTask::SetPlayRange: Invalid range (%d, %d) [%s] [%p]\n", startFrame, endFrame, mUrl.c_str(), this); - return; + + DALI_LOG_INFO(gVectorAnimationLogFilter, Debug::Verbose, "VectorAnimationTask::SetPlayRange: [%d, %d] [%s] [%p]\n", mStartFrame, mEndFrame, mUrl.c_str(), this); } } @@ -627,6 +631,14 @@ void VectorAnimationTask::ApplyAnimationData() mVectorRenderer.InvalidateBuffer(); } + if(mAnimationData[index].resendFlag & VectorAnimationTask::RESEND_DYNAMIC_PROPERTY) + { + for(auto&& iter : mAnimationData[index].dynamicProperties) + { + mVectorRenderer.AddPropertyValueCallback(iter.keyPath, static_cast(iter.property), iter.callback, iter.id); + } + } + if(mAnimationData[index].resendFlag & VectorAnimationTask::RESEND_PLAY_STATE) { if(mAnimationData[index].playState == DevelImageVisual::PlayState::PLAYING) @@ -643,6 +655,8 @@ void VectorAnimationTask::ApplyAnimationData() } } + // reset data + mAnimationData[index].dynamicProperties.clear(); mAnimationData[index].resendFlag = 0; }