From 07e4887f31447db73ec400e2dd2d5e818a87085f Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Wed, 11 Dec 2024 00:27:42 -0500 Subject: [PATCH 1/2] feat: enable mouse move event when mouse is pressed on macos --- examples/dragging.rs | 34 ++++++++++++++++++++++++++++++++++ examples/simple.rs | 20 ++++++++++++++++++++ src/codes_conv.rs | 2 +- src/macos/common.rs | 14 ++++++++++++++ 4 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 examples/dragging.rs create mode 100644 examples/simple.rs diff --git a/examples/dragging.rs b/examples/dragging.rs new file mode 100644 index 0000000..0f0552a --- /dev/null +++ b/examples/dragging.rs @@ -0,0 +1,34 @@ +use std::sync::atomic::AtomicBool; + +use rdev::{listen, Event, EventType}; + +static DRAGGING: AtomicBool = AtomicBool::new(false); + +fn callback(event: Event) { + match event.event_type { + EventType::MouseMove { x, y } => { + if DRAGGING.load(std::sync::atomic::Ordering::Relaxed) { + println!("Mouse dragged to ({}, {})", x, y); + } else { + println!("Mouse moved to ({}, {})", x, y); + } + } + EventType::ButtonPress(button) => { + println!("Mouse button pressed: {:?}", button); + DRAGGING.store(true, std::sync::atomic::Ordering::Relaxed); + } + EventType::ButtonRelease(button) => { + println!("Mouse button released: {:?}", button); + DRAGGING.store(false, std::sync::atomic::Ordering::Relaxed); + } + _ => { + println!("Unhandled Event: {:?}", event); + } + } +} + +fn main() { + if let Err(error) = listen(callback) { + println!("Error: {:?}", error) + } +} diff --git a/examples/simple.rs b/examples/simple.rs new file mode 100644 index 0000000..336574d --- /dev/null +++ b/examples/simple.rs @@ -0,0 +1,20 @@ +use rdev::{listen, Event, EventType}; + +fn callback(event: Event) { + match event.event_type { + EventType::MouseMove { x, y } => println!("Mouse moved to ({}, {})", x, y), + EventType::ButtonPress(button) => println!("Mouse button pressed: {:?}", button), + EventType::ButtonRelease(button) => println!("Mouse button released: {:?}", button), + EventType::KeyPress(key) => println!("Key pressed: {:?}", key), + EventType::KeyRelease(key) => println!("Key released: {:?}", key), + _ => { + println!("Unhandled Event: {:?}", event); + } + } +} + +fn main() { + if let Err(error) = listen(callback) { + println!("Error: {:?}", error) + } +} diff --git a/src/codes_conv.rs b/src/codes_conv.rs index 8e1367e..b8803d7 100644 --- a/src/codes_conv.rs +++ b/src/codes_conv.rs @@ -155,7 +155,7 @@ mod test { continue; } if let Some(code2) = super::usb_hid_code_to_macos_code(usb_hid) { - assert_eq!(code, code2 as u32) + assert_eq!(code, code2 as u16) } else { assert!(false, "We could not convert back code: {:?}", code); } diff --git a/src/macos/common.rs b/src/macos/common.rs index d4fc9ee..37956c4 100644 --- a/src/macos/common.rs +++ b/src/macos/common.rs @@ -168,6 +168,20 @@ pub unsafe fn convert( CGEventType::LeftMouseUp => Some(EventType::ButtonRelease(Button::Left)), CGEventType::RightMouseDown => Some(EventType::ButtonPress(Button::Right)), CGEventType::RightMouseUp => Some(EventType::ButtonRelease(Button::Right)), + CGEventType::LeftMouseDragged => { + let point = cg_event.location(); + Some(EventType::MouseMove { + x: point.x, + y: point.y, + }) + } + CGEventType::RightMouseDragged => { + let point = cg_event.location(); + Some(EventType::MouseMove { + x: point.x, + y: point.y, + }) + } CGEventType::MouseMoved => { let point = cg_event.location(); Some(EventType::MouseMove { From cb9a29e19668a52e4e67d8a0ca6739c1807f8d3f Mon Sep 17 00:00:00 2001 From: Huakun Shen Date: Wed, 11 Dec 2024 21:03:49 -0500 Subject: [PATCH 2/2] chore: remove simple.rs example --- examples/simple.rs | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100644 examples/simple.rs diff --git a/examples/simple.rs b/examples/simple.rs deleted file mode 100644 index 336574d..0000000 --- a/examples/simple.rs +++ /dev/null @@ -1,20 +0,0 @@ -use rdev::{listen, Event, EventType}; - -fn callback(event: Event) { - match event.event_type { - EventType::MouseMove { x, y } => println!("Mouse moved to ({}, {})", x, y), - EventType::ButtonPress(button) => println!("Mouse button pressed: {:?}", button), - EventType::ButtonRelease(button) => println!("Mouse button released: {:?}", button), - EventType::KeyPress(key) => println!("Key pressed: {:?}", key), - EventType::KeyRelease(key) => println!("Key released: {:?}", key), - _ => { - println!("Unhandled Event: {:?}", event); - } - } -} - -fn main() { - if let Err(error) = listen(callback) { - println!("Error: {:?}", error) - } -}