(Vector) Change SetPlayRange and fix a crash
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / animated-vector-image / vector-animation-task.cpp
index 4d31135..302fce7 100644 (file)
@@ -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);
   }
 }
 
@@ -397,11 +401,7 @@ bool VectorAnimationTask::Rasterize(bool& keepAnimation)
 
     if(mLoadRequest)
     {
-      bool result = Load();
-      if(!result)
-      {
-        return false;
-      }
+      return Load();
     }
   }
 
@@ -652,27 +652,18 @@ void VectorAnimationTask::ApplyAnimationData()
 
 void VectorAnimationTask::OnUploadCompleted()
 {
-  mResourceReadySignal.Emit(true);
+  mResourceReadySignal.Emit(ResourceStatus::READY);
 }
 
 void VectorAnimationTask::OnLoadCompleted()
 {
   if(!mLoadFailed)
   {
-    if(mWidth == 0 && mHeight == 0)
-    {
-      uint32_t width, height;
-      mVectorRenderer.GetDefaultSize(width, height);
-
-      SetSize(width, height);
-
-      mVectorAnimationThread.AddTask(this);
-    }
+    mResourceReadySignal.Emit(ResourceStatus::LOADED);
   }
   else
   {
-    // Load failed
-    mResourceReadySignal.Emit(false);
+    mResourceReadySignal.Emit(ResourceStatus::FAILED);
   }
 }
 } // namespace Internal