lottie/model: Fixed hold interpolation issue. 96/183996/1
authorsubhransu mohanty <sub.mohanty@samsung.com>
Fri, 13 Jul 2018 02:26:17 +0000 (11:26 +0900)
committersubhransu mohanty <sub.mohanty@samsung.com>
Fri, 13 Jul 2018 02:26:17 +0000 (11:26 +0900)
Change-Id: I0db56ec46a9f6fec04311d9c96dcea680e29ab5b

src/lottie/lottiemodel.h
src/lottie/lottieparser.cpp

index 7ae6b81..9265dda 100644 (file)
@@ -241,28 +241,20 @@ template<typename T>
 class LOTAnimInfo
 {
 public:
-    bool hasKeyFrame(int frameNo) {
-        if (frameNo >= mStartFrame && frameNo <= mEndFrame)
-            return true;
-        else
-            return false;
-    }
     T value(int frameNo) const {
-        if (mStartFrame >= frameNo)
+        if (mKeyFrames.front().mStartFrame >= frameNo)
             return mKeyFrames.front().mStartValue;
-        if(mEndFrame <= frameNo)
+        if(mKeyFrames.back().mEndFrame <= frameNo)
             return mKeyFrames.back().mEndValue;
 
         for(auto keyFrame : mKeyFrames) {
-            if (frameNo >= keyFrame.mStartFrame && frameNo <= keyFrame.mEndFrame)
+            if (frameNo >= keyFrame.mStartFrame && frameNo < keyFrame.mEndFrame)
                 return keyFrame.value(frameNo);
         }
         return T();
     }
 public:
     std::vector<LOTKeyFrame<T>>    mKeyFrames;
-    int                            mStartFrame;
-    int                            mEndFrame;
 };
 
 template<typename T>
index 68b9314..5ff3451 100644 (file)
@@ -1649,6 +1649,7 @@ void LottieParserImpl::parseKeyFrame(LOTAnimInfo<T> &obj)
          inTangent = VPointF();
          outTangent = VPointF();
          keyframe.mEndValue = keyframe.mStartValue;
+         keyframe.mEndFrame = keyframe.mStartFrame;
      }
 
      // Try to find the interpolator from cache
@@ -1660,13 +1661,8 @@ void LottieParserImpl::parseKeyFrame(LOTAnimInfo<T> &obj)
              keyframe.mInterpolator = std::make_shared<VInterpolator>(VInterpolator(inTangent, outTangent));
              compRef->mInterpolatorCache[interpolatorKey] = keyframe.mInterpolator;
          }
-     } else {
-         /* this is the last key frame. update the first and last frame of this property */
-         obj.mStartFrame = obj.mKeyFrames.front().mStartFrame;
-         obj.mEndFrame = keyframe.mStartFrame;
-         return;
+         obj.mKeyFrames.push_back(keyframe);
      }
-   obj.mKeyFrames.push_back(keyframe);
 }