summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMartin Jones <martin.jones@nokia.com>2010-05-05 05:24:53 (GMT)
committerMartin Jones <martin.jones@nokia.com>2010-05-05 05:24:53 (GMT)
commitba8ff70b5ac7b68be57a4b63e439fd5a37c4aafa (patch)
tree4a191e30db11d1ae3fad2a937ef26e3c98478668 /src
parentac4b7b8ae7c7a18d9af4f21367148b9fdec4816e (diff)
downloadQt-ba8ff70b5ac7b68be57a4b63e439fd5a37c4aafa.zip
Qt-ba8ff70b5ac7b68be57a4b63e439fd5a37c4aafa.tar.gz
Qt-ba8ff70b5ac7b68be57a4b63e439fd5a37c4aafa.tar.bz2
Turn off smooth rendering for qDrawBorderPixmap() with transforms.
On non-gl graphics systems smooth rendering of qDrawBorderPixmap() with a transform applied resulted in ugly artifacts. Better to draw without smooth and get a correct looking result, though with jaggy edges. Task-number: QTBUG-5687 Reviewed-by: Gunnar
Diffstat (limited to 'src')
-rw-r--r--src/gui/painting/qdrawutil.cpp14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/gui/painting/qdrawutil.cpp b/src/gui/painting/qdrawutil.cpp
index a62f06b..ef9b18c 100644
--- a/src/gui/painting/qdrawutil.cpp
+++ b/src/gui/painting/qdrawutil.cpp
@@ -1137,6 +1137,15 @@ void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargin
xTarget.resize(columns + 1);
yTarget.resize(rows + 1);
+ bool oldAA = painter->testRenderHint(QPainter::Antialiasing);
+ bool oldSmooth = painter->testRenderHint(QPainter::SmoothPixmapTransform);
+ if (painter->paintEngine()->type() != QPaintEngine::OpenGL
+ && painter->paintEngine()->type() != QPaintEngine::OpenGL2
+ && (oldSmooth || oldAA) && painter->combinedTransform().type() != QTransform::TxNone) {
+ painter->setRenderHint(QPainter::Antialiasing, false);
+ painter->setRenderHint(QPainter::SmoothPixmapTransform, false);
+ }
+
xTarget[0] = targetRect.left();
xTarget[1] = targetCenterLeft;
xTarget[columns - 1] = targetCenterRight;
@@ -1342,6 +1351,11 @@ void qDrawBorderPixmap(QPainter *painter, const QRect &targetRect, const QMargin
painter->drawPixmapFragments(opaqueData.data(), opaqueData.size(), pixmap, QPainter::OpaqueHint);
if (translucentData.size())
painter->drawPixmapFragments(translucentData.data(), translucentData.size(), pixmap);
+
+ if (oldAA)
+ painter->setRenderHint(QPainter::Antialiasing, true);
+ if (oldSmooth)
+ painter->setRenderHint(QPainter::SmoothPixmapTransform, true);
}
QT_END_NAMESPACE