diff options
Diffstat (limited to 'engine/src/windowing/window.rs')
| -rw-r--r-- | engine/src/windowing/window.rs | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/engine/src/windowing/window.rs b/engine/src/windowing/window.rs index 93cb233..bbf7eb6 100644 --- a/engine/src/windowing/window.rs +++ b/engine/src/windowing/window.rs @@ -33,6 +33,10 @@ pub struct CreationAttributes pub position: Option<Position>, pub inner_size: Option<Size>, pub x_visual_id: Option<XVisualID>, + + // These do not have equivalents in winit::window::WindowAttributes + pub cursor_visible: bool, + pub cursor_grab_mode: CursorGrabMode, } macro_rules! gen_creation_attrs_with_fn { @@ -60,6 +64,9 @@ gen_creation_attrs_with_fn!(position, Option<Position>); gen_creation_attrs_with_fn!(inner_size, Option<Size>); gen_creation_attrs_with_fn!(x_visual_id, Option<XVisualID>); +gen_creation_attrs_with_fn!(cursor_visible, bool); +gen_creation_attrs_with_fn!(cursor_grab_mode, CursorGrabMode); + impl CreationAttributes { pub(crate) fn into_window_attrs(self) -> winit::window::WindowAttributes @@ -69,8 +76,10 @@ impl CreationAttributes .with_transparent(self.transparent) .with_maximized(self.maximized) .with_fullscreen(match self.fullscreen { - Some(Fullscreen::Borderless) => Some(winit::window::Fullscreen::Borderless(None)), - None => None + Some(Fullscreen::Borderless) => { + Some(winit::window::Fullscreen::Borderless(None)) + } + None => None, }) .with_visible(self.visible) .with_resizable(self.resizable); @@ -80,11 +89,18 @@ impl CreationAttributes #[cfg(target_os = "linux")] if let Some(visual_id) = self.x_visual_id { - return <winit::window::WindowAttributes as winit::platform::x11::WindowAttributesExtX11>::with_x11_visual(window_attrs, visual_id) + use winit::platform::x11::WindowAttributesExtX11; + + return window_attrs.with_x11_visual(visual_id); } window_attrs } + + pub(crate) fn apply_extra_attrs_to_window(&self, window: &winit::window::Window) + { + window.set_cursor_visible(self.cursor_visible); + } } impl Default for CreationAttributes @@ -100,7 +116,9 @@ impl Default for CreationAttributes resizable: true, position: None, inner_size: None, - x_visual_id: None + x_visual_id: None, + cursor_visible: true, + cursor_grab_mode: CursorGrabMode::None, } } } @@ -146,8 +164,8 @@ impl Window { Self { title: creation_attrs.title.clone().into_owned(), - cursor_visible: true, - cursor_grab_mode: CursorGrabMode::None, + cursor_visible: creation_attrs.cursor_visible, + cursor_grab_mode: creation_attrs.cursor_grab_mode, wid: Id::from_inner(winit_window.id()), inner_size: winit_window.inner_size().into(), scale_factor: winit_window.scale_factor(), @@ -162,9 +180,9 @@ impl Window let curr_inner_size = winit_window.inner_size().clone().into(); - let inner_size_request_result = match winit_window - .request_inner_size(winit::dpi::Size::Physical(self.inner_size.clone().into())) - { + let inner_size_request_result = match winit_window.request_inner_size( + winit::dpi::Size::Physical(self.inner_size.clone().into()), + ) { // The comparison of curr_inner_size is in case the user's windowing system // lies about using the requested inner size None if curr_inner_size == self.inner_size => Ok(()), |
