aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/util
diff options
context:
space:
mode:
authorMichael Brasser <michael.brasser@jollamobile.com>2014-02-12 23:31:22 -0600
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-02-20 04:27:15 +0100
commit7da483bfbefcaabb1dbbf3e2f1d5b5f7aadc3b06 (patch)
tree30a6bdb4cf3d7275c3acf8ffcfaa5aae0b594819 /src/quick/util
parent587444f033cf51251f36321321ae358d187f37f9 (diff)
Make SmoothedAnimation and SpringAnimation smoothly transition again.
Fix regression introduced in Qt 5.0 when animation backend was rewritten. Task-number: QTBUG-36709 Change-Id: Ib8caa4bc6a38e3bb4c1d1d3961f775fdd2b342c7 Reviewed-by: Martin Jones <martin.jones@jollamobile.com>
Diffstat (limited to 'src/quick/util')
-rw-r--r--src/quick/util/qquicksmoothedanimation.cpp18
-rw-r--r--src/quick/util/qquicksmoothedanimation_p_p.h4
-rw-r--r--src/quick/util/qquickspringanimation.cpp24
3 files changed, 24 insertions, 22 deletions
diff --git a/src/quick/util/qquicksmoothedanimation.cpp b/src/quick/util/qquicksmoothedanimation.cpp
index 9e9e6cb419..a0e6c36830 100644
--- a/src/quick/util/qquicksmoothedanimation.cpp
+++ b/src/quick/util/qquicksmoothedanimation.cpp
@@ -43,6 +43,7 @@
#include "qquicksmoothedanimation_p_p.h"
#include "qquickanimation_p_p.h"
+#include "private/qcontinuinganimationgroupjob_p.h"
#include <qqmlproperty.h>
#include <private/qqmlproperty_p.h>
@@ -78,7 +79,7 @@ QSmoothedAnimation::QSmoothedAnimation(QQuickSmoothedAnimationPrivate *priv)
: QAbstractAnimationJob(), to(0), velocity(200), userDuration(-1), maximumEasingTime(-1),
reversingMode(QQuickSmoothedAnimation::Eased), initialVelocity(0),
trackVelocity(0), initialValue(0), invert(false), finalDuration(-1), lastTime(0),
- useDelta(false), delayedStopTimer(new QSmoothedAnimationTimer(this)), animationTemplate(priv)
+ skipUpdate(false), delayedStopTimer(new QSmoothedAnimationTimer(this)), animationTemplate(priv)
{
delayedStopTimer->setInterval(DELAY_STOP_TIMER_INTERVAL);
delayedStopTimer->setSingleShot(true);
@@ -120,11 +121,11 @@ void QSmoothedAnimation::prepareForRestart()
initialVelocity = trackVelocity;
if (isRunning()) {
//we are joining a new wrapper group while running, our times need to be restarted
- useDelta = true;
+ skipUpdate = true;
init();
lastTime = 0;
} else {
- useDelta = false;
+ skipUpdate = false;
//we'll be started when the group starts, which will force an init()
}
}
@@ -242,12 +243,15 @@ qreal QSmoothedAnimation::easeFollow(qreal time_seconds)
void QSmoothedAnimation::updateCurrentTime(int t)
{
+ if (skipUpdate) {
+ skipUpdate = false;
+ return;
+ }
+
if (!isRunning() && !isPaused()) // This can happen if init() stops the animation in some cases
return;
- qreal time_seconds = useDelta ? qreal(QQmlAnimationTimer::instance()->currentDelta()) / 1000. : qreal(t - lastTime) / 1000.;
- if (useDelta)
- useDelta = false;
+ qreal time_seconds = qreal(t - lastTime) / 1000.;
qreal value = easeFollow(time_seconds);
value *= (invert? -1.0: 1.0);
@@ -403,7 +407,7 @@ QAbstractAnimationJob* QQuickSmoothedAnimation::transition(QQuickStateActions &a
QQuickStateActions dataActions = QQuickPropertyAnimation::createTransitionActions(actions, modified, defaultTarget);
- QParallelAnimationGroupJob *wrapperGroup = new QParallelAnimationGroupJob();
+ QContinuingAnimationGroupJob *wrapperGroup = new QContinuingAnimationGroupJob();
if (!dataActions.isEmpty()) {
QSet<QAbstractAnimationJob*> anims;
diff --git a/src/quick/util/qquicksmoothedanimation_p_p.h b/src/quick/util/qquicksmoothedanimation_p_p.h
index 4391ea81ac..7835d0328b 100644
--- a/src/quick/util/qquicksmoothedanimation_p_p.h
+++ b/src/quick/util/qquicksmoothedanimation_p_p.h
@@ -58,8 +58,6 @@
#include "qquickanimation_p_p.h"
-#include "private/qparallelanimationgroupjob_p.h"
-
#include <private/qobject_p.h>
#include <QBasicTimer>
@@ -129,7 +127,7 @@ private:
qreal s; // Total s
int lastTime;
- bool useDelta;
+ bool skipUpdate;
bool recalc();
void delayedStop();
diff --git a/src/quick/util/qquickspringanimation.cpp b/src/quick/util/qquickspringanimation.cpp
index 36aae36459..f237c09bf9 100644
--- a/src/quick/util/qquickspringanimation.cpp
+++ b/src/quick/util/qquickspringanimation.cpp
@@ -43,7 +43,7 @@
#include "qquickanimation_p_p.h"
#include <private/qqmlproperty_p.h>
-#include "private/qparallelanimationgroupjob_p.h"
+#include "private/qcontinuinganimationgroupjob_p.h"
#include <QtCore/qdebug.h>
@@ -93,7 +93,7 @@ public:
bool useMass : 1;
bool haveModulus : 1;
- bool useDelta : 1;
+ bool skipUpdate : 1;
typedef QHash<QQmlProperty, QSpringAnimation*> ActiveAnimationHash;
void clearTemplate() { animationTemplate = 0; }
@@ -160,7 +160,7 @@ QSpringAnimation::QSpringAnimation(QQuickSpringAnimationPrivate *priv)
, modulus(0.0)
, useMass(false)
, haveModulus(false)
- , useDelta(false)
+ , skipUpdate(false)
, animationTemplate(priv)
{
}
@@ -194,11 +194,10 @@ int QSpringAnimation::duration() const
void QSpringAnimation::restart()
{
if (isRunning() || (stopTime != -1 && (animationTemplate->elapsed.elapsed() - stopTime) < DELAY_STOP_TIMER_INTERVAL)) {
- useDelta = true;
+ skipUpdate = true;
init();
- lastTime = 0;
} else {
- useDelta = false;
+ skipUpdate = false;
//init() will be triggered when group starts
}
}
@@ -211,16 +210,17 @@ void QSpringAnimation::init()
void QSpringAnimation::updateCurrentTime(int time)
{
+ if (skipUpdate) {
+ skipUpdate = false;
+ return;
+ }
+
if (mode == Track) {
stop();
return;
}
- int elapsed = useDelta ? QQmlAnimationTimer::instance()->currentDelta() : time - lastTime;
- if (useDelta) {
- startTime = time - elapsed;
- useDelta = false;
- }
+ int elapsed = time - lastTime;
if (!elapsed)
return;
@@ -534,7 +534,7 @@ QAbstractAnimationJob* QQuickSpringAnimation::transition(QQuickStateActions &act
Q_D(QQuickSpringAnimation);
Q_UNUSED(direction);
- QParallelAnimationGroupJob *wrapperGroup = new QParallelAnimationGroupJob();
+ QContinuingAnimationGroupJob *wrapperGroup = new QContinuingAnimationGroupJob();
QQuickStateActions dataActions = QQuickNumberAnimation::createTransitionActions(actions, modified, defaultTarget);
if (!dataActions.isEmpty()) {