jay_config/keyboard/
mods.rs1use {
4 crate::{keyboard::syms::KeySym, ModifiedKeySym},
5 serde::{Deserialize, Serialize},
6 std::ops::{BitAnd, BitAndAssign, BitOr, BitOrAssign},
7};
8
9#[derive(Serialize, Deserialize, Copy, Clone, Eq, PartialEq, Default, Hash, Debug)]
11pub struct Modifiers(pub u32);
12
13impl Modifiers {
14 pub const NONE: Self = Modifiers(0);
16}
17
18pub const SHIFT: Modifiers = Modifiers(1 << 0);
20pub const LOCK: Modifiers = Modifiers(1 << 1);
22pub const CTRL: Modifiers = Modifiers(1 << 2);
24pub const MOD1: Modifiers = Modifiers(1 << 3);
26pub const MOD2: Modifiers = Modifiers(1 << 4);
28pub const MOD3: Modifiers = Modifiers(1 << 5);
30pub const MOD4: Modifiers = Modifiers(1 << 6);
32pub const MOD5: Modifiers = Modifiers(1 << 7);
34
35pub const CAPS: Modifiers = LOCK;
37pub const ALT: Modifiers = MOD1;
39pub const NUM: Modifiers = MOD2;
41pub const LOGO: Modifiers = MOD4;
43
44pub const RELEASE: Modifiers = Modifiers(1 << 31);
48
49impl BitOr for Modifiers {
50 type Output = Self;
51
52 fn bitor(self, rhs: Self) -> Self::Output {
53 Self(self.0 | rhs.0)
54 }
55}
56
57impl BitOr<KeySym> for Modifiers {
58 type Output = ModifiedKeySym;
59
60 fn bitor(self, rhs: KeySym) -> Self::Output {
61 ModifiedKeySym {
62 mods: self,
63 sym: rhs,
64 }
65 }
66}
67
68impl BitAnd for Modifiers {
69 type Output = Self;
70
71 fn bitand(self, rhs: Self) -> Self::Output {
72 Self(self.0 & rhs.0)
73 }
74}
75
76impl BitOrAssign for Modifiers {
77 fn bitor_assign(&mut self, rhs: Self) {
78 self.0 |= rhs.0
79 }
80}
81
82impl BitAndAssign for Modifiers {
83 fn bitand_assign(&mut self, rhs: Self) {
84 self.0 &= rhs.0
85 }
86}