Correctly pause animation when paused in starting ScriptAction.
authorMichael Brasser <michael.brasser@nokia.com>
Mon, 1 Aug 2011 00:43:54 +0000 (10:43 +1000)
committerQt by Nokia <qt-info@nokia.com>
Mon, 1 Aug 2011 01:01:13 +0000 (03:01 +0200)
Task-number: QTBUG-13598
Change-Id: Ibd54f4e014eff301b57451081b7f7b35d1bed740
Reviewed-on: http://codereview.qt.nokia.com/2408
Reviewed-by: Charles Yin <charles.yin@nokia.com>
src/declarative/util/qdeclarativeanimation.cpp
src/qtquick1/util/qdeclarativeanimation.cpp
tests/auto/declarative/qdeclarativeanimations/data/pauseBug.qml [new file with mode: 0644]
tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp
tests/auto/qtquick1/qdeclarativeanimations/data/pauseBug.qml [new file with mode: 0644]
tests/auto/qtquick1/qdeclarativeanimations/tst_qdeclarativeanimations.cpp

index 56867d8..977f7fa 100644 (file)
@@ -159,7 +159,7 @@ void QDeclarativeAbstractAnimationPrivate::commence()
     q->transition(actions, properties, QDeclarativeAbstractAnimation::Forward);
 
     q->qtAnimation()->start();
-    if (q->qtAnimation()->state() != QAbstractAnimation::Running) {
+    if (q->qtAnimation()->state() == QAbstractAnimation::Stopped) {
         running = false;
         emit q->completed();
     }
index 46c3f15..89b768b 100644 (file)
@@ -162,7 +162,7 @@ void QDeclarative1AbstractAnimationPrivate::commence()
     q->transition(actions, properties, QDeclarative1AbstractAnimation::Forward);
 
     q->qtAnimation()->start();
-    if (q->qtAnimation()->state() != QAbstractAnimation::Running) {
+    if (q->qtAnimation()->state() == QAbstractAnimation::Stopped) {
         running = false;
         emit q->completed();
     }
diff --git a/tests/auto/declarative/qdeclarativeanimations/data/pauseBug.qml b/tests/auto/declarative/qdeclarativeanimations/data/pauseBug.qml
new file mode 100644 (file)
index 0000000..fa2c4be
--- /dev/null
@@ -0,0 +1,7 @@
+import QtQuick 2.0
+
+SequentialAnimation {
+    id: animation
+    running: true
+    ScriptAction { script: animation.paused = true }
+}
index 6461b69..bd9c3e0 100644 (file)
@@ -90,6 +90,7 @@ private slots:
     void alwaysRunToEndRestartBug();
     void transitionAssignmentBug();
     void pauseBindingBug();
+    void pauseBug();
 };
 
 #define QTIMED_COMPARE(lhs, rhs) do { \
@@ -872,6 +873,21 @@ void tst_qdeclarativeanimations::pauseBindingBug()
     delete rect;
 }
 
+//QTBUG-13598
+void tst_qdeclarativeanimations::pauseBug()
+{
+    QDeclarativeEngine engine;
+
+    QDeclarativeComponent c(&engine, SRCDIR "/data/pauseBug.qml");
+    QDeclarativeAbstractAnimation *anim = qobject_cast<QDeclarativeAbstractAnimation*>(c.create());
+    QVERIFY(anim != 0);
+    QCOMPARE(anim->qtAnimation()->state(), QAbstractAnimation::Paused);
+    QCOMPARE(anim->isPaused(), true);
+    QCOMPARE(anim->isRunning(), true);
+
+    delete anim;
+}
+
 QTEST_MAIN(tst_qdeclarativeanimations)
 
 #include "tst_qdeclarativeanimations.moc"
diff --git a/tests/auto/qtquick1/qdeclarativeanimations/data/pauseBug.qml b/tests/auto/qtquick1/qdeclarativeanimations/data/pauseBug.qml
new file mode 100644 (file)
index 0000000..d514cf7
--- /dev/null
@@ -0,0 +1,7 @@
+import QtQuick 1.1
+
+SequentialAnimation {
+    id: animation
+    running: true
+    ScriptAction { script: animation.paused = true }
+}
index 228f4fd..53e5502 100644 (file)
@@ -89,6 +89,7 @@ private slots:
     void doubleRegistrationBug();
     void alwaysRunToEndRestartBug();
     void transitionAssignmentBug();
+    void pauseBug();
 };
 
 #define QTIMED_COMPARE(lhs, rhs) do { \
@@ -863,6 +864,21 @@ void tst_qdeclarativeanimations::transitionAssignmentBug()
     QCOMPARE(rect->property("nullObject").toBool(), false);
 }
 
+//QTBUG-13598
+void tst_qdeclarativeanimations::pauseBug()
+{
+    QDeclarativeEngine engine;
+
+    QDeclarativeComponent c(&engine, SRCDIR "/data/pauseBug.qml");
+    QDeclarative1AbstractAnimation *anim = qobject_cast<QDeclarative1AbstractAnimation*>(c.create());
+    QVERIFY(anim != 0);
+    QCOMPARE(anim->qtAnimation()->state(), QAbstractAnimation::Paused);
+    QCOMPARE(anim->isPaused(), true);
+    QCOMPARE(anim->isRunning(), true);
+
+    delete anim;
+}
+
 QTEST_MAIN(tst_qdeclarativeanimations)
 
 #include "tst_qdeclarativeanimations.moc"