use dpi::{PhysicalPosition, PhysicalSize};
use crate::{ActiveApplication, WindowId};
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum LifeCycle {
Started,
Finished,
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum MouseButton {
Left,
Middle,
Right,
Back,
Forward,
Other {
id: u16,
},
}
#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
pub enum MouseButtonState {
Pressed,
Released,
}
#[derive(Debug, PartialEq, PartialOrd)]
pub enum ScrollingDelta {
Line(f32, f32),
Pixel(f64, f64),
}
#[derive(Debug, PartialEq, PartialOrd)]
pub enum ScrollingPhase {
Started,
Stationary,
Changed,
Ended,
}
#[derive(Debug, PartialEq, PartialOrd)]
pub enum MouseEvent {
Input {
button: MouseButton,
state: MouseButtonState,
},
Scroll {
delta: ScrollingDelta,
phase: ScrollingPhase,
},
Moved {
position: PhysicalPosition<f64>,
},
Entered,
Exited,
}
#[derive(Debug, PartialEq, PartialOrd)]
pub enum WindowEvent {
Showed,
Resized(PhysicalSize<u32>),
Moved(PhysicalPosition<i32>),
Focused(bool),
ScaleFactorChanged(f64),
RedrawRequested,
CloseRequested,
Destroyed,
Mouse(MouseEvent),
}
#[derive(Debug, PartialEq, PartialOrd)]
pub enum Event {
Menu(String),
LifeCycle(LifeCycle),
Window(WindowEvent, WindowId),
}
pub trait EventHandler {
fn on_event(&mut self, app: &mut ActiveApplication, event: Event);
}
impl<F> EventHandler for F
where
F: FnMut(&mut ActiveApplication, Event),
{
fn on_event(&mut self, app: &mut ActiveApplication, event: Event) { self(app, event); }
}