musicdb/musicdb-client/src/gui_wrappers.rs

63 lines
2.1 KiB
Rust
Raw Normal View History

2023-11-12 20:52:24 +01:00
use speedy2d::window::VirtualKeyCode;
2023-08-13 23:58:53 +02:00
2023-11-12 20:52:24 +01:00
/// requires `keyboard_events_watch = true`
pub struct Hotkey {
/// 4 * (ignore, pressed): 10 (or 11, but 0b11111111 -> never) -> doesn't matter, 01 -> must be pressed, 00 -> must not be pressed
2023-08-13 23:58:53 +02:00
/// logo alt shift ctrl
pub modifiers: u8,
pub key: VirtualKeyCode,
}
2023-11-12 20:52:24 +01:00
#[allow(unused)]
impl Hotkey {
pub fn triggered(
&self,
2023-08-13 23:58:53 +02:00
modifiers: speedy2d::window::ModifiersState,
down: bool,
key: Option<speedy2d::window::VirtualKeyCode>,
2023-11-12 20:52:24 +01:00
) -> bool {
if self.modifiers == u8::MAX {
return false;
}
down == false
2023-08-13 23:58:53 +02:00
&& key.is_some_and(|v| v == self.key)
&& (self.modifiers & 0b10 == 1 || (self.modifiers & 0b01 == 1) == modifiers.ctrl())
2023-11-12 20:52:24 +01:00
&& (self.modifiers & 0b1000 == 1 || (self.modifiers & 0b0100 == 1) == modifiers.shift())
2023-08-13 23:58:53 +02:00
&& (self.modifiers & 0b100000 == 1
|| (self.modifiers & 0b010000 == 1) == modifiers.alt())
&& (self.modifiers & 0b10000000 == 1
2023-11-12 20:52:24 +01:00
|| (self.modifiers & 0b01000000 == 1) == modifiers.logo())
2023-08-13 23:58:53 +02:00
}
2023-11-12 20:52:24 +01:00
/// unlike noshift, this ignores the shift modifier
pub fn new_key(key: VirtualKeyCode) -> Self {
Self::new(0b1000, key)
}
/// requires the key to be pressed without any modifiers
pub fn new_noshift(key: VirtualKeyCode) -> Self {
Self::new(0, key)
}
pub fn new_shift(key: VirtualKeyCode) -> Self {
Self::new(0b0100, key)
}
pub fn new_ctrl(key: VirtualKeyCode) -> Self {
Self::new(0b01, key)
}
pub fn new_ctrl_shift(key: VirtualKeyCode) -> Self {
Self::new(0b0101, key)
}
pub fn new_alt(key: VirtualKeyCode) -> Self {
Self::new(0b010000, key)
}
pub fn new_alt_shift(key: VirtualKeyCode) -> Self {
Self::new(0b010100, key)
2023-08-13 23:58:53 +02:00
}
2023-11-12 20:52:24 +01:00
pub fn new_ctrl_alt(key: VirtualKeyCode) -> Self {
Self::new(0b010001, key)
2023-08-13 23:58:53 +02:00
}
2023-11-12 20:52:24 +01:00
pub fn new_ctrl_alt_shift(key: VirtualKeyCode) -> Self {
Self::new(0b010101, key)
2023-08-13 23:58:53 +02:00
}
2023-11-12 20:52:24 +01:00
pub fn new(modifiers: u8, key: VirtualKeyCode) -> Self {
Hotkey { modifiers, key }
2023-08-13 23:58:53 +02:00
}
}