TextEditor: Speed up updateCurrentLineHighlight

Only update the changed blocks and use sets instead of lists to
store the info and create the diff.

Change-Id: I08d81b326ceebdc6bf2ba322886b7bf5671b2769
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Artem Sokolovskii
2023-02-07 16:30:40 +01:00
parent f06bc4ab5a
commit 8491441257

View File

@@ -775,7 +775,7 @@ public:
QList<QTextCursor> m_autoCompleteHighlightPos;
void updateAutoCompleteHighlight();
QList<int> m_cursorBlockNumbers;
QSet<int> m_cursorBlockNumbers;
int m_blockCount = 0;
QPoint m_markDragStart;
@@ -5372,22 +5372,19 @@ void TextEditorWidgetPrivate::updateCurrentLineHighlight()
q->viewport()->update(updateRect);
}
};
QList<int> cursorBlockNumbers;
for (const QTextCursor &c : m_cursors) {
int cursorBlockNumber = c.blockNumber();
if (!m_cursorBlockNumbers.contains(cursorBlockNumber))
updateBlock(c.block());
if (!cursorBlockNumbers.contains(c.blockNumber()))
cursorBlockNumbers << c.blockNumber();
}
if (m_cursorBlockNumbers != cursorBlockNumbers) {
for (int oldBlock : m_cursorBlockNumbers) {
if (!cursorBlockNumbers.contains(oldBlock))
updateBlock(m_document->document()->findBlockByNumber(oldBlock));
}
QSet<int> cursorBlockNumbers;
for (const QTextCursor &c : m_cursors)
cursorBlockNumbers.insert(c.blockNumber());
const QSet<int> updateBlockNumbers = (cursorBlockNumbers - m_cursorBlockNumbers)
+ (m_cursorBlockNumbers - cursorBlockNumbers);
for (const int blockNumber : updateBlockNumbers)
updateBlock(m_document->document()->findBlockByNumber(blockNumber));
m_cursorBlockNumbers = cursorBlockNumbers;
}
}
void TextEditorWidget::slotCursorPositionChanged()
{