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()) {
|
while (block.isValid()) {
|
||||||
const QString &blockText = block.text();
|
const QString &blockText = block.text();
|
||||||
cursor.setPosition(block.position()
|
const int columnCount = tabSettings.columnCountForText(blockText);
|
||||||
+ tabSettings.positionAtColumn(blockText, blockSelection.anchorColumn));
|
if (blockSelection.anchorColumn < columnCount || blockSelection.column < columnCount) {
|
||||||
cursor.setPosition(block.position()
|
const int anchor = tabSettings.positionAtColumn(blockText, blockSelection.anchorColumn);
|
||||||
+ tabSettings.positionAtColumn(blockText, blockSelection.column),
|
const int position = tabSettings.positionAtColumn(blockText, blockSelection.column);
|
||||||
QTextCursor::KeepAnchor);
|
cursor.setPosition(block.position() + anchor);
|
||||||
|
cursor.setPosition(block.position() + position, QTextCursor::KeepAnchor);
|
||||||
result.append(cursor);
|
result.append(cursor);
|
||||||
|
}
|
||||||
if (block.blockNumber() == blockSelection.blockNumber)
|
if (block.blockNumber() == blockSelection.blockNumber)
|
||||||
break;
|
break;
|
||||||
block = forward ? block.next() : block.previous();
|
block = forward ? block.next() : block.previous();
|
||||||
@@ -5234,11 +5236,6 @@ void TextEditorWidget::mouseMoveEvent(QMouseEvent *e)
|
|||||||
MultiTextCursor cursor = *startMouseMoveCursor;
|
MultiTextCursor cursor = *startMouseMoveCursor;
|
||||||
const QTextCursor anchorCursor = cursor.takeMainCursor();
|
const QTextCursor anchorCursor = cursor.takeMainCursor();
|
||||||
const QTextCursor eventCursor = cursorForPosition(e->pos());
|
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();
|
const TabSettings tabSettings = d->m_document->tabSettings();
|
||||||
int eventColumn = tabSettings.columnAt(eventCursor.block().text(),
|
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())
|
eventColumn += int((e->pos().x() - cursorRect(eventCursor).center().x())
|
||||||
/ QFontMetricsF(font()).horizontalAdvance(' '));
|
/ QFontMetricsF(font()).horizontalAdvance(' '));
|
||||||
}
|
}
|
||||||
|
|
||||||
int anchorColumn = tabSettings.columnAt(anchorCursor.block().text(),
|
int anchorColumn = tabSettings.columnAt(anchorCursor.block().text(),
|
||||||
anchorCursor.positionInBlock());
|
anchorCursor.positionInBlock());
|
||||||
|
const TextEditorWidgetPrivate::BlockSelection blockSelection = {eventCursor.blockNumber(),
|
||||||
|
eventColumn,
|
||||||
|
anchorCursor.blockNumber(),
|
||||||
|
anchorColumn};
|
||||||
|
|
||||||
for (; block.isValid() && block != end; block = forward ? block.next() : block.previous()) {
|
cursor.setCursors(d->generateCursorsForBlockSelection(blockSelection));
|
||||||
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();
|
|
||||||
if (!cursor.isNull())
|
if (!cursor.isNull())
|
||||||
setMultiTextCursor(cursor);
|
setMultiTextCursor(cursor);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
Reference in New Issue
Block a user