From 7fa8574d98bec3f0e9250bc9487f9b8f9ef1f792 Mon Sep 17 00:00:00 2001 From: mae <qt-info@nokia.com> Date: Tue, 1 Dec 2009 15:55:55 +0100 Subject: [PATCH] fix extra area drawing with multi-line blocks when line wrap is enabled The extra area only updated the current *line* when the cursor moved, not the entire paragraph. This left bold line numbers behind. The fix adds the required update region when the cursor position changes blocks. --- src/plugins/texteditor/basetexteditor.cpp | 19 ++++++++++++++++++- src/plugins/texteditor/basetexteditor_p.h | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 8471ec947b9..db0fb807351 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1479,7 +1479,8 @@ BaseTextEditorPrivate::BaseTextEditorPrivate() m_inBlockSelectionMode(false), m_lastEventWasBlockSelectionEvent(false), m_blockSelectionExtraX(0), - m_moveLineUndoHack(false) + m_moveLineUndoHack(false), + m_cursorBlockNumber(-1) { } @@ -2781,6 +2782,22 @@ void BaseTextEditor::updateCurrentLineHighlight() } setExtraSelections(CurrentLineSelection, extraSelections); + + + // the extra area shows information for the entire current block, not just the currentline. + // This is why we must force a bigger update region. + int cursorBlockNumber = textCursor().blockNumber(); + if (cursorBlockNumber != d->m_cursorBlockNumber) { + QPointF offset = contentOffset(); + QTextBlock block = document()->findBlockByNumber(d->m_cursorBlockNumber); + if (block.isValid()) + d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); + block = document()->findBlockByNumber(cursorBlockNumber); + if (block.isValid()) + d->m_extraArea->update(blockBoundingGeometry(block).translated(offset).toAlignedRect()); + d->m_cursorBlockNumber = cursorBlockNumber; + } + } void BaseTextEditor::slotCursorPositionChanged() diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index a1829e70f81..70fa38c759f 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -243,6 +243,7 @@ public: QTimer *m_highlightBlocksTimer; QPointer<BaseTextEditorAnimator> m_animator; + int m_cursorBlockNumber; }; -- GitLab