forked from qt-creator/qt-creator
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:
@@ -775,7 +775,7 @@ public:
|
|||||||
QList<QTextCursor> m_autoCompleteHighlightPos;
|
QList<QTextCursor> m_autoCompleteHighlightPos;
|
||||||
void updateAutoCompleteHighlight();
|
void updateAutoCompleteHighlight();
|
||||||
|
|
||||||
QList<int> m_cursorBlockNumbers;
|
QSet<int> m_cursorBlockNumbers;
|
||||||
int m_blockCount = 0;
|
int m_blockCount = 0;
|
||||||
|
|
||||||
QPoint m_markDragStart;
|
QPoint m_markDragStart;
|
||||||
@@ -5372,21 +5372,18 @@ void TextEditorWidgetPrivate::updateCurrentLineHighlight()
|
|||||||
q->viewport()->update(updateRect);
|
q->viewport()->update(updateRect);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
QList<int> cursorBlockNumbers;
|
|
||||||
for (const QTextCursor &c : m_cursors) {
|
QSet<int> cursorBlockNumbers;
|
||||||
int cursorBlockNumber = c.blockNumber();
|
for (const QTextCursor &c : m_cursors)
|
||||||
if (!m_cursorBlockNumbers.contains(cursorBlockNumber))
|
cursorBlockNumbers.insert(c.blockNumber());
|
||||||
updateBlock(c.block());
|
|
||||||
if (!cursorBlockNumbers.contains(c.blockNumber()))
|
const QSet<int> updateBlockNumbers = (cursorBlockNumbers - m_cursorBlockNumbers)
|
||||||
cursorBlockNumbers << c.blockNumber();
|
+ (m_cursorBlockNumbers - cursorBlockNumbers);
|
||||||
}
|
|
||||||
if (m_cursorBlockNumbers != cursorBlockNumbers) {
|
for (const int blockNumber : updateBlockNumbers)
|
||||||
for (int oldBlock : m_cursorBlockNumbers) {
|
updateBlock(m_document->document()->findBlockByNumber(blockNumber));
|
||||||
if (!cursorBlockNumbers.contains(oldBlock))
|
|
||||||
updateBlock(m_document->document()->findBlockByNumber(oldBlock));
|
m_cursorBlockNumbers = cursorBlockNumbers;
|
||||||
}
|
|
||||||
m_cursorBlockNumbers = cursorBlockNumbers;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextEditorWidget::slotCursorPositionChanged()
|
void TextEditorWidget::slotCursorPositionChanged()
|
||||||
|
|||||||
Reference in New Issue
Block a user