Add ability to hide close and minimize title bar buttons

This commit is contained in:
Exidex 2025-01-19 17:45:40 +01:00
parent dcd4abd5af
commit 0e24d89e26
No known key found for this signature in database
GPG key ID: 46D8D21671EB48FA
2 changed files with 23 additions and 6 deletions

View file

@ -56,6 +56,12 @@ pub struct Settings {
/// Whether the window should be resizable or not. /// Whether the window should be resizable or not.
pub resizable: bool, 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. /// Whether the window should have a border, a title bar, etc. or not.
pub decorations: bool, pub decorations: bool,
@ -93,6 +99,8 @@ impl Default for Settings {
max_size: None, max_size: None,
visible: true, visible: true,
resizable: true, resizable: true,
minimizable: true,
closeable: true,
decorations: true, decorations: true,
transparent: false, transparent: false,
level: Level::default(), level: Level::default(),

View file

@ -17,6 +17,20 @@ pub fn window_attributes(
) -> winit::window::WindowAttributes { ) -> winit::window::WindowAttributes {
let mut attributes = winit::window::WindowAttributes::default(); 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 attributes = attributes
.with_title(title) .with_title(title)
.with_inner_size(winit::dpi::LogicalSize { .with_inner_size(winit::dpi::LogicalSize {
@ -30,12 +44,7 @@ pub fn window_attributes(
.then_some(winit::window::Fullscreen::Borderless(None)), .then_some(winit::window::Fullscreen::Borderless(None)),
) )
.with_resizable(settings.resizable) .with_resizable(settings.resizable)
.with_enabled_buttons(if settings.resizable { .with_enabled_buttons(buttons)
winit::window::WindowButtons::all()
} else {
winit::window::WindowButtons::CLOSE
| winit::window::WindowButtons::MINIMIZE
})
.with_decorations(settings.decorations) .with_decorations(settings.decorations)
.with_transparent(settings.transparent) .with_transparent(settings.transparent)
.with_window_icon(settings.icon.and_then(icon)) .with_window_icon(settings.icon.and_then(icon))