use super::WindowState;
use winit::event::KeyEvent;
impl WindowState {
pub(crate) fn handle_fullscreen_toggle(&mut self, event: &KeyEvent) -> bool {
use winit::event::ElementState;
use winit::keyboard::{Key, NamedKey};
if event.state != ElementState::Pressed {
return false;
}
if matches!(event.logical_key, Key::Named(NamedKey::F11))
&& let Some(window) = &self.window
{
self.is_fullscreen = !self.is_fullscreen;
if self.is_fullscreen {
window.set_fullscreen(Some(winit::window::Fullscreen::Borderless(None)));
log::info!("Entering fullscreen mode");
} else {
window.set_fullscreen(None);
log::info!("Exiting fullscreen mode");
}
return true;
}
false
}
pub(crate) fn handle_settings_toggle(&mut self, event: &KeyEvent) -> bool {
use winit::event::ElementState;
use winit::keyboard::{Key, NamedKey};
if event.state != ElementState::Pressed {
return false;
}
let is_f12 = matches!(event.logical_key, Key::Named(NamedKey::F12));
let is_cmd_comma = matches!(event.logical_key, Key::Character(ref c) if c == ",")
&& self.input_handler.modifiers.state().super_key();
if is_f12 || is_cmd_comma {
self.overlay_state.open_settings_window_requested = true;
log::info!("Settings window requested");
self.request_redraw();
return true;
}
false
}
pub(crate) fn handle_help_toggle(&mut self, event: &KeyEvent) -> bool {
use winit::event::ElementState;
use winit::keyboard::{Key, NamedKey};
if event.state != ElementState::Pressed {
return false;
}
if matches!(event.logical_key, Key::Named(NamedKey::F1)) {
self.overlay_ui.help_ui.toggle();
log::info!(
"Help UI toggled: {}",
if self.overlay_ui.help_ui.visible {
"visible"
} else {
"hidden"
}
);
self.request_redraw();
return true;
}
if matches!(event.logical_key, Key::Named(NamedKey::Escape))
&& self.overlay_ui.help_ui.visible
{
self.overlay_ui.help_ui.visible = false;
log::info!("Help UI closed via Escape");
self.request_redraw();
return true;
}
if matches!(event.logical_key, Key::Named(NamedKey::Escape))
&& self.overlay_ui.shader_install_ui.visible
&& !self.overlay_ui.shader_install_ui.installing
{
self.overlay_ui.shader_install_ui.visible = false;
log::info!("Shader install UI closed via Escape");
self.request_redraw();
return true;
}
if matches!(event.logical_key, Key::Named(NamedKey::Escape))
&& self.overlay_ui.integrations_ui.visible
&& !self.overlay_ui.integrations_ui.installing
{
self.overlay_ui.integrations_ui.visible = false;
log::info!("Integrations dialog closed via Escape");
self.request_redraw();
return true;
}
false
}
pub(crate) fn handle_shader_editor_toggle(&mut self, _event: &KeyEvent) -> bool {
false
}
pub(crate) fn handle_fps_overlay_toggle(&mut self, event: &KeyEvent) -> bool {
use winit::event::ElementState;
use winit::keyboard::{Key, NamedKey};
if event.state != ElementState::Pressed {
return false;
}
if matches!(event.logical_key, Key::Named(NamedKey::F3)) {
self.debug.show_fps_overlay = !self.debug.show_fps_overlay;
log::info!(
"FPS overlay toggled: {}",
if self.debug.show_fps_overlay {
"visible"
} else {
"hidden"
}
);
self.request_redraw();
return true;
}
false
}
pub(crate) fn handle_profile_drawer_toggle(&mut self, event: &KeyEvent) -> bool {
use winit::event::ElementState;
use winit::keyboard::Key;
if event.state != ElementState::Pressed {
return false;
}
let is_p = matches!(event.logical_key, Key::Character(ref c) if c.to_lowercase() == "p");
let modifiers = self.input_handler.modifiers.state();
let is_cmd_shift = crate::platform::primary_modifier_with_shift(&modifiers);
if is_p && is_cmd_shift {
self.toggle_profile_drawer();
log::info!(
"Profile drawer toggled: {}",
if self.overlay_ui.profile_drawer_ui.expanded {
"expanded"
} else {
"collapsed"
}
);
return true;
}
false
}
}