Skip to content

Commit

Permalink
Allow introspection of WindowBuilder attributes
Browse files Browse the repository at this point in the history
Makes WindowAttributes public and adds window_attributes() getter to
WindowBuilder.

In version 0.27, the WindowAttributes struct was made private, but this
removed the ability to introspect the default WindowBuilder values.
  • Loading branch information
spearman authored Jan 27, 2023
1 parent b457329 commit 422c6b1
Show file tree
Hide file tree
Showing 8 changed files with 18 additions and 10 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ And please only add new entries to the top of this list, right below the `# Unre
- On macOS, fix the mouse buttons other than left/right/middle being reported as middle.
- On Wayland, support fractional scaling via the wp-fractional-scale protocol.
- On web, fix removal of mouse event listeners from the global object upon window distruction.
- Add WindowAttributes getter to WindowBuilder to allow introspection of default values.

# 0.27.5

Expand Down
2 changes: 1 addition & 1 deletion src/platform_impl/ios/view.rs
Original file line number Diff line number Diff line change
Expand Up @@ -455,7 +455,7 @@ impl WinitUIWindow {

this.setRootViewController(Some(view_controller));

match window_attributes.fullscreen {
match window_attributes.fullscreen.clone().map(Into::into) {
Some(Fullscreen::Exclusive(ref video_mode)) => {
let monitor = video_mode.monitor();
let screen = monitor.ui_screen();
Expand Down
3 changes: 2 additions & 1 deletion src/platform_impl/ios/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -416,7 +416,8 @@ impl Window {
// TODO: transparency, visible

let main_screen = UIScreen::main(mtm);
let screen = match window_attributes.fullscreen {
let fullscreen = window_attributes.fullscreen.clone().map(Into::into);
let screen = match fullscreen {
Some(Fullscreen::Exclusive(ref video_mode)) => video_mode.monitor.ui_screen(),
Some(Fullscreen::Borderless(Some(ref monitor))) => monitor.ui_screen(),
Some(Fullscreen::Borderless(None)) | None => &main_screen,
Expand Down
2 changes: 1 addition & 1 deletion src/platform_impl/linux/wayland/window/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ impl Window {
window.set_title(attributes.title);

// Set fullscreen/maximized if so was requested.
match attributes.fullscreen {
match attributes.fullscreen.map(Into::into) {
Some(Fullscreen::Exclusive(_)) => {
warn!("`Fullscreen::Exclusive` is ignored on Wayland")
}
Expand Down
3 changes: 2 additions & 1 deletion src/platform_impl/linux/x11/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -484,7 +484,8 @@ impl UnownedWindow {
window.set_maximized_inner(window_attrs.maximized).queue();
}
if window_attrs.fullscreen.is_some() {
if let Some(flusher) = window.set_fullscreen_inner(window_attrs.fullscreen.clone())
if let Some(flusher) =
window.set_fullscreen_inner(window_attrs.fullscreen.clone().map(Into::into))
{
flusher.queue()
}
Expand Down
4 changes: 2 additions & 2 deletions src/platform_impl/macos/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ impl WinitWindow {
}

let this = autoreleasepool(|_| {
let screen = match &attrs.fullscreen {
let screen = match attrs.fullscreen.clone().map(Into::into) {
Some(Fullscreen::Borderless(Some(monitor)))
| Some(Fullscreen::Exclusive(VideoMode { monitor, .. })) => {
monitor.ns_screen().or_else(NSScreen::main)
Expand Down Expand Up @@ -459,7 +459,7 @@ impl WinitWindow {
let delegate = WinitWindowDelegate::new(&this, attrs.fullscreen.is_some());

// Set fullscreen mode after we setup everything
this.set_fullscreen(attrs.fullscreen);
this.set_fullscreen(attrs.fullscreen.map(Into::into));

// Setting the window as key has to happen *after* we set the fullscreen
// state, since otherwise we'll briefly see the window at normal size
Expand Down
2 changes: 1 addition & 1 deletion src/platform_impl/windows/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1011,7 +1011,7 @@ impl<'a, T: 'static> InitData<'a, T> {
win.set_enabled_buttons(attributes.enabled_buttons);

if attributes.fullscreen.is_some() {
win.set_fullscreen(attributes.fullscreen);
win.set_fullscreen(attributes.fullscreen.map(Into::into));
force_window_active(win.window.0);
} else {
let size = attributes
Expand Down
11 changes: 8 additions & 3 deletions src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,15 @@ impl fmt::Debug for WindowBuilder {

/// Attributes to use when creating a window.
#[derive(Debug, Clone)]
pub(crate) struct WindowAttributes {
pub struct WindowAttributes {
pub inner_size: Option<Size>,
pub min_inner_size: Option<Size>,
pub max_inner_size: Option<Size>,
pub position: Option<Position>,
pub resizable: bool,
pub enabled_buttons: WindowButtons,
pub title: String,
pub fullscreen: Option<platform_impl::Fullscreen>,
pub fullscreen: Option<Fullscreen>,
pub maximized: bool,
pub visible: bool,
pub transparent: bool,
Expand Down Expand Up @@ -176,6 +176,11 @@ impl WindowBuilder {
Default::default()
}

/// Get the current window attributes.
pub fn window_attributes(&self) -> &WindowAttributes {
&self.window
}

/// Requests the window to be of specific dimensions.
///
/// If this is not set, some platform-specific dimensions will be used.
Expand Down Expand Up @@ -279,7 +284,7 @@ impl WindowBuilder {
/// See [`Window::set_fullscreen`] for details.
#[inline]
pub fn with_fullscreen(mut self, fullscreen: Option<Fullscreen>) -> Self {
self.window.fullscreen = fullscreen.map(|f| f.into());
self.window.fullscreen = fullscreen;
self
}

Expand Down

0 comments on commit 422c6b1

Please sign in to comment.