diff -up qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine.cpp.me qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine.cpp --- qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine.cpp.me 2018-10-25 11:30:37.371800942 +0200 +++ qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine.cpp 2018-10-25 11:36:24.496953609 +0200 @@ -3663,11 +3663,12 @@ int QTextEngine::lineNumberForTextPositi return -1; } -void QTextEngine::insertionPointsForLine(int lineNum, QVector &insertionPoints) +std::vector QTextEngine::insertionPointsForLine(int lineNum) { QTextLineItemIterator iterator(this, lineNum); - insertionPoints.reserve(iterator.line.length); + std::vector insertionPoints; + insertionPoints.reserve(size_t(iterator.line.length)); bool lastLine = lineNum >= lines.size() - 1; @@ -3685,25 +3686,22 @@ void QTextEngine::insertionPointsForLine insertionPoints.push_back(i); } } + return insertionPoints; } int QTextEngine::endOfLine(int lineNum) { - QVector insertionPoints; - insertionPointsForLine(lineNum, insertionPoints); - + const auto insertionPoints = insertionPointsForLine(lineNum); if (insertionPoints.size() > 0) - return insertionPoints.constLast(); + return insertionPoints.back(); return 0; } int QTextEngine::beginningOfLine(int lineNum) { - QVector insertionPoints; - insertionPointsForLine(lineNum, insertionPoints); - + const auto insertionPoints = insertionPointsForLine(lineNum); if (insertionPoints.size() > 0) - return insertionPoints.constFirst(); + return insertionPoints.front(); return 0; } @@ -3720,10 +3718,8 @@ int QTextEngine::positionAfterVisualMove if (lineNum < 0) return pos; - QVector insertionPoints; - insertionPointsForLine(lineNum, insertionPoints); - int i, max = insertionPoints.size(); - for (i = 0; i < max; i++) + const auto insertionPoints = insertionPointsForLine(lineNum); + for (size_t i = 0, max = insertionPoints.size(); i < max; ++i) if (pos == insertionPoints[i]) { if (moveRight) { if (i + 1 < max) diff -up qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine_p.h.me qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine_p.h --- qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine_p.h.me 2018-10-25 11:36:39.243002574 +0200 +++ qtbase-everywhere-src-5.11.2/src/gui/text/qtextengine_p.h 2018-10-25 11:37:45.966224143 +0200 @@ -74,6 +74,7 @@ #include #include +#include QT_BEGIN_NAMESPACE @@ -632,7 +633,7 @@ public: int nextLogicalPosition(int oldPos) const; int lineNumberForTextPosition(int pos); int positionAfterVisualMovement(int oldPos, QTextCursor::MoveOperation op); - void insertionPointsForLine(int lineNum, QVector &insertionPoints); + std::vector insertionPointsForLine(int lineNum); void resetFontEngineCache(); void enableDelayDecorations(bool enable = true) { delayDecorations = enable; } diff -up qtbase-everywhere-src-5.11.2/src/gui/text/qtextlayout.cpp.me qtbase-everywhere-src-5.11.2/src/gui/text/qtextlayout.cpp --- qtbase-everywhere-src-5.11.2/src/gui/text/qtextlayout.cpp.me 2018-10-25 11:38:04.426285436 +0200 +++ qtbase-everywhere-src-5.11.2/src/gui/text/qtextlayout.cpp 2018-10-25 11:40:23.919748643 +0200 @@ -2841,9 +2841,7 @@ int QTextLine::xToCursor(qreal _x, Curso bool rtl = eng->isRightToLeft(); eng->shapeLine(line); - QVector insertionPoints; - if (visual && rtl) - eng->insertionPointsForLine(lineNum, insertionPoints); + const auto insertionPoints = (visual && rtl) ? eng->insertionPointsForLine(lineNum) : std::vector(); int nchars = 0; for (int i = 0; i < nItems; ++i) { int item = visualOrder[i]+firstItem; @@ -2975,7 +2973,7 @@ int QTextLine::xToCursor(qreal _x, Curso continue; } if (rtl && nchars > 0) - return insertionPoints[lastLine ? nchars : nchars - 1]; + return insertionPoints[size_t(lastLine ? nchars : nchars - 1)]; } return eng->positionInLigature(&si, end, x, pos, -1, cpos == QTextLine::CursorOnCharacter);