jay_config/keyboard/
mods.rs

1//! Keyboard modifiers
2
3use {
4    crate::{ModifiedKeySym, keyboard::syms::KeySym},
5    serde::{Deserialize, Serialize},
6    std::ops::BitOr,
7};
8
9bitflags! {
10    /// Zero or more keyboard modifiers
11    #[derive(Serialize, Deserialize, Copy, Clone, Eq, PartialEq, Default, Hash)]
12    pub struct Modifiers(pub u32) {
13        /// The Shift modifier
14        pub const SHIFT = 1 << 0,
15        /// The CapsLock modifier.
16        pub const LOCK = 1 << 1,
17        /// The Ctrl modifier.
18        pub const CTRL = 1 << 2,
19        /// The Mod1 modifier, i.e., Alt.
20        pub const MOD1 = 1 << 3,
21        /// The Mod2 modifier, i.e., NumLock.
22        pub const MOD2 = 1 << 4,
23        /// The Mod3 modifier.
24        pub const MOD3 = 1 << 5,
25        /// The Mod4 modifier, i.e., Logo.
26        pub const MOD4 = 1 << 6,
27        /// The Mod5 modifier.
28        pub const MOD5 = 1 << 7,
29
30        /// Synthetic modifier matching key release events.
31        ///
32        /// This can be used to execute a callback on key release.
33        pub const RELEASE = 1 << 31,
34    }
35}
36
37impl Modifiers {
38    /// No modifiers.
39    pub const NONE: Self = Modifiers(0);
40}
41
42/// Alias for `LOCK`.
43pub const CAPS: Modifiers = LOCK;
44/// Alias for `MOD1`.
45pub const ALT: Modifiers = MOD1;
46/// Alias for `MOD2`.
47pub const NUM: Modifiers = MOD2;
48/// Alias for `MOD4`.
49pub const LOGO: Modifiers = MOD4;
50
51impl BitOr<KeySym> for Modifiers {
52    type Output = ModifiedKeySym;
53
54    fn bitor(self, rhs: KeySym) -> Self::Output {
55        ModifiedKeySym {
56            mods: self,
57            sym: rhs,
58        }
59    }
60}