summaryrefslogtreecommitdiff
path: root/engine/src/windowing.rs
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/windowing.rs')
-rw-r--r--engine/src/windowing.rs60
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,