From 420454cc0f7f73484700a7e5282588dd6d8a0eca Mon Sep 17 00:00:00 2001 From: Alexandre Bury Date: Sat, 14 Oct 2017 21:34:37 -0700 Subject: [PATCH] Better mouse scroll drag Now saturates when to the top or left. --- examples/list_view.rs | 6 +++--- src/views/list_view.rs | 15 ++++++--------- src/views/menu_popup.rs | 9 ++++----- src/views/select_view.rs | 5 ++--- src/views/text_area.rs | 5 ++--- src/views/text_view.rs | 5 ++--- 6 files changed, 19 insertions(+), 26 deletions(-) diff --git a/examples/list_view.rs b/examples/list_view.rs index f31ab3c6c..a4e074af6 100644 --- a/examples/list_view.rs +++ b/examples/list_view.rs @@ -57,9 +57,9 @@ fn main() { ) .with(|list| for i in 0..50 { list.add_child( - &format!("Item {}", i), - EditView::new(), - ); + &format!("Item {}", i), + EditView::new(), + ); }), ), ); diff --git a/src/views/list_view.rs b/src/views/list_view.rs index 08ef85a9c..00feaafbb 100644 --- a/src/views/list_view.rs +++ b/src/views/list_view.rs @@ -346,9 +346,8 @@ impl View for ListView { offset, } if self.scrollbase.is_dragging() => { - position - .checked_sub(offset) - .map(|position| self.scrollbase.drag(position)); + let position = position.saturating_sub(offset); + self.scrollbase.drag(position); return EventResult::Consumed(None); } Event::Mouse { @@ -397,12 +396,10 @@ impl View for ListView { direction::Direction::back(), ) } - Event::Key(Key::End) | Event::Ctrl(Key::End) => { - self.move_focus( - usize::max_value(), - direction::Direction::front(), - ) - } + Event::Key(Key::End) | Event::Ctrl(Key::End) => self.move_focus( + usize::max_value(), + direction::Direction::front(), + ), Event::Key(Key::Tab) => { self.move_focus(1, direction::Direction::front()) } diff --git a/src/views/menu_popup.rs b/src/views/menu_popup.rs index d2d963a0a..0b4af2f3c 100644 --- a/src/views/menu_popup.rs +++ b/src/views/menu_popup.rs @@ -234,8 +234,8 @@ impl View for MenuPopup { } printer.print_hline((1, 0), printer.size.x - 2, " "); printer.print((2, 0), label); - printer.print((printer.size.x.saturating_sub(4), 0), - ">>"); + let x = printer.size.x.saturating_sub(4); + printer.print((x, 0), ">>"); } MenuItem::Leaf(ref label, _) => { if printer.size.x < 2 { @@ -333,9 +333,8 @@ impl View for MenuPopup { } => { // If the mouse is dragged, we always consume the event. fix_scroll = false; - position - .checked_sub(offset + (0, 1)) - .map(|position| self.scrollbase.drag(position)); + let position = position.saturating_sub(offset); + self.scrollbase.drag(position); } Event::Mouse { event: MouseEvent::Press(_), diff --git a/src/views/select_view.rs b/src/views/select_view.rs index 19424f369..f9f3c3f9e 100644 --- a/src/views/select_view.rs +++ b/src/views/select_view.rs @@ -375,9 +375,8 @@ impl SelectView { } => { // If the mouse is dragged, we always consume the event. fix_scroll = false; - position - .checked_sub(offset) - .map(|position| self.scrollbase.drag(position)); + let position = position.saturating_sub(offset); + self.scrollbase.drag(position); } Event::Mouse { event: MouseEvent::Press(_), diff --git a/src/views/text_area.rs b/src/views/text_area.rs index 2d3ce05ac..47fd133b8 100644 --- a/src/views/text_area.rs +++ b/src/views/text_area.rs @@ -502,9 +502,8 @@ impl View for TextArea { offset, } => { fix_scroll = false; - position - .checked_sub(offset) - .map(|position| self.scrollbase.drag(position)); + let position = position.saturating_sub(offset); + self.scrollbase.drag(position); } Event::Mouse { event: MouseEvent::Press(_), diff --git a/src/views/text_view.rs b/src/views/text_view.rs index a02e564c5..e76cf4380 100644 --- a/src/views/text_view.rs +++ b/src/views/text_view.rs @@ -303,9 +303,8 @@ impl View for TextView { offset, } => { // If the mouse is dragged, we always consume the event. - position - .checked_sub(offset) - .map(|position| self.scrollbase.drag(position)); + let position = position.saturating_sub(offset); + self.scrollbase.drag(position); } Event::Mouse { event: MouseEvent::Release(MouseButton::Left),