aboutsummaryrefslogtreecommitdiff
path: root/helix-term/src/ui/editor.rs
diff options
context:
space:
mode:
authorBlaž Hrastnik2021-07-30 07:50:38 +0000
committerBlaž Hrastnik2021-07-30 07:52:14 +0000
commit62eb8c6b407c61d21dbee83c4b4e78c4e6cb87c3 (patch)
treee8487e4a2c0cb330a6740eff873c6b0139a634ee /helix-term/src/ui/editor.rs
parent6bb744aeacb56846c3bb50338e2bb81328e4e396 (diff)
mouse: Remove verify_screen_coords, refactor primary selection modification
Diffstat (limited to 'helix-term/src/ui/editor.rs')
-rw-r--r--helix-term/src/ui/editor.rs43
1 files changed, 16 insertions, 27 deletions
diff --git a/helix-term/src/ui/editor.rs b/helix-term/src/ui/editor.rs
index 7a2a07ed..a2b169ed 100644
--- a/helix-term/src/ui/editor.rs
+++ b/helix-term/src/ui/editor.rs
@@ -815,25 +815,21 @@ impl Component for EditorView {
let editor = &mut cx.editor;
let result = editor.tree.views().find_map(|(view, _focus)| {
- view.pos_at_screen_coords(
- &editor.documents[view.doc],
- row as usize,
- column as usize,
- )
- .map(|pos| (pos, view.id))
+ view.pos_at_screen_coords(&editor.documents[view.doc], row, column)
+ .map(|pos| (pos, view.id))
});
- if let Some((pos, id)) = result {
- let doc = &mut editor.documents[editor.tree.get(id).doc];
+ if let Some((pos, view_id)) = result {
+ let doc = &mut editor.documents[editor.tree.get(view_id).doc];
if modifiers == crossterm::event::KeyModifiers::ALT {
- let selection = doc.selection(id).clone();
- doc.set_selection(id, selection.push(Range::point(pos)));
+ let selection = doc.selection(view_id).clone();
+ doc.set_selection(view_id, selection.push(Range::point(pos)));
} else {
- doc.set_selection(id, Selection::point(pos));
+ doc.set_selection(view_id, Selection::point(pos));
}
- editor.tree.focus = id;
+ editor.tree.focus = view_id;
return EventResult::Consumed(None);
}
@@ -849,22 +845,15 @@ impl Component for EditorView {
}) => {
let (view, doc) = current!(cx.editor);
- let pos = view.pos_at_screen_coords(doc, row as usize, column as usize);
-
- if pos == None {
- return EventResult::Ignored;
- }
-
- let selection = doc.selection(view.id).clone();
- let primary_anchor = selection.primary().anchor;
- let new_selection = selection.transform(|range| -> Range {
- if range.anchor == primary_anchor {
- return Range::new(primary_anchor, pos.unwrap());
- }
- range
- });
+ let pos = match view.pos_at_screen_coords(doc, row, column) {
+ Some(pos) => pos,
+ None => return EventResult::Ignored,
+ };
- doc.set_selection(view.id, new_selection);
+ let mut selection = doc.selection(view.id).clone();
+ let primary = selection.primary_mut();
+ *primary = Range::new(primary.anchor, pos);
+ doc.set_selection(view.id, selection);
EventResult::Consumed(None)
}
Event::Mouse(_) => EventResult::Ignored,