#[derive(Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub(crate) struct KeyModifiers(pub(crate) KeyModifier);
impl KeyModifiers {
pub(crate) fn is_shift(&self) -> bool {
self.0 & KeyModifier::Shift == KeyModifier::Shift
}
pub(crate) fn is_ctrl(&self) -> bool {
self.0 & KeyModifier::Control == KeyModifier::Control
}
pub(crate) fn is_alt(&self) -> bool {
self.0 & KeyModifier::Alt == KeyModifier::Alt
}
}
#[repr(u8)]
#[derive(Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub(crate) enum KeyModifier {
Shift = 0b0001,
Control = 0b0010,
Alt = 0b0100,
None = 0b0000,
}
impl std::ops::BitAnd for KeyModifier {
type Output = KeyModifier;
fn bitand(self, rhs: Self) -> Self::Output {
unsafe { std::mem::transmute(self as u8 & rhs as u8) }
}
}
impl std::ops::BitOr for KeyModifier {
type Output = KeyModifier;
fn bitor(self, rhs: Self) -> Self::Output {
unsafe { std::mem::transmute(self as u8 | rhs as u8) }
}
}