From 64fab8f7e2d225e37aa731db7501b5d5b82eab64 Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Thu, 3 Jan 2019 11:52:15 +0200 Subject: Add faster path for scaling QRegion with multiple regions Fixes: QTBUG-72821 Change-Id: Ic4fa349087239337a77b0e280be551b46c75af71 Reviewed-by: Giuseppe D'Angelo --- src/gui/painting/qtransform.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src/gui') diff --git a/src/gui/painting/qtransform.cpp b/src/gui/painting/qtransform.cpp index 5f9e037ff0..816514a695 100644 --- a/src/gui/painting/qtransform.cpp +++ b/src/gui/painting/qtransform.cpp @@ -1517,8 +1517,23 @@ QRegion QTransform::map(const QRegion &r) const return copy; } - if (t == TxScale && r.rectCount() == 1) - return QRegion(mapRect(r.boundingRect())); + if (t == TxScale) { + QRegion res; + if (m11() < 0 || m22() < 0) { + for (const QRect &rect : r) + res += mapRect(rect); + } else { + QVarLengthArray rects; + rects.reserve(r.rectCount()); + for (const QRect &rect : r) { + QRect nr = mapRect(rect); + if (!nr.isEmpty()) + rects.append(nr); + } + res.setRects(rects.constData(), rects.count()); + } + return res; + } QPainterPath p = map(qt_regionToPath(r)); return p.toFillPolygon(QTransform()).toPolygon(); -- cgit v1.2.3