diff options
Diffstat (limited to 'engine/src/windowing.rs')
| -rw-r--r-- | engine/src/windowing.rs | 60 |
1 files changed, 41 insertions, 19 deletions
diff --git a/engine/src/windowing.rs b/engine/src/windowing.rs index 8dba8f9..ea5b5f7 100644 --- a/engine/src/windowing.rs +++ b/engine/src/windowing.rs @@ -3,7 +3,7 @@ use std::env::consts::EXE_SUFFIX; use std::hint::cold_path; use std::panic::catch_unwind; use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::{Arc, Weak, Mutex}; +use std::sync::{Arc, Mutex, Weak}; use std::thread::Builder as ThreadBuilder; use crossbeam_queue::ArrayQueue; @@ -185,7 +185,7 @@ fn update_stuff( mouse.position = PhysicalPosition { x: absolute_mouse_pos.0, - y: absolute_mouse_pos.1 + y: absolute_mouse_pos.1, }; keyboard.set_text_keys(iter_array_queue(&context.shared_state.text_keys)); @@ -312,7 +312,6 @@ fn update_stuff( let err = err.take().expect("Not possible"); return Err(err.into()); - } Ok(()) @@ -416,7 +415,12 @@ impl Context fn try_send_message_to_app(&self, message: MessageToApp) { - if self.shared_state.message_to_app_queue.push(message).is_err() { + if self + .shared_state + .message_to_app_queue + .push(message) + .is_err() + { tracing::error!( "Failed to send message. Queue for messages to windowing app is full" ); @@ -451,7 +455,7 @@ impl Context }; let event_loop = match create_event_loop() { - Ok(event_loop) => event_loop, + Ok(event_loop) => event_loop, Err(err) => { return Err((app, AppThreadError::CreateEventLoop(err))); } @@ -459,17 +463,26 @@ impl Context event_loop.set_control_flow(EventLoopControlFlow::Poll); - event_loop.run_app(&mut app).map_err(|err| (app, AppThreadError::StartEventLoop(err)))?; + event_loop + .run_app(&mut app) + .map_err(|err| (app, AppThreadError::StartEventLoop(err)))?; Ok(()) }) { - Ok(Ok(())) => {}, + Ok(Ok(())) => {} Ok(Err((app, err))) => { - *app.shared_state.thread_err.try_lock().expect("Not possible") = Some(err); - app.shared_state.has_thread_err.store(true, Ordering::Relaxed); + *app.shared_state + .thread_err + .try_lock() + .expect("Not possible") = Some(err); + app.shared_state + .has_thread_err + .store(true, Ordering::Relaxed); } Err(_) => { - shared_state_c.thread_panicked.store(true, Ordering::Relaxed); + shared_state_c + .thread_panicked + .store(true, Ordering::Relaxed); } }; }) @@ -570,7 +583,7 @@ impl Default for SharedState is_dropped: AtomicBool::new(false), thread_panicked: AtomicBool::new(false), thread_err: Mutex::new(None), - has_thread_err: AtomicBool::new(false) + has_thread_err: AtomicBool::new(false), } } } @@ -596,9 +609,9 @@ impl App ); let winit_window = Arc::new( - match event_loop - .create_window(window_creation_attrs.clone().into_window_attrs()) - { + match event_loop.create_window( + window_creation_attrs.clone().into_window_attrs(), + ) { Ok(window) => window, Err(err) => { tracing::error!("Failed to create window: {err}"); @@ -607,9 +620,16 @@ impl App }, ); + window_creation_attrs.apply_extra_attrs_to_window(&winit_window); + self.windows.insert( WindowId::from_inner(winit_window.id()), - (Arc::downgrade(&winit_window), WindowSettings::default()), + ( + Arc::downgrade(&winit_window), + WindowSettings { + cursor_grab_mode: window_creation_attrs.cursor_grab_mode, + }, + ), ); self.send_message(MessageFromApp::WindowCreated( @@ -772,10 +792,12 @@ impl ApplicationHandler for App let window_size = window.inner_size(); - if let Err(err) = window.set_cursor_position(Position::Physical(PhysicalPosition { - x: window_size.width as i32 / 2, - y: window_size.height as i32 / 2, - })) { + if let Err(err) = + window.set_cursor_position(Position::Physical(PhysicalPosition { + x: window_size.width as i32 / 2, + y: window_size.height as i32 / 2, + })) + { cold_path(); tracing::error!( window_id=?window_id, |
