From 8966582d28cd889bb3051bd6e06d909bb4283164 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Wed, 20 Jan 2021 14:53:22 +0200 Subject: [PATCH] partially revert 9c70701677c8406d4d91a0b2c830c49f09a84785 Signed-off-by: Ivailo Monev --- src/gui/painting/qregion.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index 6cb566b33..fbc4c025a 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -1347,10 +1347,15 @@ void QRegionPrivate::prepend(const QRegionPrivate *r) if (numPrepend > 0) { const int newNumRects = numRects + numPrepend; - // move existing rectangles and prepend new rectanbles - for (int i = 0; i < r->rects.size(); i++) { - rects.insert(i, r->rects.at(i)); - } + if (newNumRects > rects.size()) + rects.resize(newNumRects); + + // move existing rectangles + memmove(rects.data() + numPrepend, rects.constData() + numSkip, + numRects * sizeof(QRect)); + + // prepend new rectangles + memcpy(rects.data(), r->rects.constData(), numPrepend * sizeof(QRect)); numRects = newNumRects; } @@ -1382,7 +1387,8 @@ void QRegionPrivate::prepend(const QRect *r) const QRect *nextToFirst = (numRects > 2 ? myFirst + 2 : 0); if (mergeFromAbove(myFirst + 1, myFirst, nextToFirst, 0)) { --numRects; - rects.remove(0); + memmove(rects.data(), rects.constData() + 1, + numRects * sizeof(QRect)); } } } else if (mergeFromAbove(myFirst, r, (numRects > 1 ? myFirst + 1 : 0), 0)) { -- 2.11.0