summaryrefslogtreecommitdiff
path: root/libsowatch
diff options
context:
space:
mode:
Diffstat (limited to 'libsowatch')
-rw-r--r--libsowatch/declarativewatchlet.cpp9
-rw-r--r--libsowatch/graphicswatchlet.cpp18
-rw-r--r--libsowatch/graphicswatchlet.h9
-rw-r--r--libsowatch/libsowatch.pro4
-rw-r--r--libsowatch/testdeclarativewatchlet.cpp9
-rw-r--r--libsowatch/testdeclarativewatchlet.h19
-rw-r--r--libsowatch/watchpaintengine.cpp31
-rw-r--r--libsowatch/watchpaintengine.h12
-rw-r--r--libsowatch/watchserver.cpp12
9 files changed, 65 insertions, 58 deletions
diff --git a/libsowatch/declarativewatchlet.cpp b/libsowatch/declarativewatchlet.cpp
index 60538f8..ca60fb0 100644
--- a/libsowatch/declarativewatchlet.cpp
+++ b/libsowatch/declarativewatchlet.cpp
@@ -66,15 +66,14 @@ QDeclarativeContext* DeclarativeWatchlet::rootContext()
void DeclarativeWatchlet::activate()
{
- Watchlet::activate();
+ GraphicsWatchlet::activate();
_wrapper->activate();
- _scene->update();
}
void DeclarativeWatchlet::deactivate()
{
- Watchlet::deactivate();
_wrapper->deactivate();
+ GraphicsWatchlet::deactivate();
}
void DeclarativeWatchlet::handleComponentStatus(QDeclarativeComponent::Status status)
@@ -90,7 +89,7 @@ void DeclarativeWatchlet::handleComponentStatus(QDeclarativeComponent::Status st
case QDeclarativeComponent::Ready:
obj = _component->create();
if (_component->isError()) {
- qWarning() << "QML has instantation errors:";
+ qWarning() << "QML has errors found while creating:";
qWarning() << _component->errors();
return;
}
@@ -99,7 +98,7 @@ void DeclarativeWatchlet::handleComponentStatus(QDeclarativeComponent::Status st
scene()->addItem(_item);
break;
case QDeclarativeComponent::Error:
- qWarning() << "QML has errors:";
+ qWarning() << "QML has errors found while loading:";
qWarning() << _component->errors();
break;
}
diff --git a/libsowatch/graphicswatchlet.cpp b/libsowatch/graphicswatchlet.cpp
index 538723a..195d11b 100644
--- a/libsowatch/graphicswatchlet.cpp
+++ b/libsowatch/graphicswatchlet.cpp
@@ -1,4 +1,5 @@
#include <QtCore/QDebug>
+#include <QtCore/QEvent>
#include <QtGui/QPainter>
#include "watch.h"
@@ -30,18 +31,25 @@ void GraphicsWatchlet::setScene(QGraphicsScene *scene)
void GraphicsWatchlet::sceneChanged(const QList<QRectF> &region)
{
- foreach(const QRectF& r, region)
- {
+ foreach(const QRectF& r, region) {
_damaged += r.toRect();
}
-
if (!_damaged.isEmpty() && _active && !watch()->busy()) {
const QVector<QRect> rects = _damaged.rects();
QPainter p(watch());
- foreach(const QRect& r, rects)
- {
+
+ foreach(const QRect& r, rects) {
_scene->render(&p, r, r, Qt::IgnoreAspectRatio);
}
_damaged = QRegion();
}
}
+
+void GraphicsWatchlet::activate()
+{
+ Watchlet::activate();
+ // We have to assume that the watch has completely forgot about everything.
+ QRect area(0, 0, watch()->width(), watch()->height());
+ _damaged += area;
+ _scene->update(area);
+}
diff --git a/libsowatch/graphicswatchlet.h b/libsowatch/graphicswatchlet.h
index 37752a9..3202631 100644
--- a/libsowatch/graphicswatchlet.h
+++ b/libsowatch/graphicswatchlet.h
@@ -18,13 +18,14 @@ public:
QGraphicsScene* scene();
void setScene(QGraphicsScene* scene);
-protected:
- QGraphicsScene* _scene;
- QRegion _damaged;
-
protected slots:
void sceneChanged(const QList<QRectF>& region);
+protected:
+ void activate();
+
+ QGraphicsScene* _scene;
+ QRegion _damaged;
};
}
diff --git a/libsowatch/libsowatch.pro b/libsowatch/libsowatch.pro
index 44458c2..5ab1f3b 100644
--- a/libsowatch/libsowatch.pro
+++ b/libsowatch/libsowatch.pro
@@ -20,7 +20,6 @@ SOURCES += \
watchlet.cpp \
watch.cpp \
testwatchlet.cpp \
- testdeclarativewatchlet.cpp \
graphicswatchlet.cpp \
declarativewatchwrapper.cpp \
declarativewatchlet.cpp \
@@ -37,7 +36,6 @@ HEADERS +=\
watchlet.h \
watch.h \
testwatchlet.h \
- testdeclarativewatchlet.h \
sowatch.h \
graphicswatchlet.h \
declarativewatchwrapper.h \
@@ -93,3 +91,5 @@ unix:!symbian {
+
+
diff --git a/libsowatch/testdeclarativewatchlet.cpp b/libsowatch/testdeclarativewatchlet.cpp
deleted file mode 100644
index 432d525..0000000
--- a/libsowatch/testdeclarativewatchlet.cpp
+++ /dev/null
@@ -1,9 +0,0 @@
-#include "testdeclarativewatchlet.h"
-
-using namespace sowatch;
-
-TestDeclarativeWatchlet::TestDeclarativeWatchlet(WatchServer* server) :
- DeclarativeWatchlet(server, "com.javispedro.sowatch.testdeclarativewatchlet")
-{
- setSource(QUrl("qrc:/testdeclarativewatchlet.qml"));
-}
diff --git a/libsowatch/testdeclarativewatchlet.h b/libsowatch/testdeclarativewatchlet.h
deleted file mode 100644
index a200663..0000000
--- a/libsowatch/testdeclarativewatchlet.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef SOWATCH_TESTDECLARATIVEWATCHLET_H
-#define SOWATCH_TESTDECLARATIVEWATCHLET_H
-
-#include "declarativewatchlet.h"
-
-namespace sowatch
-{
-
-class TestDeclarativeWatchlet : public DeclarativeWatchlet
-{
- Q_OBJECT
-public:
- explicit TestDeclarativeWatchlet(WatchServer* server);
-
-};
-
-}
-
-#endif // SOWATCH_TESTDECLARATIVEWATCHLET_H
diff --git a/libsowatch/watchpaintengine.cpp b/libsowatch/watchpaintengine.cpp
index 6c509cb..90ad8bf 100644
--- a/libsowatch/watchpaintengine.cpp
+++ b/libsowatch/watchpaintengine.cpp
@@ -1,19 +1,40 @@
#include <QtCore/QDebug>
#include <math.h>
-#include "watch.h"
#include "watchpaintengine.h"
using namespace sowatch;
-WatchPaintEngine::WatchPaintEngine(Watch* watch)
+WatchPaintEngine::WatchPaintEngine()
: QPaintEngine(QPaintEngine::AllFeatures),
- _watch(watch), _painter(),
- _hasPen(false), _hasBrush(false), _clipEnabled(false)
+ _painter()
{
}
+WatchPaintEngine::~WatchPaintEngine()
+{
+
+}
+
+bool WatchPaintEngine::begin(QPaintDevice *pdev)
+{
+ _damaged = QRegion();
+ _area = QRect(0, 0, pdev->width(), pdev->height());
+ _hasPen = false;
+ _penWidth = 0.0;
+ _hasBrush = false;
+ _clipEnabled = false;
+ _clipRegion = _area;
+
+ return _painter.begin(pdev);
+}
+
+bool WatchPaintEngine::end()
+{
+ return _painter.end();
+}
+
void WatchPaintEngine::damageMappedRect(const QRect &r)
{
if (_clipEnabled) {
@@ -57,7 +78,7 @@ void WatchPaintEngine::updateClipRegion(const QRegion& region, Qt::ClipOperation
switch(op) {
case Qt::NoClip:
_clipEnabled = false;
- _clipRegion = QRegion(0, 0, _watch->width(), _watch->height());
+ _clipRegion = _area;
break;
case Qt::ReplaceClip:
_clipEnabled = true;
diff --git a/libsowatch/watchpaintengine.h b/libsowatch/watchpaintengine.h
index 74d4e09..7a97ad7 100644
--- a/libsowatch/watchpaintengine.h
+++ b/libsowatch/watchpaintengine.h
@@ -6,12 +6,14 @@
namespace sowatch
{
-class Watch;
-
class WatchPaintEngine : public QPaintEngine
{
public:
- WatchPaintEngine(Watch* watch);
+ ~WatchPaintEngine();
+
+ /* You are supposed to override these two functions. */
+ bool begin(QPaintDevice *pdev);
+ bool end();
void drawEllipse(const QRectF &r);
void drawEllipse(const QRect &r);
@@ -33,15 +35,17 @@ public:
void updateState(const QPaintEngineState &state);
protected:
+ WatchPaintEngine();
+
void damageMappedRect(const QRect& r);
void damageRect(const QRect& r);
void damageRect(const QRectF& r);
void damagePenStroke(const QLineF& line);
void updateClipRegion(const QRegion& region, Qt::ClipOperation op);
- Watch* _watch;
QPainter _painter;
QRegion _damaged;
+ QRect _area;
bool _hasPen;
qreal _penWidth;
diff --git a/libsowatch/watchserver.cpp b/libsowatch/watchserver.cpp
index 07e4609..c81d937 100644
--- a/libsowatch/watchserver.cpp
+++ b/libsowatch/watchserver.cpp
@@ -68,6 +68,7 @@ void WatchServer::runWatchlet(const QString& id)
void WatchServer::closeWatchlet()
{
if (_currentWatchlet) {
+ qDebug() << "deactivating watchlet" << _currentWatchlet->id();
_currentWatchlet->deactivate();
_currentWatchlet = 0;
if (_watch->isConnected() && _pendingNotifications.empty()) {
@@ -183,13 +184,13 @@ void WatchServer::notificationReceived(Notification *notification)
connect(notification, SIGNAL(changed()), SLOT(notificationChanged()));
connect(notification, SIGNAL(cleared()), SLOT(notificationCleared()));
- qDebug() << "notification received" << notification->title() << notification->count();
+ qDebug() << "notification received" << notification->title() << "(" << notification->count() << ")";
_watch->updateNotificationCount(type, getNotificationCount(type));
QDateTime oldThreshold = QDateTime::currentDateTime().addSecs(-_oldNotificationThreshold);
if (notification->dateTime() < oldThreshold) {
- return; // Do not care about that old notifications...
+ return; // Do not care about notifications that old...
}
if (_pendingNotifications.isEmpty()) {
@@ -211,7 +212,7 @@ void WatchServer::notificationChanged()
Notification* n = static_cast<Notification*>(obj);
const Notification::Type type = n->type();
- qDebug() << "notification changed" << n->title() << n->count();
+ qDebug() << "notification changed" << n->title() << "(" << n->count() << ")";
_watch->updateNotificationCount(type, getNotificationCount(type));
if (!_pendingNotifications.isEmpty() && _pendingNotifications.head() == n) {
@@ -228,11 +229,12 @@ void WatchServer::notificationCleared()
const Notification::Type type = n->type();
_notifications[type].removeOne(n);
- qDebug() << "notification deleted" << n->title() << n->count();
+ qDebug() << "notification deleted" << n->title() << "(" << n->count() << ")";
_watch->updateNotificationCount(type, getNotificationCount(type));
- if (!_pendingNotifications.isEmpty() && _pendingNotifications.head() == n) {qDebug() << "removing top notification";
+ if (!_pendingNotifications.isEmpty() && _pendingNotifications.head() == n) {
+ qDebug() << "removing top notification";
_pendingNotifications.removeAll(n);
nextNotification();
} else {