forked from qt-creator/qt-creator
Editor: skip short lines in block selection
Do not include lines into the block selection that are shorter than the block selection start column. Task-number: QTCREATORBUG-26548 Change-Id: I6e4e26e1c498fb02dd0ebc8b78b8907c23f356b8 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -1397,12 +1397,14 @@ QList<QTextCursor> TextEditorWidgetPrivate::generateCursorsForBlockSelection(
|
||||
|
||||
while (block.isValid()) {
|
||||
const QString &blockText = block.text();
|
||||
cursor.setPosition(block.position()
|
||||
+ tabSettings.positionAtColumn(blockText, blockSelection.anchorColumn));
|
||||
cursor.setPosition(block.position()
|
||||
+ tabSettings.positionAtColumn(blockText, blockSelection.column),
|
||||
QTextCursor::KeepAnchor);
|
||||
result.append(cursor);
|
||||
const int columnCount = tabSettings.columnCountForText(blockText);
|
||||
if (blockSelection.anchorColumn < columnCount || blockSelection.column < columnCount) {
|
||||
const int anchor = tabSettings.positionAtColumn(blockText, blockSelection.anchorColumn);
|
||||
const int position = tabSettings.positionAtColumn(blockText, blockSelection.column);
|
||||
cursor.setPosition(block.position() + anchor);
|
||||
cursor.setPosition(block.position() + position, QTextCursor::KeepAnchor);
|
||||
result.append(cursor);
|
||||
}
|
||||
if (block.blockNumber() == blockSelection.blockNumber)
|
||||
break;
|
||||
block = forward ? block.next() : block.previous();
|
||||
@@ -5234,11 +5236,6 @@ void TextEditorWidget::mouseMoveEvent(QMouseEvent *e)
|
||||
MultiTextCursor cursor = *startMouseMoveCursor;
|
||||
const QTextCursor anchorCursor = cursor.takeMainCursor();
|
||||
const QTextCursor eventCursor = cursorForPosition(e->pos());
|
||||
const int eventCursorPos = eventCursor.position();
|
||||
const bool forward = anchorCursor.position() < eventCursorPos;
|
||||
QTextBlock block = anchorCursor.block();
|
||||
const QTextBlock end = forward ? eventCursor.block().next()
|
||||
: eventCursor.block().previous();
|
||||
|
||||
const TabSettings tabSettings = d->m_document->tabSettings();
|
||||
int eventColumn = tabSettings.columnAt(eventCursor.block().text(),
|
||||
@@ -5247,18 +5244,15 @@ void TextEditorWidget::mouseMoveEvent(QMouseEvent *e)
|
||||
eventColumn += int((e->pos().x() - cursorRect(eventCursor).center().x())
|
||||
/ QFontMetricsF(font()).horizontalAdvance(' '));
|
||||
}
|
||||
|
||||
int anchorColumn = tabSettings.columnAt(anchorCursor.block().text(),
|
||||
anchorCursor.positionInBlock());
|
||||
const TextEditorWidgetPrivate::BlockSelection blockSelection = {eventCursor.blockNumber(),
|
||||
eventColumn,
|
||||
anchorCursor.blockNumber(),
|
||||
anchorColumn};
|
||||
|
||||
for (; block.isValid() && block != end; block = forward ? block.next() : block.previous()) {
|
||||
const QString &blockText = block.text();
|
||||
QTextCursor c = eventCursor;
|
||||
c.setPosition(block.position() + tabSettings.positionAtColumn(blockText, anchorColumn));
|
||||
c.setPosition(block.position() + tabSettings.positionAtColumn(blockText, eventColumn),
|
||||
QTextCursor::KeepAnchor);
|
||||
cursor.addCursor(c);
|
||||
}
|
||||
cursor.mergeCursors();
|
||||
cursor.setCursors(d->generateCursorsForBlockSelection(blockSelection));
|
||||
if (!cursor.isNull())
|
||||
setMultiTextCursor(cursor);
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user