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