From 19f29802bf7daafacd0fd824c2a1349e80eac536 Mon Sep 17 00:00:00 2001 From: Eirik Aavitsland Date: Thu, 17 Oct 2019 13:25:06 +0200 Subject: Fix: QPainter off-by-one clipping for some non-integer scalings For some scalings, setClipRect(QRect) would produce a clip one pixel different from setClipRect(QRectF) because of different rounding. Ditto for setClipRegion. Fix by making sure to transform QRectFs instead of QRects. Fixes: QTBUG-78962 Fixes: QTBUG-78963 Change-Id: I0be721133858c30769ec6d81e978962a3d6b70cf Reviewed-by: Christoph Cullmann Reviewed-by: Allan Sandfeld Jensen --- src/gui/painting/qtransform.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/gui/painting/qtransform.cpp') diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 7696da7d45..d75b66c50b 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -1529,12 +1529,12 @@ QRegion QTransform::map(const QRegion &r) const QRegion res; if (m11() < 0 || m22() < 0) { for (const QRect &rect : r) - res += mapRect(rect); + res += mapRect(QRectF(rect)).toRect(); } else { QVarLengthArray rects; rects.reserve(r.rectCount()); for (const QRect &rect : r) { - QRect nr = mapRect(rect); + QRect nr = mapRect(QRectF(rect)).toRect(); if (!nr.isEmpty()) rects.append(nr); } -- cgit v1.2.3