From adc8fe0974560a07e3869cb5f2b335dbdb421ca6 Mon Sep 17 00:00:00 2001 From: Billy Messenger Date: Sun, 13 Sep 2020 09:19:05 -0500 Subject: [PATCH] Add mouse cursor to Window --- src/mouse_cursor.rs | 1 + src/x11/window.rs | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/mouse_cursor.rs b/src/mouse_cursor.rs index 0fdcf78..4460397 100644 --- a/src/mouse_cursor.rs +++ b/src/mouse_cursor.rs @@ -9,6 +9,7 @@ pub enum MouseCursor { Grabbing, ResizingHorizontally, ResizingVertically, + Hidden, } impl Default for MouseCursor { diff --git a/src/x11/window.rs b/src/x11/window.rs index 325aae6..4ad84b4 100644 --- a/src/x11/window.rs +++ b/src/x11/window.rs @@ -7,14 +7,15 @@ use raw_window_handle::{unix::XlibHandle, HasRawWindowHandle, RawWindowHandle}; use super::XcbConnection; use crate::{ - Event, KeyboardEvent, MouseButton, MouseEvent, Parent, ScrollDelta, WindowEvent, WindowHandler, - WindowInfo, WindowOpenOptions, + Event, KeyboardEvent, MouseButton, MouseCursor, MouseEvent, Parent, ScrollDelta, WindowEvent, + WindowHandler,WindowInfo, WindowOpenOptions, }; pub struct Window { xcb_connection: XcbConnection, window_id: u32, window_info: WindowInfo, + mouse_cursor: MouseCursor, frame_interval: Duration, event_loop_running: bool, @@ -145,6 +146,7 @@ impl Window { xcb_connection, window_id, window_info, + mouse_cursor: MouseCursor::default(), frame_interval: Duration::from_millis(15), event_loop_running: false, @@ -162,6 +164,33 @@ impl Window { &self.window_info } + /* + pub fn set_mouse_cursor(&mut self, mouse_cursor: MouseCursor) { + if self.mouse_cursor != mouse_cursor { + if mouse_cursor == MouseCursor::Hidden { + xcb::change_cursor(&self.xcb_connection.conn, xcb::CW_CURSOR, xcb::CURSOR_NONE); + } else { + let cursor_name = match mouse_cursor { + MouseCursor::Idle => "pointer", + MouseCursor::Pointer => "pointer", + MouseCursor::Grab => "hand1", + MouseCursor::Text => "xterm", + MouseCursor::Crosshair => "crosshair", + MouseCursor::Working => "watch", + MouseCursor::Grabbing => "hand2", + MouseCursor::ResizingHorizontally => "sizing", + MouseCursor::ResizingVertically => "sizing", + _ => "pointer", + }; + } + + + + self.mouse_cursor = mouse_cursor; + } + } + */ + #[inline] fn drain_xcb_events(&mut self, handler: &mut H) { while let Some(event) = self.xcb_connection.conn.poll_for_event() {