diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/context2d.cpp | 116 | ||||
-rw-r--r-- | src/context2d.h | 8 |
2 files changed, 22 insertions, 102 deletions
diff --git a/src/context2d.cpp b/src/context2d.cpp index 05713a2..c1e5708 100644 --- a/src/context2d.cpp +++ b/src/context2d.cpp @@ -465,7 +465,6 @@ void Context2D::clearRect(qreal x, qreal y, qreal w, qreal h) m_painter->setCompositionMode(QPainter::CompositionMode_Source); m_painter->fillRect(QRectF(x, y, w, h), QColor(0, 0, 0, 0)); m_painter->restore(); - scheduleChange(); } void Context2D::fillRect(qreal x, qreal y, qreal w, qreal h) @@ -475,7 +474,6 @@ void Context2D::fillRect(qreal x, qreal y, qreal w, qreal h) m_painter->setMatrix(m_state.matrix, false); m_painter->fillRect(QRectF(x, y, w, h), m_painter->brush()); m_painter->restore(); - scheduleChange(); } void Context2D::strokeRect(qreal x, qreal y, qreal w, qreal h) @@ -487,7 +485,6 @@ void Context2D::strokeRect(qreal x, qreal y, qreal w, qreal h) m_painter->setMatrix(m_state.matrix, false); m_painter->strokePath(path, m_painter->pen()); m_painter->restore(); - scheduleChange(); } @@ -603,7 +600,6 @@ void Context2D::fill() { beginPainting(); m_painter->fillPath(m_path, m_painter->brush()); - scheduleChange(); } @@ -615,7 +611,6 @@ void Context2D::stroke() QPainterPath tmp = m_state.matrix.inverted().map(m_path); m_painter->strokePath(tmp, m_painter->pen()); m_painter->restore(); - scheduleChange(); } @@ -655,65 +650,36 @@ Context2D::Context2D(QObject *parent, QPainter *painter) reset(); } -const QImage &Context2D::endPainting() -{ - if (m_painter->isActive()) - m_painter->end(); - return m_image; -} - void Context2D::beginPainting() { - - if (!m_painter->isActive()) { - // m_painter->begin(&m_image); - m_painter->setRenderHint(QPainter::Antialiasing); - if (!m_state.clipPath.isEmpty()) - m_painter->setClipPath(m_state.clipPath); + if ((m_state.flags & DirtyClippingRegion) && !m_state.clipPath.isEmpty()) + m_painter->setClipPath(m_state.clipPath); + if (m_state.flags & DirtyFillStyle) m_painter->setBrush(m_state.fillStyle); + if (m_state.flags & DirtyGlobalAlpha) m_painter->setOpacity(m_state.globalAlpha); - QPen pen; - pen.setBrush(m_state.strokeStyle); - if (pen.style() == Qt::NoPen) - pen.setStyle(Qt::SolidLine); - pen.setCapStyle(m_state.lineCap); - pen.setJoinStyle(m_state.lineJoin); - pen.setWidthF(m_state.lineWidth); - pen.setMiterLimit(m_state.miterLimit); + if (m_state.flags & DirtyGlobalCompositeOperation) + m_painter->setCompositionMode(m_state.globalCompositeOperation); + if (m_state.flags & MDirtyPen) { + QPen pen = m_painter->pen(); + if (m_state.flags & DirtyStrokeStyle) + pen.setBrush(m_state.strokeStyle); + if (m_state.flags & DirtyLineWidth) + pen.setWidthF(m_state.lineWidth); + if (m_state.flags & DirtyLineCap) + pen.setCapStyle(m_state.lineCap); + if (m_state.flags & DirtyLineJoin) + pen.setJoinStyle(m_state.lineJoin); + if (m_state.flags & DirtyMiterLimit) + pen.setMiterLimit(m_state.miterLimit); m_painter->setPen(pen); - } else { - if ((m_state.flags & DirtyClippingRegion) && !m_state.clipPath.isEmpty()) - m_painter->setClipPath(m_state.clipPath); - if (m_state.flags & DirtyFillStyle) - m_painter->setBrush(m_state.fillStyle); - if (m_state.flags & DirtyGlobalAlpha) - m_painter->setOpacity(m_state.globalAlpha); - if (m_state.flags & DirtyGlobalCompositeOperation) - m_painter->setCompositionMode(m_state.globalCompositeOperation); - if (m_state.flags & MDirtyPen) { - QPen pen = m_painter->pen(); - if (m_state.flags & DirtyStrokeStyle) - pen.setBrush(m_state.strokeStyle); - if (m_state.flags & DirtyLineWidth) - pen.setWidthF(m_state.lineWidth); - if (m_state.flags & DirtyLineCap) - pen.setCapStyle(m_state.lineCap); - if (m_state.flags & DirtyLineJoin) - pen.setJoinStyle(m_state.lineJoin); - if (m_state.flags & DirtyMiterLimit) - pen.setMiterLimit(m_state.miterLimit); - m_painter->setPen(pen); - } - m_state.flags = 0; } + m_state.flags = 0; } void Context2D::clear() { - return; - endPainting(); - m_image.fill(qRgba(0,0,0,0)); - scheduleChange(); + m_painter->fillRect(QRect(QPoint(0,0), size()), Qt::white); } void Context2D::reset() @@ -737,29 +703,6 @@ void Context2D::reset() clear(); } -void Context2D::setSize(int width, int height) -{ - endPainting(); - QImage newi(width, height, QImage::Format_ARGB32_Premultiplied); - newi.fill(qRgba(0,0,0,0)); - QPainter p(&newi); - p.drawImage(0, 0, m_image); - p.end(); - m_image = newi; - scheduleChange(); -} - -void Context2D::setSize(const QSize &size) -{ - setSize(size.width(), size.height()); -} - -QSize Context2D::size() const -{ - return m_image.size(); -} - - void Context2D::drawImage(const QVariant &var, qreal sx, qreal sy, qreal sw = 0, qreal sh = 0) { @@ -771,24 +714,9 @@ void Context2D::drawImage(const QVariant &var, qreal sx, qreal sy, m_painter->drawImage(QPointF(sx, sy), image->value()); else m_painter->drawImage(QRectF(sx, sy, sw, sh), image->value()); - scheduleChange(); -} - - -void Context2D::scheduleChange() -{ - if (m_changeTimerId == -1) - m_changeTimerId = startTimer(0); } -void Context2D::timerEvent(QTimerEvent *e) +QSize Context2D::size() const { - if (e->timerId() == m_changeTimerId) { - killTimer(m_changeTimerId); - m_changeTimerId = -1; - emit changed(endPainting()); - } else { - QObject::timerEvent(e); - } + return m_painter->viewport().size(); } -//! [2] diff --git a/src/context2d.h b/src/context2d.h index ed76cd6..a4c2421 100644 --- a/src/context2d.h +++ b/src/context2d.h @@ -122,8 +122,6 @@ class Context2D : public QObject public: Context2D(QObject *parent = 0, QPainter *painter = 0); - void setSize(int width, int height); - void setSize(const QSize &size); QSize size() const; void clear(); @@ -216,16 +214,10 @@ public slots: signals: void changed(const QImage &image); -protected: - void timerEvent(QTimerEvent *e); - private: void beginPainting(); - const QImage &endPainting(); - void scheduleChange(); int m_changeTimerId; - QImage m_image; QPainter *m_painter; QPainterPath m_path; |