diff options
-rw-r--r-- | src/quick/items/qquickanimatedsprite.cpp | 8 | ||||
-rw-r--r-- | tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp | 24 |
2 files changed, 24 insertions, 8 deletions
diff --git a/src/quick/items/qquickanimatedsprite.cpp b/src/quick/items/qquickanimatedsprite.cpp index bf5d452f34..3aaec53c54 100644 --- a/src/quick/items/qquickanimatedsprite.cpp +++ b/src/quick/items/qquickanimatedsprite.cpp @@ -577,7 +577,7 @@ void QQuickAnimatedSprite::prepareNextFrame() double frameAt; //double just for modf qreal progress = 0.0; int lastFrame = m_curFrame; - if (!m_paused) { + if (m_running && !m_paused) { //Advance State (keeps time for psuedostates) m_spriteEngine->updateSprites(timeInt); @@ -607,10 +607,8 @@ void QQuickAnimatedSprite::prepareNextFrame() } if (m_loops > 0 && m_curLoop >= m_loops) { frameAt = 0; - if (m_running) { - m_running = false; - emit runningChanged(false); - } + m_running = false; + emit runningChanged(false); } } else { frameAt = m_curFrame; diff --git a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp index b1b02d5d69..cc5d8274d4 100644 --- a/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp +++ b/tests/auto/quick/qquickanimatedsprite/tst_qquickanimatedsprite.cpp @@ -109,21 +109,39 @@ void tst_qquickanimatedsprite::test_frameChangedSignal() window->setSource(testFileUrl("frameChange.qml")); window->show(); - QVERIFY(QTest::qWaitForWindowExposed(window)); QVERIFY(window->rootObject()); QQuickAnimatedSprite* sprite = window->rootObject()->findChild<QQuickAnimatedSprite*>("sprite"); + QSignalSpy frameChangedSpy(sprite, SIGNAL(currentFrameChanged(int))); QVERIFY(sprite); + QVERIFY(QTest::qWaitForWindowExposed(window)); QVERIFY(!sprite->running()); QVERIFY(!sprite->paused()); QCOMPARE(sprite->loops(), 3); QCOMPARE(sprite->frameCount(), 6); + QCOMPARE(frameChangedSpy.count(), 0); - QSignalSpy frameChangedSpy(sprite, SIGNAL(currentFrameChanged(int))); + frameChangedSpy.clear(); sprite->setRunning(true); - QTRY_COMPARE(frameChangedSpy.count(), 3*6); QTRY_VERIFY(!sprite->running()); + QCOMPARE(frameChangedSpy.count(), 3*6 + 1); + + int prevFrame = -1; + int loopCounter = 0; + int maxFrame = 0; + while (!frameChangedSpy.isEmpty()) { + QList<QVariant> args = frameChangedSpy.takeFirst(); + int frame = args.first().toInt(); + if (frame < prevFrame) { + ++loopCounter; + } else { + QVERIFY(frame > prevFrame); + } + maxFrame = qMax(frame, maxFrame); + prevFrame = frame; + } + QCOMPARE(loopCounter, 3); delete window; } |