From 55739aa786f9a3efdd41ff8d2d98bed193243da2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20Gr=C3=B6nberg?= <5390421+Gronis@users.noreply.github.com> Date: Sat, 5 Aug 2023 15:35:43 +0200 Subject: [PATCH] Add support for scrolling left and right. (#788) --- src/event.rs | 4 ++++ src/event/sys/unix/parse.rs | 2 ++ src/event/sys/windows/parse.rs | 10 +++++++++- 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/event.rs b/src/event.rs index b93c8ac..3464467 100644 --- a/src/event.rs +++ b/src/event.rs @@ -575,6 +575,10 @@ pub enum MouseEventKind { ScrollDown, /// Scrolled mouse wheel upwards (away from the user). ScrollUp, + /// Scrolled mouse wheel left (mostly on a laptop touchpad). + ScrollLeft, + /// Scrolled mouse wheel right (mostly on a laptop touchpad). + ScrollRight, } /// Represents a mouse button. diff --git a/src/event/sys/unix/parse.rs b/src/event/sys/unix/parse.rs index c40cebc..2019b5f 100644 --- a/src/event/sys/unix/parse.rs +++ b/src/event/sys/unix/parse.rs @@ -788,6 +788,8 @@ fn parse_cb(cb: u8) -> io::Result<(MouseEventKind, KeyModifiers)> { (3, true) | (4, true) | (5, true) => MouseEventKind::Moved, (4, false) => MouseEventKind::ScrollUp, (5, false) => MouseEventKind::ScrollDown, + (6, false) => MouseEventKind::ScrollLeft, + (7, false) => MouseEventKind::ScrollRight, // We do not support other buttons. _ => return Err(could_not_parse_event_error()), }; diff --git a/src/event/sys/windows/parse.rs b/src/event/sys/windows/parse.rs index 288b747..74289e5 100644 --- a/src/event/sys/windows/parse.rs +++ b/src/event/sys/windows/parse.rs @@ -358,7 +358,15 @@ fn parse_mouse_event_record( } } EventFlags::DoubleClick => None, // double click not supported by unix terminals - EventFlags::MouseHwheeled => None, // horizontal scroll not supported by unix terminals + EventFlags::MouseHwheeled => { + if button_state.scroll_left() { + Some(MouseEventKind::ScrollLeft) + } else if button_state.scroll_right() { + Some(MouseEventKind::ScrollRight) + } else { + None + } + } _ => None, };