Makes QSmoothedAnimation respect zero duration.
authorThomas Kristensen <thkriste@cisco.com>
Mon, 11 Mar 2013 11:54:56 +0000 (12:54 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Wed, 13 Mar 2013 06:06:20 +0000 (07:06 +0100)
In automated GUI test scenarios it often desired not to wait for animations
before verifying a result, so setting the duration to zero should accomplish
this, before this patch; if duration was set to zero QSmoothedAnimation
would treat it as if duration was not set, and used velocity to calculate
animation speed.

Change-Id: Ia57f1c9ffdd2056ac7c85d1cb94dbd3835fcbb7a
Reviewed-by: Andreas Aardal Hanssen <andreas@hanssen.name>

src/quick/util/qquicksmoothedanimation.cpp
tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml [new file with mode: 0644]
tests/auto/quick/qquicksmoothedanimation/tst_qquicksmoothedanimation.cpp

index 021ff75..9dd9aa2 100644 (file)
@@ -153,10 +153,10 @@ bool QSmoothedAnimation::recalc()
 
     s = (invert? -1.0: 1.0) * s;
 
-    if (userDuration > 0 && velocity > 0) {
+    if (userDuration >= 0 && velocity > 0) {
         tf = s / velocity;
         if (tf > (userDuration / 1000.)) tf = (userDuration / 1000.);
-    } else if (userDuration > 0) {
+    } else if (userDuration >= 0) {
         tf = userDuration / 1000.;
     } else if (velocity > 0) {
         tf = s / velocity;
diff --git a/tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml b/tests/auto/quick/qquicksmoothedanimation/data/smoothedanimationZeroDuration.qml
new file mode 100644 (file)
index 0000000..d0183ad
--- /dev/null
@@ -0,0 +1,12 @@
+import QtQuick 2.0
+
+Rectangle {
+    width: 300; height: 300;
+    Rectangle {
+        objectName: "theRect"
+        color: "red"
+        width: 60; height: 60;
+        x: 100; y: 100;
+        SmoothedAnimation on x { objectName: "easeX"; to: 200; duration: 0 }
+    }
+}
index 935543c..705ee5c 100644 (file)
@@ -60,6 +60,7 @@ private slots:
     void valueSource();
     void behavior();
     void deleteOnUpdate();
+    void zeroDuration();
 
 private:
     QQmlEngine engine;
@@ -237,6 +238,28 @@ void tst_qquicksmoothedanimation::deleteOnUpdate()
     delete rect;
 }
 
+void tst_qquicksmoothedanimation::zeroDuration()
+{
+    QQmlEngine engine;
+
+    QQmlComponent c(&engine, testFileUrl("smoothedanimationZeroDuration.qml"));
+
+    QQuickRectangle *rect = qobject_cast<QQuickRectangle*>(c.create());
+    QVERIFY(rect);
+
+    QQuickRectangle *theRect = rect->findChild<QQuickRectangle*>("theRect");
+    QVERIFY(theRect);
+
+    QQuickSmoothedAnimation *easeX = rect->findChild<QQuickSmoothedAnimation*>("easeX");
+    QVERIFY(easeX);
+    QVERIFY(easeX->isRunning());
+
+    QTRY_VERIFY(!easeX->isRunning());
+    QTRY_COMPARE(theRect->x(), qreal(200));
+
+    delete rect;
+}
+
 QTEST_MAIN(tst_qquicksmoothedanimation)
 
 #include "tst_qquicksmoothedanimation.moc"