fix selecting with ctrl-alt click
This commit is contained in:
parent
d0acc15e67
commit
1c2bc29424
2 changed files with 59 additions and 41 deletions
|
|
@ -109,12 +109,14 @@ function DefaultHandlers(mouseHandler) {
|
|||
var editor = this.editor;
|
||||
// allow double/triple click handlers to change selection
|
||||
var shiftPressed = this.mousedownEvent.getShiftKey();
|
||||
if (shiftPressed) {
|
||||
editor.selection.selectToPosition(pos);
|
||||
}
|
||||
else if (!this.$clickSelection) {
|
||||
editor.selection.moveToPosition(pos);
|
||||
}
|
||||
setTimeout(function(){
|
||||
if (shiftPressed) {
|
||||
editor.selection.selectToPosition(pos);
|
||||
}
|
||||
else if (!this.$clickSelection) {
|
||||
editor.selection.moveToPosition(pos);
|
||||
}
|
||||
}.bind(this), 0);
|
||||
if (editor.renderer.scroller.setCapture) {
|
||||
editor.renderer.scroller.setCapture();
|
||||
}
|
||||
|
|
@ -213,7 +215,6 @@ function DefaultHandlers(mouseHandler) {
|
|||
this.setState("selectByWords");
|
||||
}
|
||||
this.$clickSelection = range;
|
||||
this[this.state] && this[this.state](ev);
|
||||
};
|
||||
|
||||
this.onTripleClick = function(ev) {
|
||||
|
|
@ -221,8 +222,13 @@ function DefaultHandlers(mouseHandler) {
|
|||
var editor = this.editor;
|
||||
|
||||
this.setState("selectByLines");
|
||||
this.$clickSelection = editor.selection.getLineRange(pos.row);
|
||||
this[this.state] && this[this.state](ev);
|
||||
var range = editor.getSelectionRange();
|
||||
if (range.isMultiLine() && range.contains(pos.row, pos.column)) {
|
||||
this.$clickSelection = editor.selection.getLineRange(range.start.row);
|
||||
this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end;
|
||||
} else {
|
||||
this.$clickSelection = editor.selection.getLineRange(pos.row);
|
||||
}
|
||||
};
|
||||
|
||||
this.onQuadClick = function(ev) {
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ function onMouseDown(e) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (!ctrl && !alt) {
|
||||
if (!ctrl && !alt && !accel) {
|
||||
if (button === 0 && e.editor.inMultiSelectMode)
|
||||
e.editor.exitMultiSelectMode();
|
||||
return;
|
||||
|
|
@ -70,30 +70,11 @@ function onMouseDown(e) {
|
|||
var cursor = selection.getCursor();
|
||||
var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor));
|
||||
|
||||
|
||||
var mouseX = e.x, mouseY = e.y;
|
||||
var onMouseSelection = function(e) {
|
||||
mouseX = e.clientX;
|
||||
mouseY = e.clientY;
|
||||
};
|
||||
|
||||
var blockSelect = function() {
|
||||
var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
|
||||
var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);
|
||||
|
||||
if (isSamePoint(screenCursor, newCursor)
|
||||
&& isSamePoint(cursor, selection.selectionLead))
|
||||
return;
|
||||
screenCursor = newCursor;
|
||||
|
||||
editor.selection.moveToPosition(cursor);
|
||||
editor.renderer.scrollCursorIntoView();
|
||||
|
||||
editor.removeSelectionMarkers(rectSel);
|
||||
rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
|
||||
rectSel.forEach(editor.addSelectionMarker, editor);
|
||||
editor.updateSelectionMarkers();
|
||||
};
|
||||
|
||||
var session = editor.session;
|
||||
var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
|
||||
|
|
@ -159,26 +140,57 @@ function onMouseDown(e) {
|
|||
|
||||
} else if (selectionMode == "block") {
|
||||
e.stop();
|
||||
|
||||
if (isMultiSelect && !ctrl)
|
||||
selection.toSingleRange();
|
||||
else if (!isMultiSelect && ctrl)
|
||||
selection.addRange();
|
||||
|
||||
editor.inVirtualSelectionMode = true;
|
||||
var initialRange;
|
||||
var rectSel = [];
|
||||
if (shift) {
|
||||
screenAnchor = session.documentToScreenPosition(selection.lead);
|
||||
blockSelect();
|
||||
} else {
|
||||
selection.moveToPosition(pos);
|
||||
}
|
||||
var blockSelect = function() {
|
||||
var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY);
|
||||
var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column);
|
||||
|
||||
if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead))
|
||||
return;
|
||||
screenCursor = newCursor;
|
||||
|
||||
editor.selection.moveToPosition(cursor);
|
||||
editor.renderer.scrollCursorIntoView();
|
||||
|
||||
editor.removeSelectionMarkers(rectSel);
|
||||
rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor);
|
||||
if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty())
|
||||
rectSel[0] = editor.$mouseHandler.$clickSelection.clone();
|
||||
rectSel.forEach(editor.addSelectionMarker, editor);
|
||||
editor.updateSelectionMarkers();
|
||||
};
|
||||
|
||||
if (isMultiSelect && !accel) {
|
||||
selection.toSingleRange();
|
||||
} else if (!isMultiSelect && accel) {
|
||||
initialRange = selection.toOrientedRange();
|
||||
editor.addSelectionMarker(initialRange);
|
||||
}
|
||||
|
||||
if (shift)
|
||||
screenAnchor = session.documentToScreenPosition(selection.lead);
|
||||
else
|
||||
selection.moveToPosition(pos);
|
||||
|
||||
screenCursor = {row: -1, column: -1};
|
||||
|
||||
var onMouseSelectionEnd = function(e) {
|
||||
clearInterval(timerId);
|
||||
editor.removeSelectionMarkers(rectSel);
|
||||
if (!rectSel.length)
|
||||
rectSel = [selection.toOrientedRange()];
|
||||
editor.$blockScrolling++;
|
||||
if (initialRange) {
|
||||
editor.removeSelectionMarker(initialRange);
|
||||
selection.toSingleRange(initialRange);
|
||||
}
|
||||
for (var i = 0; i < rectSel.length; i++)
|
||||
selection.addRange(rectSel[i]);
|
||||
editor.inVirtualSelectionMode = false;
|
||||
editor.$mouseHandler.$clickSelection = null;
|
||||
editor.$blockScrolling--;
|
||||
};
|
||||
|
||||
var onSelectionInterval = blockSelect;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue