diff options
author | Blaž Hrastnik | 2021-07-30 07:50:38 +0000 |
---|---|---|
committer | Blaž Hrastnik | 2021-07-30 07:52:14 +0000 |
commit | 62eb8c6b407c61d21dbee83c4b4e78c4e6cb87c3 (patch) | |
tree | e8487e4a2c0cb330a6740eff873c6b0139a634ee /helix-term | |
parent | 6bb744aeacb56846c3bb50338e2bb81328e4e396 (diff) |
mouse: Remove verify_screen_coords, refactor primary selection modification
Diffstat (limited to 'helix-term')
-rw-r--r-- | helix-term/src/ui/editor.rs | 43 |
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, |