#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum EventType {
MouseMove,
MouseDown,
MouseUp,
MouseEnter,
MouseLeave,
Click,
MouseWheel,
DragStart,
DragMove,
DragEnd,
KeyDown,
KeyUp,
FocusIn,
FocusOut,
ImePreedit,
ImeCommit,
ImeDisabled,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Event {
MouseMove {
x: f32,
y: f32,
},
MouseDown {
button: MouseButton,
x: f32,
y: f32,
modifiers: Modifiers,
click_count: u8,
},
MouseUp {
button: MouseButton,
x: f32,
y: f32,
},
MouseEnter,
MouseLeave,
Click {
button: MouseButton,
},
MouseWheel {
delta_x: f32,
delta_y: f32,
x: f32,
y: f32,
},
DragStart {
x: f32,
y: f32,
offset_x: f32,
offset_y: f32,
button: MouseButton,
modifiers: Modifiers,
},
DragMove {
x: f32,
y: f32,
dx: f32,
dy: f32,
offset_x: f32,
offset_y: f32,
button: MouseButton,
modifiers: Modifiers,
},
DragEnd {
x: f32,
y: f32,
dx: f32,
dy: f32,
offset_x: f32,
offset_y: f32,
button: MouseButton,
modifiers: Modifiers,
},
KeyDown {
key: Key,
modifiers: Modifiers,
},
KeyUp {
key: Key,
modifiers: Modifiers,
},
FocusIn,
FocusOut,
ImePreedit {
text: String,
cursor_start: Option<usize>,
cursor_end: Option<usize>,
},
ImeCommit {
text: String,
},
ImeDisabled,
}
impl Event {
pub fn to_type(&self) -> EventType {
match self {
Event::MouseMove { .. } => EventType::MouseMove,
Event::MouseDown { .. } => EventType::MouseDown,
Event::MouseUp { .. } => EventType::MouseUp,
Event::MouseEnter => EventType::MouseEnter,
Event::MouseLeave => EventType::MouseLeave,
Event::Click { .. } => EventType::Click,
Event::MouseWheel { .. } => EventType::MouseWheel,
Event::DragStart { .. } => EventType::DragStart,
Event::DragMove { .. } => EventType::DragMove,
Event::DragEnd { .. } => EventType::DragEnd,
Event::KeyDown { .. } => EventType::KeyDown,
Event::KeyUp { .. } => EventType::KeyUp,
Event::FocusIn => EventType::FocusIn,
Event::FocusOut => EventType::FocusOut,
Event::ImePreedit { .. } => EventType::ImePreedit,
Event::ImeCommit { .. } => EventType::ImeCommit,
Event::ImeDisabled => EventType::ImeDisabled,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MouseButton {
Left,
Right,
Middle,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Key {
Character(char),
Enter,
Escape,
Backspace,
Delete,
Tab,
Space,
Home,
End,
PageUp,
PageDown,
ArrowUp,
ArrowDown,
ArrowLeft,
ArrowRight,
Shift,
Ctrl,
Alt,
Meta,
Unknown,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
pub struct Modifiers {
pub shift: bool,
pub ctrl: bool,
pub alt: bool,
pub meta: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum EventResult {
Continue,
Stop,
}
impl EventResult {
pub fn is_stopped(&self) -> bool {
matches!(self, EventResult::Stop)
}
}