From 83b0eae273a7396842a19c16d659d6127d403763 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Tue, 7 May 2019 22:00:03 +0200 Subject: [PATCH 1/4] Improve cursor grab Former-commit-id: c1a8b5383bf7682245e2294e5b1d62dae0beb329 --- voxygen/src/hud/mod.rs | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 8a89eb6c6f..6eb2b0910e 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -110,15 +110,19 @@ pub struct Show { map: bool, inventory_test_button: bool, mini_map: bool, + + want_grab: Option, } impl Show { fn toggle_bag(&mut self) { - self.bag = !self.bag + self.bag = !self.bag; + self.want_grab = Some(!self.bag); } fn toggle_map(&mut self) { self.map = !self.map; self.bag = false; + self.want_grab = Some(!self.map); } fn toggle_mini_map(&mut self) { @@ -155,6 +159,7 @@ impl Show { _ => Windows::Settings, }; self.bag = false; + self.want_grab = Some(self.open_windows != Windows::Settings); } fn toggle_help(&mut self) { @@ -165,7 +170,7 @@ impl Show { self.ui = !self.ui; } - fn toggle_windows(&mut self, global_state: &mut GlobalState) { + fn toggle_windows(&mut self) { if self.bag || self.esc_menu || self.map @@ -178,10 +183,10 @@ impl Show { self.esc_menu = false; self.map = false; self.open_windows = Windows::None; - global_state.window.grab_cursor(true); + self.want_grab = Some(true); } else { self.esc_menu = true; - global_state.window.grab_cursor(false); + self.want_grab = Some(false); } } } @@ -227,6 +232,7 @@ impl Hud { ui: true, inventory_test_button: false, mini_map: false, + want_grab: None, }, to_focus: None, settings, @@ -449,7 +455,7 @@ impl Hud { pub fn handle_event(&mut self, event: WinEvent, global_state: &mut GlobalState) -> bool { let cursor_grabbed = global_state.window.is_cursor_grabbed(); - match event { + let handled = match event { WinEvent::Ui(event) => { if (self.typing() && event.is_keyboard() && self.show.ui) || !(cursor_grabbed && event.is_keyboard_or_mouse()) @@ -477,7 +483,7 @@ impl Hud { self.ui.focus_widget(None); } else { // Close windows on esc - self.show.toggle_windows(global_state); + self.show.toggle_windows(); } true } @@ -526,7 +532,13 @@ impl Hud { true } _ => false, + }; + // Handle cursor grab + if let Some(state) = self.show.want_grab { + global_state.window.grab_cursor(state); + self.show.want_grab = None; } + return handled; } pub fn maintain(&mut self, renderer: &mut Renderer, tps: f64) -> Vec { From 2017b8979122dffb1c04efb25d797d3158c8cf1c Mon Sep 17 00:00:00 2001 From: timokoesters Date: Wed, 8 May 2019 22:15:58 +0200 Subject: [PATCH 2/4] Minor fixes Former-commit-id: 9c5e90e2bad24e9b5c443bfb1509b18877adf2d6 --- voxygen/src/hud/mod.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 6eb2b0910e..cd1828b4e7 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -534,11 +534,11 @@ impl Hud { _ => false, }; // Handle cursor grab - if let Some(state) = self.show.want_grab { + if let Some(state) = self.show.want_grab.take() { global_state.window.grab_cursor(state); - self.show.want_grab = None; } - return handled; + + handled } pub fn maintain(&mut self, renderer: &mut Renderer, tps: f64) -> Vec { From 211b92d8480820de09a5a325bc2bbc9021182986 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Thu, 9 May 2019 10:55:32 +0200 Subject: [PATCH 3/4] Force ungrab on Key::ToggleCursor Former-commit-id: 222f5693363662d25cb065fdc104cd079e2c395d --- voxygen/src/hud/mod.rs | 15 +++++++++++++-- voxygen/src/session.rs | 6 ------ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index cd1828b4e7..204d956591 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -201,6 +201,7 @@ pub struct Hud { show: Show, to_focus: Option>, settings: Settings, + force_ungrab: bool, } impl Hud { @@ -236,6 +237,7 @@ impl Hud { }, to_focus: None, settings, + force_ungrab: false, } } @@ -520,6 +522,13 @@ impl Hud { self.show.toggle_help(); true } + Key::ToggleCursor => { + self.force_ungrab = !self.force_ungrab; + if self.force_ungrab { + global_state.window.grab_cursor(false); + } + true + } _ => false, }, WinEvent::KeyDown(key) | WinEvent::KeyUp(key) => match key { @@ -534,8 +543,10 @@ impl Hud { _ => false, }; // Handle cursor grab - if let Some(state) = self.show.want_grab.take() { - global_state.window.grab_cursor(state); + if !self.force_ungrab { + if let Some(state) = self.show.want_grab.take() { + global_state.window.grab_cursor(state); + } } handled diff --git a/voxygen/src/session.rs b/voxygen/src/session.rs index cc8d071043..d1b9de0361 100644 --- a/voxygen/src/session.rs +++ b/voxygen/src/session.rs @@ -127,12 +127,6 @@ impl PlayState for SessionState { Event::Close => { return PlayStateResult::Shutdown; } - // Toggle cursor grabbing - Event::KeyDown(Key::ToggleCursor) => { - global_state - .window - .grab_cursor(!global_state.window.is_cursor_grabbed()); - } // Movement Key Pressed Event::KeyDown(Key::MoveForward) => self.key_state.up = true, Event::KeyDown(Key::MoveBack) => self.key_state.down = true, From a05aa14f41091a8f0b130ce0d3c8c901d8702c83 Mon Sep 17 00:00:00 2001 From: timokoesters Date: Thu, 9 May 2019 18:55:13 +0200 Subject: [PATCH 4/4] Fix bug when pressing ToggleMouse twice while grabbed Former-commit-id: 9e01b71577fd3dbe570b7aca1e041c32e9a01c66 --- voxygen/src/hud/mod.rs | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/voxygen/src/hud/mod.rs b/voxygen/src/hud/mod.rs index 204d956591..edbf1e91eb 100644 --- a/voxygen/src/hud/mod.rs +++ b/voxygen/src/hud/mod.rs @@ -111,18 +111,18 @@ pub struct Show { inventory_test_button: bool, mini_map: bool, - want_grab: Option, + want_grab: bool, } impl Show { fn toggle_bag(&mut self) { self.bag = !self.bag; - self.want_grab = Some(!self.bag); + self.want_grab = !self.bag; } fn toggle_map(&mut self) { self.map = !self.map; self.bag = false; - self.want_grab = Some(!self.map); + self.want_grab = !self.map; } fn toggle_mini_map(&mut self) { @@ -159,7 +159,7 @@ impl Show { _ => Windows::Settings, }; self.bag = false; - self.want_grab = Some(self.open_windows != Windows::Settings); + self.want_grab = self.open_windows != Windows::Settings; } fn toggle_help(&mut self) { @@ -183,10 +183,10 @@ impl Show { self.esc_menu = false; self.map = false; self.open_windows = Windows::None; - self.want_grab = Some(true); + self.want_grab = true; } else { self.esc_menu = true; - self.want_grab = Some(false); + self.want_grab = false; } } } @@ -233,7 +233,7 @@ impl Hud { ui: true, inventory_test_button: false, mini_map: false, - want_grab: None, + want_grab: true, }, to_focus: None, settings, @@ -544,8 +544,8 @@ impl Hud { }; // Handle cursor grab if !self.force_ungrab { - if let Some(state) = self.show.want_grab.take() { - global_state.window.grab_cursor(state); + if cursor_grabbed != self.show.want_grab { + global_state.window.grab_cursor(self.show.want_grab); } }