From cbdb80698fd7128e7bcc63c8513e53731dda0963 Mon Sep 17 00:00:00 2001 From: pommicket Date: Tue, 24 Jan 2023 20:15:00 -0500 Subject: pause menu --- src/win.rs | 64 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src/win.rs') diff --git a/src/win.rs b/src/win.rs index 831a182..08b0b05 100644 --- a/src/win.rs +++ b/src/win.rs @@ -434,6 +434,28 @@ impl KeyModifier { } } +#[derive(Debug, Clone, Copy, PartialEq, Eq)] +pub enum MouseButton { + Left, + Middle, + Right, + X1, + X2, +} + +impl MouseButton { + fn from_sdl(x: u8) -> Option { + Some(match x { + sdl::SDL_BUTTON_LEFT => MouseButton::Left, + sdl::SDL_BUTTON_MIDDLE => MouseButton::Middle, + sdl::SDL_BUTTON_RIGHT => MouseButton::Right, + sdl::SDL_BUTTON_X1 => MouseButton::X1, + sdl::SDL_BUTTON_X2 => MouseButton::X2, + _ => return None, + }) + } +} + #[derive(Debug, Clone)] pub enum Event { Quit, @@ -451,6 +473,20 @@ pub enum Event { xrel: i32, yrel: i32, }, + MouseButtonDown { + button: MouseButton, + x: i32, + y: i32, + /// 1 for single-click, 2 for double-click, etc. + clicks: u8 + }, + MouseButtonUp { + button: MouseButton, + x: i32, + y: i32, + /// 1 for single-click, 2 for double-click, etc. + clicks: u8 + } } pub fn display_error_message(message: &str) { @@ -1493,6 +1529,29 @@ impl Window { yrel: motion.yrel, }); } + sdl::SDL_MOUSEBUTTONDOWN | sdl::SDL_MOUSEBUTTONUP => { + let b = unsafe { sdl.button }; + if let Some(button) = MouseButton::from_sdl(b.button) { + let x = b.x; + let y = b.y; + let clicks = b.clicks; + if b.state == sdl::SDL_PRESSED { + return Some(Event::MouseButtonDown { + x, + y, + clicks, + button, + }); + } else if b.state == sdl::SDL_RELEASED { + return Some(Event::MouseButtonUp { + x, + y, + clicks, + button, + }); + } + } + } _ => {} } } @@ -1679,6 +1738,11 @@ impl Window { self.uniform1i(name, slot as i32); } + pub fn get_mouse_pos(&self) -> (i32, i32) { + let state = unsafe { sdl::get_mouse_state() }; + (state.0, state.1) + } + pub fn is_key_down(&self, key: Key) -> bool { let kbd_state = unsafe { sdl::get_keyboard_state() }; let mut scancodes = unsafe { sdl::get_scancodes_from_key(key.to_sdl()) }; -- cgit v1.2.3