animator(void *data , double pos)
{
LottieView *view = static_cast<LottieView *>(data);
- float nextPos = pos + view->mStartPos;
- if (nextPos > 1.0) nextPos = 1.0;
- view->seek(nextPos);
- if (nextPos == 1.0) {
+ view->seek(pos);
+ if (pos == 1.0) {
view->mAnimator = NULL;
view->finished();
return EINA_FALSE;
{
if (!mPlayer) return;
- if (mPalying && mReverse)
- pos = 1.0 - pos;
- mPos = pos;
+ mPos = mapProgress(pos);
// check if the pos maps to the current frame
if (mCurFrame == mPlayer->frameAtPos(mPos)) return;
{
if (!mPlayer) return;
- mStartPos = mPos;
if (mAnimator) ecore_animator_del(mAnimator);
- mAnimator = ecore_animator_timeline_add(mPlayer->duration()/mSpeed, animator, this);
+ mAnimator = ecore_animator_timeline_add(duration()/mSpeed, animator, this);
mReverse = false;
mCurCount = mRepeatCount;
mPalying = true;
else
mReverse = false;
- mStartPos = 0;
if (mAnimator) ecore_animator_del(mAnimator);
- mAnimator = ecore_animator_timeline_add(mPlayer->duration()/mSpeed, animator, this);
+ mAnimator = ecore_animator_timeline_add(duration()/mSpeed, animator, this);
}
}