mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Improve cursor grab
Former-commit-id: c1a8b5383bf7682245e2294e5b1d62dae0beb329
This commit is contained in:
parent
7132cfdf5b
commit
a15532f81a
@ -110,15 +110,19 @@ pub struct Show {
|
||||
map: bool,
|
||||
inventory_test_button: bool,
|
||||
mini_map: bool,
|
||||
|
||||
want_grab: Option<bool>,
|
||||
}
|
||||
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<Event> {
|
||||
|
Loading…
Reference in New Issue
Block a user