From 9bc7e70c00736678d1430190566d2575c2ec764a Mon Sep 17 00:00:00 2001 From: Michael Brasser Date: Mon, 1 Aug 2011 10:43:54 +1000 Subject: [PATCH] Correctly pause animation when paused in starting ScriptAction. Task-number: QTBUG-13598 Change-Id: Ibd54f4e014eff301b57451081b7f7b35d1bed740 Reviewed-on: http://codereview.qt.nokia.com/2408 Reviewed-by: Charles Yin --- src/declarative/util/qdeclarativeanimation.cpp | 2 +- src/qtquick1/util/qdeclarativeanimation.cpp | 2 +- .../qdeclarativeanimations/data/pauseBug.qml | 7 +++++++ .../tst_qdeclarativeanimations.cpp | 16 ++++++++++++++++ .../qdeclarativeanimations/data/pauseBug.qml | 7 +++++++ .../tst_qdeclarativeanimations.cpp | 16 ++++++++++++++++ 6 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qdeclarativeanimations/data/pauseBug.qml create mode 100644 tests/auto/qtquick1/qdeclarativeanimations/data/pauseBug.qml diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp index 56867d8..977f7fa 100644 --- a/src/declarative/util/qdeclarativeanimation.cpp +++ b/src/declarative/util/qdeclarativeanimation.cpp @@ -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(); } diff --git a/src/qtquick1/util/qdeclarativeanimation.cpp b/src/qtquick1/util/qdeclarativeanimation.cpp index 46c3f15..89b768b 100644 --- a/src/qtquick1/util/qdeclarativeanimation.cpp +++ b/src/qtquick1/util/qdeclarativeanimation.cpp @@ -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 index 0000000..fa2c4be --- /dev/null +++ b/tests/auto/declarative/qdeclarativeanimations/data/pauseBug.qml @@ -0,0 +1,7 @@ +import QtQuick 2.0 + +SequentialAnimation { + id: animation + running: true + ScriptAction { script: animation.paused = true } +} diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index 6461b69..bd9c3e0 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -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(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 index 0000000..d514cf7 --- /dev/null +++ b/tests/auto/qtquick1/qdeclarativeanimations/data/pauseBug.qml @@ -0,0 +1,7 @@ +import QtQuick 1.1 + +SequentialAnimation { + id: animation + running: true + ScriptAction { script: animation.paused = true } +} diff --git a/tests/auto/qtquick1/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/qtquick1/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index 228f4fd..53e5502 100644 --- a/tests/auto/qtquick1/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/qtquick1/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -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(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" -- 1.7.2.5