diff options
author | Javier S. Pedro <maemo@javispedro.com> | 2011-09-16 17:47:24 +0200 |
---|---|---|
committer | Javier <javier@pcjavier.(none)> | 2011-09-16 17:47:24 +0200 |
commit | aa1c0fd3146b4ed055d181c99d52463afa6bedbb (patch) | |
tree | f6fb8d9693ad8c545ddabf76312f8f33b5b9878f /metawatchpaintengine.cpp | |
download | sowatch-aa1c0fd3146b4ed055d181c99d52463afa6bedbb.tar.gz sowatch-aa1c0fd3146b4ed055d181c99d52463afa6bedbb.zip |
Initial import
Diffstat (limited to 'metawatchpaintengine.cpp')
-rw-r--r-- | metawatchpaintengine.cpp | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/metawatchpaintengine.cpp b/metawatchpaintengine.cpp new file mode 100644 index 0000000..96e78a7 --- /dev/null +++ b/metawatchpaintengine.cpp @@ -0,0 +1,75 @@ +#include "metawatch.h" +#include "metawatchpaintengine.h" + +using namespace sowatch; + +MetaWatchPaintEngine::MetaWatchPaintEngine(MetaWatch* watch, QImage* image) : + WatchPaintEngine(watch, image), _watch(watch), + _imageRect(image->rect()) +{ +} + +void MetaWatchPaintEngine::drawRects(const QRectF *rects, int rectCount) +{ + int i; + for (i = 0; i < rectCount; i++) { + const QRectF& r = rects[i]; + if (_hasBrush && r.toRect() == _imageRect && (_isBrushBlack | _isBrushWhite)) { + _watch->clear(_isBrushWhite); + _damaged = QRegion(); + continue; + } + if (_hasBrush) { + damageRect(r); + } + if (_hasPen) { + damagePenStroke(QLineF(r.left(), r.top(), r.right(), r.top())); + damagePenStroke(QLineF(r.right(), r.top(), r.right(), r.bottom())); + damagePenStroke(QLineF(r.left(), r.bottom(), r.right(), r.bottom())); + damagePenStroke(QLineF(r.left(), r.top(), r.left(), r.bottom())); + } + } + _painter.drawRects(rects, rectCount); +} + +void MetaWatchPaintEngine::drawRects(const QRect *rects, int rectCount) +{ + int i; + for (i = 0; i < rectCount; i++) { + const QRect& r = rects[i]; + if (_hasBrush && r == _imageRect && (_isBrushBlack | _isBrushWhite)) { + _watch->clear(_isBrushWhite); + _damaged = QRegion(); + continue; + } + if (_hasBrush) { + damageRect(r); + } + if (_hasPen) { + damagePenStroke(QLine(r.left(), r.top(), r.right(), r.top())); + damagePenStroke(QLine(r.right(), r.top(), r.right(), r.bottom())); + damagePenStroke(QLine(r.left(), r.bottom(), r.right(), r.bottom())); + damagePenStroke(QLine(r.left(), r.top(), r.left(), r.bottom())); + } + } + + _painter.drawRects(rects, rectCount); +} + +void MetaWatchPaintEngine::updateState(const QPaintEngineState &state) +{ + WatchPaintEngine::updateState(state); + if (state.state() & QPaintEngine::DirtyBrush) { + QBrush brush = state.brush(); + _isBrushBlack = false; + _isBrushWhite = false; + if (brush.style() == Qt::SolidPattern) { + const QColor color = brush.color(); + if (color == Qt::black) { + _isBrushBlack = true; + } else if (color == Qt::white) { + _isBrushWhite = true; + } + } + } +} |