From e7726056b3fb75805238c9ce0f2c19e0fb0fded9 Mon Sep 17 00:00:00 2001 From: subhransu mohanty Date: Fri, 13 Jul 2018 11:26:17 +0900 Subject: [PATCH] lottie/model: Fixed hold interpolation issue. Change-Id: I0db56ec46a9f6fec04311d9c96dcea680e29ab5b --- src/lottie/lottiemodel.h | 14 +++----------- src/lottie/lottieparser.cpp | 8 ++------ 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/src/lottie/lottiemodel.h b/src/lottie/lottiemodel.h index 7ae6b81..9265dda 100644 --- a/src/lottie/lottiemodel.h +++ b/src/lottie/lottiemodel.h @@ -241,28 +241,20 @@ template 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> mKeyFrames; - int mStartFrame; - int mEndFrame; }; template diff --git a/src/lottie/lottieparser.cpp b/src/lottie/lottieparser.cpp index 68b9314..5ff3451 100644 --- a/src/lottie/lottieparser.cpp +++ b/src/lottie/lottieparser.cpp @@ -1649,6 +1649,7 @@ void LottieParserImpl::parseKeyFrame(LOTAnimInfo &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 &obj) keyframe.mInterpolator = std::make_shared(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); } -- 2.7.4