use crate::ipc::Event;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DisplayResized {
pub width: u16,
pub height: u16,
}
impl Event for DisplayResized {}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct FrameRendered {
pub frame_id: u64,
}
impl Event for FrameRendered {}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct KeyInput {
pub key: KeyCode,
pub modifiers: Modifiers,
}
impl Event for KeyInput {}
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub enum KeyCode {
Char(char),
F(u8),
Backspace,
Enter,
Left,
Right,
Up,
Down,
Home,
End,
PageUp,
PageDown,
Tab,
BackTab,
Delete,
Insert,
Esc,
Null,
}
impl KeyCode {
#[must_use]
pub const fn is_char(&self) -> bool {
matches!(self, Self::Char(_))
}
#[must_use]
pub const fn as_char(&self) -> Option<char> {
match self {
Self::Char(c) => Some(*c),
_ => None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
#[allow(clippy::struct_excessive_bools)] pub struct Modifiers {
pub ctrl: bool,
pub alt: bool,
pub shift: bool,
pub super_key: bool,
}
impl Modifiers {
pub const NONE: Self = Self {
ctrl: false,
alt: false,
shift: false,
super_key: false,
};
pub const CTRL: Self = Self {
ctrl: true,
alt: false,
shift: false,
super_key: false,
};
pub const ALT: Self = Self {
ctrl: false,
alt: true,
shift: false,
super_key: false,
};
pub const SHIFT: Self = Self {
ctrl: false,
alt: false,
shift: true,
super_key: false,
};
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub const fn is_empty(&self) -> bool {
!self.ctrl && !self.alt && !self.shift && !self.super_key
}
#[must_use]
#[cfg_attr(coverage_nightly, coverage(off))]
pub const fn any(&self) -> bool {
self.ctrl || self.alt || self.shift || self.super_key
}
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MouseInput {
pub event: MouseEvent,
pub column: u16,
pub row: u16,
pub modifiers: Modifiers,
}
impl Event for MouseInput {}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MouseEvent {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Moved,
ScrollUp,
ScrollDown,
ScrollLeft,
ScrollRight,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MouseButton {
Left,
Right,
Middle,
}