summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJens Bache-Wiig <jens.bache-wiig@nokia.com>2010-09-16 14:40:07 +0200
committerJens Bache-Wiig <jens.bache-wiig@nokia.com>2010-09-16 14:40:07 +0200
commit82fe2213b6649fd0b8c68220cf4ef58b18176d2d (patch)
tree98a7aac8fb774c470e9f7e2da7e86dea671a219c
parent6127d0d9766278a69a7e5f372659852c66ae67c0 (diff)
Fixes to canvastimer
-rw-r--r--src/canvas.cpp36
-rw-r--r--src/canvas.h2
-rw-r--r--src/canvastimer.cpp36
-rw-r--r--src/canvastimer.h7
4 files changed, 47 insertions, 34 deletions
diff --git a/src/canvas.cpp b/src/canvas.cpp
index 36198b1..2aecc29 100644
--- a/src/canvas.cpp
+++ b/src/canvas.cpp
@@ -224,46 +224,22 @@ bool Canvas::save(const QString &filename) const
void Canvas::setTimeout(const QScriptValue &handler, long timeout)
{
- if (handler.isFunction()) {
- CanvasTimer *timer = new CanvasTimer(this, handler);
- m_activeTimers.append(timer);
- connect(timer, SIGNAL(timeout()), timer, SLOT(handleTimeout()));
- timer->setInterval(timeout);
- timer->setSingleShot(true);
- timer->start();
- }
+ if (handler.isFunction())
+ CanvasTimer::createTimer(this, handler, timeout, true);
}
void Canvas::setInterval(const QScriptValue &handler, long interval)
{
- if (handler.isFunction()) {
- CanvasTimer *timer = new CanvasTimer(this, handler);
- m_activeTimers.append(timer);
- connect(timer, SIGNAL(timeout()), timer, SLOT(handleTimeout()));
- timer->setInterval(interval);
- timer->start();
- }
-}
-
-void Canvas::clearTimer(const QScriptValue &handler, bool singleShot) {
- for(int i = 0; i< m_activeTimers.count(); ++i) {
- CanvasTimer *timer = m_activeTimers[i];
- if (timer->equals(handler) && timer->isSingleShot() == singleShot) {
- Q_ASSERT(timer->isActive());
- m_activeTimers.removeAt(i);
- timer->stop();
- timer->deleteLater();
- return;
- }
- }
+ if (handler.isFunction())
+ CanvasTimer::createTimer(this, handler, interval, false);
}
void Canvas::clearTimeout(const QScriptValue &handler)
{
- clearTimer(handler, true);
+ CanvasTimer::removeTimer(handler);
}
void Canvas::clearInterval(const QScriptValue &handler)
{
- clearTimer(handler, false);
+ CanvasTimer::removeTimer(handler);
}
diff --git a/src/canvas.h b/src/canvas.h
index 144eb6b..3c35c9c 100644
--- a/src/canvas.h
+++ b/src/canvas.h
@@ -97,13 +97,11 @@ Q_SIGNALS:
void paint();
private:
- void clearTimer(const QScriptValue &, bool singleShot);
Context2D *m_context;
int m_canvasWidth;
int m_canvasHeight;
FillMode m_fillMode;
QColor m_color;
- QList <CanvasTimer *> m_activeTimers;
};
#endif //CANVAS_H
diff --git a/src/canvastimer.cpp b/src/canvastimer.cpp
index 546ee96..e3492fd 100644
--- a/src/canvastimer.cpp
+++ b/src/canvastimer.cpp
@@ -43,6 +43,8 @@
#include "canvastimer.h"
+Q_GLOBAL_STATIC(QList<CanvasTimer*> , activeTimers);
+
CanvasTimer::CanvasTimer(QObject *parent, const QScriptValue &data)
: QTimer(parent), m_value(data)
{
@@ -52,8 +54,38 @@ void CanvasTimer::handleTimeout()
{
Q_ASSERT(m_value.isFunction());
m_value.call();
- if (!isActive()) {
- deleteLater();
+ if (isSingleShot()) {
+ removeTimer(this);
}
}
+void CanvasTimer::createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot)
+{
+
+ CanvasTimer *timer = new CanvasTimer(parent, val);
+ timer->setInterval(timeout);
+ timer->setSingleShot(singleshot);
+ connect(timer, SIGNAL(timeout()), timer, SLOT(handleTimeout()));
+ activeTimers()->append(timer);
+ timer->start();
+}
+
+void CanvasTimer::removeTimer(CanvasTimer *timer)
+{
+ activeTimers()->removeAll(timer);
+ timer->deleteLater();
+}
+
+void CanvasTimer::removeTimer(const QScriptValue &val)
+{
+ if (!val.isFunction())
+ return;
+
+ for (int i = 0 ; i < activeTimers()->count() ; ++i) {
+ CanvasTimer *timer = activeTimers()->at(i);
+ if (timer->equals(val)) {
+ removeTimer(timer);
+ return;
+ }
+ }
+}
diff --git a/src/canvastimer.h b/src/canvastimer.h
index b4d286b..044fb10 100644
--- a/src/canvastimer.h
+++ b/src/canvastimer.h
@@ -42,6 +42,7 @@
#include <QtScript/QScriptValue>
#include <QtCore/QTimer>
+#include <QtCore/QList>
class CanvasTimer : public QTimer
{
@@ -54,8 +55,14 @@ public Q_SLOTS:
void handleTimeout();
bool equals(const QScriptValue &value){return m_value.equals(value);}
+public:
+ static void createTimer(QObject *parent, const QScriptValue &val, long timeout, bool singleshot);
+ static void removeTimer(CanvasTimer *timer);
+ static void removeTimer(const QScriptValue &);
+
private:
QScriptValue m_value;
+
};
#endif // CANVASTIMER