aboutsummaryrefslogtreecommitdiffstats
path: root/softwarecontext/imagenode.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'softwarecontext/imagenode.cpp')
-rw-r--r--softwarecontext/imagenode.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/softwarecontext/imagenode.cpp b/softwarecontext/imagenode.cpp
index 7718831b65..519f5dc6f6 100644
--- a/softwarecontext/imagenode.cpp
+++ b/softwarecontext/imagenode.cpp
@@ -380,6 +380,7 @@ static Qt::TileRule getTileRule(qreal factor)
void ImageNode::paint(QPainter *painter)
{
+ QPainter::RenderHints originalHints = painter->renderHints();
painter->setRenderHint(QPainter::SmoothPixmapTransform, m_smooth);
const QPixmap &pm = pixmap();
@@ -395,7 +396,8 @@ void ImageNode::paint(QPainter *painter)
}
if (m_tileHorizontal || m_tileVertical) {
- painter->save();
+ QMatrix originalMatrix = painter->matrix();
+
qreal sx = m_targetRect.width()/(m_subSourceRect.width()*pm.width());
qreal sy = m_targetRect.height()/(m_subSourceRect.height()*pm.height());
QMatrix transform(sx, 0, 0, sy, 0, 0);
@@ -403,12 +405,15 @@ void ImageNode::paint(QPainter *painter)
painter->drawTiledPixmap(QRectF(m_targetRect.x()/sx, m_targetRect.y()/sy, m_targetRect.width()/sx, m_targetRect.height()/sy),
pm,
QPointF(m_subSourceRect.left()*pm.width(), m_subSourceRect.top()*pm.height()));
- painter->restore();
+
+ painter->setMatrix(originalMatrix);
} else {
QRectF sr(m_subSourceRect.left()*pm.width(), m_subSourceRect.top()*pm.height(),
m_subSourceRect.width()*pm.width(), m_subSourceRect.height()*pm.height());
painter->drawPixmap(m_targetRect, pm, sr);
}
+
+ painter->setRenderHints(originalHints);
}
const QPixmap &ImageNode::pixmap() const