summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/context2d.cpp116
-rw-r--r--src/context2d.h8
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;