From be49c10b77ff997a7f1395d9e4e80eab02a2b387 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Tue, 22 Apr 2014 16:24:06 +0200 Subject: Reset loop counters when animations are started. Where normal animations would derive the current loop from the current time, uncontrolled animations use an iterative approach and which was not reset when an animation was restarted or a parent had a loop around it. Change-Id: Ia7a1880c8b7578463dff4c5ddeab48324bcb32ee Reviewed-by: Michael Brasser --- src/qml/animations/qabstractanimationjob.cpp | 1 + src/qml/animations/qparallelanimationgroupjob.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src/qml/animations') diff --git a/src/qml/animations/qabstractanimationjob.cpp b/src/qml/animations/qabstractanimationjob.cpp index 0928c0efc1..991b1fad5c 100644 --- a/src/qml/animations/qabstractanimationjob.cpp +++ b/src/qml/animations/qabstractanimationjob.cpp @@ -380,6 +380,7 @@ void QAbstractAnimationJob::setState(QAbstractAnimationJob::State newState) { // this ensures that the value is updated now that the animation is running if (oldState == Stopped) { + m_currentLoop = 0; if (isTopLevel) { // currentTime needs to be updated if pauseTimer is active RETURN_IF_DELETED(QQmlAnimationTimer::ensureTimerUpdate()); diff --git a/src/qml/animations/qparallelanimationgroupjob.cpp b/src/qml/animations/qparallelanimationgroupjob.cpp index f66d4b1826..f3ea389469 100644 --- a/src/qml/animations/qparallelanimationgroupjob.cpp +++ b/src/qml/animations/qparallelanimationgroupjob.cpp @@ -142,8 +142,10 @@ void QParallelAnimationGroupJob::updateState(QAbstractAnimationJob::State newSta break; case Running: for (QAbstractAnimationJob *animation = firstChild(); animation; animation = animation->nextSibling()) { - if (oldState == Stopped) + if (oldState == Stopped) { animation->stop(); + m_previousLoop = m_direction == Forward ? 0 : m_loopCount - 1; + } resetUncontrolledAnimationFinishTime(animation); animation->setDirection(m_direction); if (shouldAnimationStart(animation, oldState == Stopped)) -- cgit v1.2.3