From 8491441257a9ca8007bb0ab7899f15887fe1c024 Mon Sep 17 00:00:00 2001 From: Artem Sokolovskii Date: Tue, 7 Feb 2023 16:30:40 +0100 Subject: [PATCH] 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 --- src/plugins/texteditor/texteditor.cpp | 29 ++++++++++++--------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 9c4b54c20f3..9089f592351 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -775,7 +775,7 @@ public: QList m_autoCompleteHighlightPos; void updateAutoCompleteHighlight(); - QList m_cursorBlockNumbers; + QSet m_cursorBlockNumbers; int m_blockCount = 0; QPoint m_markDragStart; @@ -5372,21 +5372,18 @@ void TextEditorWidgetPrivate::updateCurrentLineHighlight() q->viewport()->update(updateRect); } }; - QList 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)); - } - m_cursorBlockNumbers = cursorBlockNumbers; - } + + QSet cursorBlockNumbers; + for (const QTextCursor &c : m_cursors) + cursorBlockNumbers.insert(c.blockNumber()); + + const QSet updateBlockNumbers = (cursorBlockNumbers - m_cursorBlockNumbers) + + (m_cursorBlockNumbers - cursorBlockNumbers); + + for (const int blockNumber : updateBlockNumbers) + updateBlock(m_document->document()->findBlockByNumber(blockNumber)); + + m_cursorBlockNumbers = cursorBlockNumbers; } void TextEditorWidget::slotCursorPositionChanged()