diff options
author | Tim Blechmann <tim@klingt.org> | 2015-08-31 10:16:29 +0200 |
---|---|---|
committer | Jan Arve Sæther <jan-arve.saether@theqtcompany.com> | 2015-10-14 07:55:04 +0000 |
commit | 6aedee898e51804863f4e94f5bdcaece9398fe0a (patch) | |
tree | 39ba1a837127dee7d17f3b18ddc56b84933a3015 /src/quick/items | |
parent | 0789923f391f1e5bebe07b676a41c85a820b2533 (diff) |
AnimatedSprite: avoid unnecessary redraws
AnimatedSprite currently triggers a redraw for every update. however this
should only be done, when the next frame will actually be different to
the current one.
Change-Id: I550bd32c02807e4c3f4847fb2608f5ad0cf0a59a
Reviewed-by: Jan Arve Sæther <jan-arve.saether@theqtcompany.com>
Diffstat (limited to 'src/quick/items')
-rw-r--r-- | src/quick/items/qquickanimatedsprite.cpp | 20 | ||||
-rw-r--r-- | src/quick/items/qquickanimatedsprite_p.h | 1 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/quick/items/qquickanimatedsprite.cpp b/src/quick/items/qquickanimatedsprite.cpp index 5e653e426c..e37ed6c18c 100644 --- a/src/quick/items/qquickanimatedsprite.cpp +++ b/src/quick/items/qquickanimatedsprite.cpp @@ -374,6 +374,7 @@ void QQuickAnimatedSprite::stop() return; m_pauseOffset = 0; emit runningChanged(false); + update(); } /*! @@ -391,6 +392,7 @@ void QQuickAnimatedSprite::advance(int frames) m_curFrame += m_spriteEngine->maxFrames(); m_curFrame = m_curFrame % m_spriteEngine->maxFrames(); emit currentFrameChanged(m_curFrame); + update(); } /*! @@ -408,6 +410,7 @@ void QQuickAnimatedSprite::pause() m_pauseOffset = m_timestamp.elapsed(); m_paused = true; emit pausedChanged(true); + update(); } /*! @@ -425,6 +428,7 @@ void QQuickAnimatedSprite::resume() m_pauseOffset = m_pauseOffset - m_timestamp.elapsed(); m_paused = false; emit pausedChanged(false); + update(); } void QQuickAnimatedSprite::createEngine() @@ -436,6 +440,7 @@ void QQuickAnimatedSprite::createEngine() m_spriteEngine = new QQuickSpriteEngine(QList<QQuickSprite*>(spriteList), this); m_spriteEngine->startAssemblingImage(); reset(); + update(); } static QSGGeometry::Attribute AnimatedSprite_Attributes[] = { @@ -555,9 +560,12 @@ QSGNode *QQuickAnimatedSprite::updatePaintNode(QSGNode *, UpdatePaintNodeData *) prepareNextFrame(); if (m_running) { - update(); - if (m_node) + if (!m_paused) + update(); + + if (m_node) { m_node->markDirty(QSGNode::DirtyMaterial); + } } return m_node; @@ -614,12 +622,16 @@ void QQuickAnimatedSprite::prepareNextFrame() frameAt = 0; m_running = false; emit runningChanged(false); + update(); } } else { frameAt = m_curFrame; } - if (m_curFrame != lastFrame && isCurrentFrameChangedConnected()) - emit currentFrameChanged(m_curFrame); + if (m_curFrame != lastFrame) { + if (isCurrentFrameChangedConnected()) + emit currentFrameChanged(m_curFrame); + update(); + } qreal frameCount = m_spriteEngine->spriteFrames(); bool reverse = m_spriteEngine->sprite()->reverse(); diff --git a/src/quick/items/qquickanimatedsprite_p.h b/src/quick/items/qquickanimatedsprite_p.h index 4778afc88b..e535f1b077 100644 --- a/src/quick/items/qquickanimatedsprite_p.h +++ b/src/quick/items/qquickanimatedsprite_p.h @@ -333,6 +333,7 @@ public Q_SLOTS: if (m_curFrame != arg) { m_curFrame = arg; Q_EMIT currentFrameChanged(arg); //TODO-C Only emitted on manual advance! + update(); } } |