From 2f2656002735a14687c5d6b5a3250666a8e102e3 Mon Sep 17 00:00:00 2001 From: Julien Brianceau Date: Fri, 5 Oct 2012 15:41:28 +0200 Subject: qpa: Fix rendering issue in blitter paint engine MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Take into account brush transformation for TexturePattern fill. Example : arrows are not rendered propery in http://www.youtube.com/leanback website. Change-Id: I5d4bc7410d1d589a27cf17e84062096cfbdb4d6f Reviewed-by: Samuel Rødal --- src/gui/painting/qpaintengine_blitter.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/gui/painting') diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index b29c588b9b..1acdf8c433 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -558,7 +558,8 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) && qbrush_color(brush).alpha() == 0xff && d->caps.canBlitterFillRect()) { d->fillRect(rect, qbrush_color(brush), false); - } else if (brush.style() == Qt::TexturePattern && + } else if ((brush.style() == Qt::TexturePattern) && + (brush.transform().type() <= QTransform::TxTranslate) && ((d->caps.canBlitterDrawPixmapOpacity(brush.texture())) || (d->caps.canBlitterDrawPixmap(rect, brush.texture(), rect)))) { bool rectIsFilled = false; @@ -567,11 +568,11 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) qreal y = transformedRect.y(); QPixmap pm = brush.texture(); d->unlock(); - int srcX = int(rect.x() - state()->brushOrigin.x()) % pm.width(); + int srcX = int(rect.x() - state()->brushOrigin.x() - brush.transform().dx()) % pm.width(); if (srcX < 0) srcX = pm.width() + srcX; const int startX = srcX; - int srcY = int(rect.y() - state()->brushOrigin.y()) % pm.height(); + int srcY = int(rect.y() - state()->brushOrigin.y() - brush.transform().dy()) % pm.height(); if (srcY < 0) srcY = pm.height() + srcY; while (!rectIsFilled) { @@ -685,7 +686,7 @@ void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const Q } } -// Overridden methods to lock the graphics memory +// Overriden methods to lock the graphics memory void QBlitterPaintEngine::drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) { Q_D(QBlitterPaintEngine); -- cgit v1.2.3