fix bug with ui using old win size when switching to previous playstate

Former-commit-id: b6c166882c978806af65f70496626fad33081975
This commit is contained in:
Imbris 2019-03-28 00:42:04 -04:00
parent bee273fc9e
commit 93897f904a
3 changed files with 17 additions and 1 deletions

View File

@ -39,6 +39,7 @@ impl GlobalState {
/// effects a state may have made). /// effects a state may have made).
pub fn on_play_state_changed(&mut self) { pub fn on_play_state_changed(&mut self) {
self.window.grab_cursor(false); self.window.grab_cursor(false);
self.window.needs_refresh_resize();
} }
} }

View File

@ -53,6 +53,9 @@ impl Event {
_ => false, _ => false,
} }
} }
pub fn new_resize(dims: Vec2<f64>) -> Self {
Self(Input::Resize(dims.x, dims.y))
}
} }
pub struct Cache { pub struct Cache {

View File

@ -15,6 +15,7 @@ pub struct Window {
renderer: Renderer, renderer: Renderer,
window: glutin::GlWindow, window: glutin::GlWindow,
cursor_grabbed: bool, cursor_grabbed: bool,
needs_refresh_resize: bool,
key_map: HashMap<glutin::VirtualKeyCode, Key>, key_map: HashMap<glutin::VirtualKeyCode, Key>,
} }
@ -62,6 +63,7 @@ impl Window {
)?, )?,
window, window,
cursor_grabbed: false, cursor_grabbed: false,
needs_refresh_resize: false,
key_map, key_map,
}); });
tmp tmp
@ -71,6 +73,13 @@ impl Window {
pub fn renderer_mut(&mut self) -> &mut Renderer { &mut self.renderer } pub fn renderer_mut(&mut self) -> &mut Renderer { &mut self.renderer }
pub fn fetch_events(&mut self) -> Vec<Event> { pub fn fetch_events(&mut self) -> Vec<Event> {
let mut events = vec![];
// Refresh ui size (used when changing playstates)
if self.needs_refresh_resize {
events.push(Event::Ui(ui::Event::new_resize(self.logical_size())));
self.needs_refresh_resize = false;
}
// Copy data that is needed by the events closure to avoid lifetime errors // Copy data that is needed by the events closure to avoid lifetime errors
// TODO: Remove this if/when the compiler permits it // TODO: Remove this if/when the compiler permits it
let cursor_grabbed = self.cursor_grabbed; let cursor_grabbed = self.cursor_grabbed;
@ -78,7 +87,6 @@ impl Window {
let window = &mut self.window; let window = &mut self.window;
let key_map = &self.key_map; let key_map = &self.key_map;
let mut events = vec![];
self.events_loop.poll_events(|event| { self.events_loop.poll_events(|event| {
// Get events for ui // Get events for ui
if let Some(event) = ui::Event::try_from(event.clone(), &window) { if let Some(event) = ui::Event::try_from(event.clone(), &window) {
@ -142,6 +150,10 @@ impl Window {
.expect("Failed to grab/ungrab cursor"); .expect("Failed to grab/ungrab cursor");
} }
pub fn needs_refresh_resize(&mut self) {
self.needs_refresh_resize = true;
}
pub fn logical_size(&self) -> Vec2<f64> { pub fn logical_size(&self) -> Vec2<f64> {
let (w, h) = self.window.get_inner_size().unwrap_or(glutin::dpi::LogicalSize::new(0.0, 0.0)).into(); let (w, h) = self.window.get_inner_size().unwrap_or(glutin::dpi::LogicalSize::new(0.0, 0.0)).into();
Vec2::new(w, h) Vec2::new(w, h)