aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items
diff options
context:
space:
mode:
authorTim Blechmann <tim@klingt.org>2015-08-31 10:16:29 +0200
committerJan Arve Sæther <jan-arve.saether@theqtcompany.com>2015-10-14 07:55:04 +0000
commit6aedee898e51804863f4e94f5bdcaece9398fe0a (patch)
tree39ba1a837127dee7d17f3b18ddc56b84933a3015 /src/quick/items
parent0789923f391f1e5bebe07b676a41c85a820b2533 (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.cpp20
-rw-r--r--src/quick/items/qquickanimatedsprite_p.h1
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();
}
}