Box mouse select
This commit is contained in:
@@ -318,6 +318,27 @@ void OnCommand(Event event) {
|
|||||||
Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse);
|
Int p = ScreenSpaceToBufferPos(selected.window, selected.view, selected.buffer, mouse);
|
||||||
Caret &caret = selected.view->carets[0];
|
Caret &caret = selected.view->carets[0];
|
||||||
caret = SetFrontWithAnchor(caret, DocumentAnchor, p);
|
caret = SetFrontWithAnchor(caret, DocumentAnchor, p);
|
||||||
|
|
||||||
|
if (event.alt && event.shift) {
|
||||||
|
Int front = GetFront(DocumentAnchor);
|
||||||
|
XY from = PosToXY(selected.buffer, front);
|
||||||
|
XY to = ScreenSpaceToXY(selected.window, selected.view, mouse);
|
||||||
|
Int min_line = Min(from.y, to.y);
|
||||||
|
Int max_line = Max(from.y, to.y);
|
||||||
|
Int min_col = Min(from.x, to.x);
|
||||||
|
Int max_col = Max(from.x, to.x);
|
||||||
|
|
||||||
|
selected.view->carets.len = 0;
|
||||||
|
for (Int line = min_line; line <= max_line; line += 1) {
|
||||||
|
XY left_xy = {min_col, line};
|
||||||
|
XY right_xy = {max_col, line};
|
||||||
|
Int left = XYToPosWithoutNL(selected.buffer, left_xy);
|
||||||
|
Int right = XYToPosWithoutNL(selected.buffer, right_xy);
|
||||||
|
Caret new_selection = MakeCaret(left, right);
|
||||||
|
Add(&selected.view->carets, new_selection);
|
||||||
|
}
|
||||||
|
MergeCarets(selected.buffer, &selected.view->carets);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ResizerSelected.id != -1 && Mouse(LEFT_UP)) {
|
if (ResizerSelected.id != -1 && Mouse(LEFT_UP)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user