76 lines
1.8 KiB
Rust
76 lines
1.8 KiB
Rust
//! Keyboard modifiers
|
|
|
|
use {
|
|
crate::{keyboard::syms::KeySym, ModifiedKeySym},
|
|
bincode::{Decode, Encode},
|
|
std::ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign},
|
|
};
|
|
|
|
/// Zero or more keyboard modifiers
|
|
#[derive(Encode, Decode, Copy, Clone, Eq, PartialEq, Default, Hash, Debug)]
|
|
pub struct Modifiers(pub u32);
|
|
|
|
/// The Shift modifier
|
|
pub const SHIFT: Modifiers = Modifiers(1 << 0);
|
|
/// The CapsLock modifier.
|
|
pub const LOCK: Modifiers = Modifiers(1 << 1);
|
|
/// The Ctrl modifier.
|
|
pub const CTRL: Modifiers = Modifiers(1 << 2);
|
|
/// The Mod1 modifier, i.e., Alt.
|
|
pub const MOD1: Modifiers = Modifiers(1 << 3);
|
|
/// The Mod2 modifier, i.e., NumLock.
|
|
pub const MOD2: Modifiers = Modifiers(1 << 4);
|
|
/// The Mod3 modifier.
|
|
pub const MOD3: Modifiers = Modifiers(1 << 5);
|
|
/// The Mod4 modifier, i.e., Logo.
|
|
pub const MOD4: Modifiers = Modifiers(1 << 6);
|
|
/// The Mod5 modifier.
|
|
pub const MOD5: Modifiers = Modifiers(1 << 7);
|
|
|
|
/// Alias for `LOCK`.
|
|
pub const CAPS: Modifiers = LOCK;
|
|
/// Alias for `MOD1`.
|
|
pub const ALT: Modifiers = MOD1;
|
|
/// Alias for `MOD2`.
|
|
pub const NUM: Modifiers = MOD2;
|
|
/// Alias for `MOD4`.
|
|
pub const LOGO: Modifiers = MOD4;
|
|
|
|
impl BitOr for Modifiers {
|
|
type Output = Self;
|
|
|
|
fn bitor(self, rhs: Self) -> Self::Output {
|
|
Self(self.0 | rhs.0)
|
|
}
|
|
}
|
|
|
|
impl BitOr<KeySym> for Modifiers {
|
|
type Output = ModifiedKeySym;
|
|
|
|
fn bitor(self, rhs: KeySym) -> Self::Output {
|
|
ModifiedKeySym {
|
|
mods: self,
|
|
sym: rhs,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl BitAnd for Modifiers {
|
|
type Output = Self;
|
|
|
|
fn bitand(self, rhs: Self) -> Self::Output {
|
|
Self(self.0 & rhs.0)
|
|
}
|
|
}
|
|
|
|
impl BitOrAssign for Modifiers {
|
|
fn bitor_assign(&mut self, rhs: Self) {
|
|
self.0 |= rhs.0
|
|
}
|
|
}
|
|
|
|
impl BitAndAssign for Modifiers {
|
|
fn bitand_assign(&mut self, rhs: Self) {
|
|
self.0 &= rhs.0
|
|
}
|
|
}
|