diff options
author | Benjamin Poulain <benjamin.poulain@nokia.com> | 2010-02-15 13:35:50 (GMT) |
---|---|---|
committer | Benjamin Poulain <benjamin.poulain@nokia.com> | 2010-02-15 14:03:15 (GMT) |
commit | 1a5c3af0f3e75a518c27c6bdd3f58896a49b167e (patch) | |
tree | f23ec6c187335bcd77c5469184463cfdb6d52c63 /demos/composition/composition.cpp | |
parent | c1fe9ae25aebc8d1b9c4a7f3e67fa25ecdcbadc8 (diff) | |
download | Qt-1a5c3af0f3e75a518c27c6bdd3f58896a49b167e.zip Qt-1a5c3af0f3e75a518c27c6bdd3f58896a49b167e.tar.gz Qt-1a5c3af0f3e75a518c27c6bdd3f58896a49b167e.tar.bz2 |
Update the composition demo at 60 FPS instead of at painting rate
The Composition demo was updating as fast as the possible
(update was called in the paint event). This is very CPU
intensive, making the demo look slow on slower computer.
The update is now made with a 16ms interval.
Reviewed-by: Gabriel de Dietrich
Diffstat (limited to 'demos/composition/composition.cpp')
-rw-r--r-- | demos/composition/composition.cpp | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/demos/composition/composition.cpp b/demos/composition/composition.cpp index e03f3e6..deca5dc 100644 --- a/demos/composition/composition.cpp +++ b/demos/composition/composition.cpp @@ -48,6 +48,8 @@ #include <QMouseEvent> #include <qmath.h> +const int animationInterval = 15; // update every 16 ms = ~60FPS + CompositionWidget::CompositionWidget(QWidget *parent) : QWidget(parent) { @@ -236,6 +238,7 @@ CompositionRenderer::CompositionRenderer(QWidget *parent) : ArthurFrame(parent) { m_animation_enabled = true; + m_animationTimer = startTimer(animationInterval); #ifdef Q_WS_QWS m_image = QPixmap(":res/composition/flower.jpg"); m_image.setAlphaChannel(QPixmap(":res/composition/flower_alpha.jpg")); @@ -264,6 +267,20 @@ QRectF rectangle_around(const QPointF &p, const QSizeF &size = QSize(250, 200)) return rect; } +void CompositionRenderer::setAnimationEnabled(bool enabled) +{ + if (m_animation_enabled == enabled) + return; + m_animation_enabled = enabled; + if (enabled) { + Q_ASSERT(!m_animationTimer); + m_animationTimer = startTimer(animationInterval); + } else { + killTimer(m_animationTimer); + m_animationTimer = 0; + } +} + void CompositionRenderer::updateCirclePos() { if (m_current_object != NoObject) @@ -471,10 +488,6 @@ void CompositionRenderer::paint(QPainter *painter) painter->drawImage(0, 0, m_buffer); #endif } - - if (m_animation_enabled && m_current_object == NoObject) { - updateCirclePos(); - } } void CompositionRenderer::mousePressEvent(QMouseEvent *e) @@ -489,6 +502,10 @@ void CompositionRenderer::mousePressEvent(QMouseEvent *e) } else { m_current_object = NoObject; } + if (m_animation_enabled) { + killTimer(m_animationTimer); + m_animationTimer = 0; + } } void CompositionRenderer::mouseMoveEvent(QMouseEvent *e) @@ -500,7 +517,15 @@ void CompositionRenderer::mouseReleaseEvent(QMouseEvent *) { m_current_object = NoObject; - if (m_animation_enabled) + if (m_animation_enabled) { + Q_ASSERT(!m_animationTimer); + m_animationTimer = startTimer(animationInterval); + } +} + +void CompositionRenderer::timerEvent(QTimerEvent *event) +{ + if (event->timerId() == m_animationTimer) updateCirclePos(); } |