From ef467d0844824e11f5f9906e4c3ee354d417d4e9 Mon Sep 17 00:00:00 2001 From: thinnerthinker Date: Tue, 9 Jul 2024 02:44:31 +0300 Subject: [PATCH] expose display creation to customize instance --- sursface/src/app.rs | 8 +++++--- sursface/src/display/mod.rs | 10 +++++----- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/sursface/src/app.rs b/sursface/src/app.rs index 7eeb110..230a5f5 100644 --- a/sursface/src/app.rs +++ b/sursface/src/app.rs @@ -4,7 +4,7 @@ use winit::dpi::PhysicalSize; use winit::event::{DeviceEvent, ElementState, KeyEvent, WindowEvent}; use winit::event_loop::ActiveEventLoop; use winit::keyboard::{KeyCode, PhysicalKey}; -use winit::window::WindowId; +use winit::window::{Window, WindowId}; #[cfg(target_arch = "wasm32")] extern crate console_error_panic_hook; @@ -22,6 +22,7 @@ pub struct App<'a, State> { pub struct AppHandlers { pub init: fn(&mut Display) -> State, + pub create_display: fn(Window) -> Display<'static>, pub render: fn(&mut Display, &mut State), pub event: fn(&mut Display, &mut State, WindowEvent), pub device_event: fn(&mut Display, &mut State, DeviceEvent), @@ -31,6 +32,7 @@ impl Default for AppHandlers { fn default() -> Self { AppHandlers { init: |_display: &mut Display| panic!("init handler not provided"), + create_display: |window: Window| Display::from_window(window), render: |_display: &mut Display, _state: &mut State| {}, event: |_display: &mut Display, _state: &mut State, _event: WindowEvent| {}, device_event: |_display: &mut Display, _state: &mut State, _event: DeviceEvent| {}, @@ -113,11 +115,11 @@ impl<'a, State> ApplicationHandler for App<'a, State> { #[cfg(not(target_arch = "wasm32"))] { - self.display = Some(Arc::new(Mutex::new(Display::from_window_size(event_loop, self.initial_size)))); + self.display = Some(Arc::new(Mutex::new(Display::from_window(Display::create_window_from_size(event_loop, self.initial_size))))); } #[cfg(target_arch = "wasm32")] { - self.display = Some(Arc::new(Mutex::new(Display::from_canvas(event_loop, self.canvas.clone())))); + self.display = Some(Arc::new(Mutex::new(Display::from_window(Display::create_window_from_canvas(event_loop, self.canvas.clone()))))); } let new_state = (&self.handlers.init)(&mut self.display.clone().unwrap().lock().unwrap()); diff --git a/sursface/src/display/mod.rs b/sursface/src/display/mod.rs index 76f40dd..cd5020b 100755 --- a/sursface/src/display/mod.rs +++ b/sursface/src/display/mod.rs @@ -19,26 +19,26 @@ pub struct Display<'a> { } impl<'a> Display<'a> { - pub fn from_window_size(event_loop: &ActiveEventLoop, window_size: PhysicalSize) -> Self { + pub fn create_window_from_size(event_loop: &ActiveEventLoop, window_size: PhysicalSize) -> Window { let window = event_loop .create_window(WindowAttributes::default() .with_inner_size(window_size)) .expect("Couldn't create window"); - Self::from_window(window) + window } #[cfg(target_arch = "wasm32")] - pub fn from_canvas(event_loop: &ActiveEventLoop, canvas: wgpu::web_sys::HtmlCanvasElement) -> Self { + pub fn create_window_from_canvas(event_loop: &ActiveEventLoop, canvas: wgpu::web_sys::HtmlCanvasElement) -> Window { let window = event_loop .create_window(WindowAttributes::default() .with_canvas(Some(canvas))) .expect("Couldn't create window"); - Self::from_window(window) + window } - fn from_window(window: Window) -> Self { + pub fn from_window(window: Window) -> Self { let instance = wgpu::Instance::new(wgpu::InstanceDescriptor { #[cfg(not(target_arch = "wasm32"))] backends: wgpu::Backends::PRIMARY,