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.
This commit is contained in:
mae
2009-12-01 15:55:55 +01:00
parent 405d9367e7
commit 7fa8574d98
2 changed files with 19 additions and 1 deletions

View File

@@ -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()

View File

@@ -243,6 +243,7 @@ public:
QTimer *m_highlightBlocksTimer;
QPointer<BaseTextEditorAnimator> m_animator;
int m_cursorBlockNumber;
};