use std::fmt;
use super::Button;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MouseEvent {
Press(Button),
Release(Button),
Scroll(ScrollDirection, i32),
Move(i32, i32),
RelativeMove(i32, i32),
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ScrollDirection {
VerticalUp,
VerticalDown,
HorizontalLeft,
HorizontalRight,
}
impl fmt::Display for ScrollDirection {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ScrollDirection::VerticalUp => write!(f, "VerticalUp"),
ScrollDirection::VerticalDown => write!(f, "VerticalDown"),
ScrollDirection::HorizontalLeft => write!(f, "HorizontalLeft"),
ScrollDirection::HorizontalRight => write!(f, "HorizontalRight"),
}
}
}
impl fmt::Display for MouseEvent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
MouseEvent::Press(button) => write!(f, "Press({})", button),
MouseEvent::Release(button) => write!(f, "Release({})", button),
MouseEvent::Scroll(dir, amount) => write!(f, "Scroll({}, {})", dir, amount),
MouseEvent::Move(x, y) => write!(f, "Move({}, {})", x, y),
MouseEvent::RelativeMove(dx, dy) => write!(f, "RelativeMove({}, {})", dx, dy),
}
}
}