From 9f40e1deb96cd60630803e9abcfc50626e1861e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Mockers?= Date: Sun, 29 Nov 2020 16:41:31 +0100 Subject: [PATCH] make scale factor available from bevy_window --- crates/bevy_window/src/window.rs | 12 ++++++++++++ crates/bevy_winit/src/lib.rs | 5 +++-- crates/bevy_winit/src/winit_windows.rs | 4 +++- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/crates/bevy_window/src/window.rs b/crates/bevy_window/src/window.rs index 387f320cbfe9d..9ce9917948417 100644 --- a/crates/bevy_window/src/window.rs +++ b/crates/bevy_window/src/window.rs @@ -46,6 +46,7 @@ pub struct Window { #[cfg(target_arch = "wasm32")] pub canvas: Option, command_queue: Vec, + scale_factor: f64, } #[derive(Debug)] @@ -110,6 +111,7 @@ impl Window { #[cfg(target_arch = "wasm32")] canvas: window_descriptor.canvas.clone(), command_queue: Vec::new(), + scale_factor: 1.0, } } @@ -141,6 +143,16 @@ impl Window { self.height = height; } + #[doc(hidden)] + pub fn update_scale_factor_from_backend(&mut self, scale_factor: f64) { + self.scale_factor = scale_factor; + } + + #[inline] + pub fn scale_factor(&self) -> f64 { + self.scale_factor + } + #[inline] pub fn title(&self) -> &str { &self.title diff --git a/crates/bevy_winit/src/lib.rs b/crates/bevy_winit/src/lib.rs index 0d9489441afe4..08f48c347d7ab 100644 --- a/crates/bevy_winit/src/lib.rs +++ b/crates/bevy_winit/src/lib.rs @@ -304,6 +304,7 @@ pub fn winit_runner(mut app: App) { let window = windows.get_mut(window_id).unwrap(); let size = new_inner_size.to_logical(scale_factor); window.update_resolution_from_backend(size.width, size.height); + window.update_scale_factor_from_backend(scale_factor); } _ => {} }, @@ -344,8 +345,8 @@ fn handle_create_window_events( let create_window_events = resources.get::>().unwrap(); let mut window_created_events = resources.get_mut::>().unwrap(); for create_window_event in create_window_event_reader.iter(&create_window_events) { - let window = Window::new(create_window_event.id, &create_window_event.descriptor); - winit_windows.create_window(event_loop, &window); + let mut window = Window::new(create_window_event.id, &create_window_event.descriptor); + winit_windows.create_window(event_loop, &mut window); let window_id = window.id(); windows.add(window); window_created_events.send(WindowCreated { id: window_id }); diff --git a/crates/bevy_winit/src/winit_windows.rs b/crates/bevy_winit/src/winit_windows.rs index 00e87ee5bad07..01cbde57fefd2 100644 --- a/crates/bevy_winit/src/winit_windows.rs +++ b/crates/bevy_winit/src/winit_windows.rs @@ -12,7 +12,7 @@ impl WinitWindows { pub fn create_window( &mut self, event_loop: &winit::event_loop::EventLoopWindowTarget<()>, - window: &Window, + window: &mut Window, ) { #[cfg(target_os = "windows")] let mut winit_window_builder = { @@ -100,6 +100,8 @@ impl WinitWindows { } } + window.update_scale_factor_from_backend(winit_window.scale_factor()); + self.windows.insert(winit_window.id(), winit_window); }