QTextEngine: micro optimize insertionPointsForLine
Don't use out param, use return by value instead. Also since we don't need CoW replace QVector with std::vector Change-Id: I5b6ea286b83e2ab959b5734cc1af31cc63c06553 Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>bb10
parent
47904bb08a
commit
0fb8271a46
|
|
@ -3309,11 +3309,12 @@ int QTextEngine::lineNumberForTextPosition(int pos)
|
|||
return -1;
|
||||
}
|
||||
|
||||
void QTextEngine::insertionPointsForLine(int lineNum, QVector<int> &insertionPoints)
|
||||
std::vector<int> QTextEngine::insertionPointsForLine(int lineNum)
|
||||
{
|
||||
QTextLineItemIterator iterator(this, lineNum);
|
||||
|
||||
insertionPoints.reserve(iterator.line.length);
|
||||
std::vector<int> insertionPoints;
|
||||
insertionPoints.reserve(size_t(iterator.line.length));
|
||||
|
||||
bool lastLine = lineNum >= lines.size() - 1;
|
||||
|
||||
|
|
@ -3331,25 +3332,22 @@ void QTextEngine::insertionPointsForLine(int lineNum, QVector<int> &insertionPoi
|
|||
insertionPoints.push_back(i);
|
||||
}
|
||||
}
|
||||
return insertionPoints;
|
||||
}
|
||||
|
||||
int QTextEngine::endOfLine(int lineNum)
|
||||
{
|
||||
QVector<int> 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<int> insertionPoints;
|
||||
insertionPointsForLine(lineNum, insertionPoints);
|
||||
|
||||
const auto insertionPoints = insertionPointsForLine(lineNum);
|
||||
if (insertionPoints.size() > 0)
|
||||
return insertionPoints.constFirst();
|
||||
return insertionPoints.front();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -3366,10 +3364,8 @@ int QTextEngine::positionAfterVisualMovement(int pos, QTextCursor::MoveOperation
|
|||
if (lineNum < 0)
|
||||
return pos;
|
||||
|
||||
QVector<int> 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)
|
||||
|
|
|
|||
|
|
@ -74,6 +74,7 @@
|
|||
#include <private/qunicodetools_p.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <vector>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
|
|
@ -624,7 +625,7 @@ public:
|
|||
int nextLogicalPosition(int oldPos) const;
|
||||
int lineNumberForTextPosition(int pos);
|
||||
int positionAfterVisualMovement(int oldPos, QTextCursor::MoveOperation op);
|
||||
void insertionPointsForLine(int lineNum, QVector<int> &insertionPoints);
|
||||
std::vector<int> insertionPointsForLine(int lineNum);
|
||||
void resetFontEngineCache();
|
||||
|
||||
void enableDelayDecorations(bool enable = true) { delayDecorations = enable; }
|
||||
|
|
|
|||
|
|
@ -2840,9 +2840,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||
bool rtl = eng->isRightToLeft();
|
||||
|
||||
eng->shapeLine(line);
|
||||
QVector<int> insertionPoints;
|
||||
if (visual && rtl)
|
||||
eng->insertionPointsForLine(lineNum, insertionPoints);
|
||||
const auto insertionPoints = (visual && rtl) ? eng->insertionPointsForLine(lineNum) : std::vector<int>();
|
||||
int nchars = 0;
|
||||
for (int i = 0; i < nItems; ++i) {
|
||||
int item = visualOrder[i]+firstItem;
|
||||
|
|
@ -2974,7 +2972,7 @@ int QTextLine::xToCursor(qreal _x, CursorPosition cpos) const
|
|||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue