From efe1d21b0e1ee79ef7547c0d8524a39be16ccc7d Mon Sep 17 00:00:00 2001 From: Ben Bridle Date: Wed, 31 Jul 2024 16:05:57 +1200 Subject: Implement fullscreen Program windows can choose to show as fullscreen or windowed. --- src/window.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'src/window.rs') diff --git a/src/window.rs b/src/window.rs index 1949387..882d0b8 100644 --- a/src/window.rs +++ b/src/window.rs @@ -3,7 +3,7 @@ use crate::*; use buffer::HasDimensions; use winit::dpi::{Size, PhysicalSize}; use winit::event_loop::EventLoopWindowTarget; -use winit::window::WindowId; +use winit::window::{Fullscreen, WindowId}; pub struct Window { pub controller: Box, @@ -86,6 +86,19 @@ impl Window { /// alter any buffer sizes or struct fields. When the window size eventually /// changes, the state updates are handled by `resize_buffer_and_surface`. pub fn update_window_size(&mut self) { + let fullscreen = self.controller.fullscreen(); + if fullscreen != self.window.fullscreen().is_some() { + if fullscreen { + if let Some(monitor) = self.window.current_monitor() { + if let Some(mode) = monitor.video_modes().nth(0) { + self.window.set_fullscreen(Some(Fullscreen::Exclusive(mode))); + } + }; + } else { + self.window.set_fullscreen(None); + } + } + let pixel_scale = self.controller.pixel_scale().get(); if let Some(dimensions) = self.controller.exact_size() { // Without this early return, the constant re-setting of the window -- cgit v1.2.3-70-g09d2