1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
//! This crate uses an extension trait to add a method `winit::window::Window` to allow for easy fullscreen toggling.
//!
//! ```rust
//! window.toggle_fullscreen()
//! ```
//!
//! Check the example for a minimal winit app that can toggle to fullscreen on pressing ENTER.
//!
//! # Future work
//! I plan to add an enum to allow a hint for exclusive or borderless.
#![warn(missing_docs)]
use winit::window::{Fullscreen, Window};
/// Extension trait for Window to add the `toggle_fullscreen` method.
pub trait WindowFullScreen {
/// This method toggles the fullscreen state of a window.
///
/// For platforms that support it well, it will use exclusive mode. For other platforms, it will use borderless.
///
/// # Panics
/// This function will not panic. If any error occurs internally, it will be a no-op.
///
fn toggle_fullscreen(&self);
}
impl WindowFullScreen for Window {
fn toggle_fullscreen(&self) {
if self.fullscreen().is_some() {
self.set_fullscreen(None);
} else {
self.current_monitor().map(|monitor| {
monitor.video_modes().next().map(|video_mode| {
if cfg!(any(target_os = "macos", unix)) {
self.set_fullscreen(Some(Fullscreen::Borderless(Some(monitor))));
} else {
self.set_fullscreen(Some(Fullscreen::Exclusive(video_mode)));
}
})
});
}
}
}