From 0e24d89e2657ac559e1d6c471d9be6b5e6c9b2e1 Mon Sep 17 00:00:00 2001 From: Exidex <16986685+exidex@users.noreply.github.com> Date: Sun, 19 Jan 2025 17:45:40 +0100 Subject: [PATCH] Add ability to hide close and minimize title bar buttons --- core/src/window/settings.rs | 8 ++++++++ winit/src/conversion.rs | 21 +++++++++++++++------ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/window/settings.rs b/core/src/window/settings.rs index 9432eaaa..e802ab78 100644 --- a/core/src/window/settings.rs +++ b/core/src/window/settings.rs @@ -56,6 +56,12 @@ pub struct Settings { /// Whether the window should be resizable or not. pub resizable: bool, + /// Whether the title bar has Close button or not + pub closeable: bool, + + /// Whether the title bar has Minimize button or not + pub minimizable: bool, + /// Whether the window should have a border, a title bar, etc. or not. pub decorations: bool, @@ -93,6 +99,8 @@ impl Default for Settings { max_size: None, visible: true, resizable: true, + minimizable: true, + closeable: true, decorations: true, transparent: false, level: Level::default(), diff --git a/winit/src/conversion.rs b/winit/src/conversion.rs index 462be65b..40f78204 100644 --- a/winit/src/conversion.rs +++ b/winit/src/conversion.rs @@ -17,6 +17,20 @@ pub fn window_attributes( ) -> winit::window::WindowAttributes { let mut attributes = winit::window::WindowAttributes::default(); + let mut buttons = winit::window::WindowButtons::empty(); + + if settings.resizable { + buttons |= winit::window::WindowButtons::MAXIMIZE; + } + + if settings.closeable { + buttons |= winit::window::WindowButtons::CLOSE; + } + + if settings.minimizable { + buttons |= winit::window::WindowButtons::MINIMIZE; + } + attributes = attributes .with_title(title) .with_inner_size(winit::dpi::LogicalSize { @@ -30,12 +44,7 @@ pub fn window_attributes( .then_some(winit::window::Fullscreen::Borderless(None)), ) .with_resizable(settings.resizable) - .with_enabled_buttons(if settings.resizable { - winit::window::WindowButtons::all() - } else { - winit::window::WindowButtons::CLOSE - | winit::window::WindowButtons::MINIMIZE - }) + .with_enabled_buttons(buttons) .with_decorations(settings.decorations) .with_transparent(settings.transparent) .with_window_icon(settings.icon.and_then(icon))