use crate::{Event, KeyModifiers};
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct MouseEvent {
pub kind: MouseEventKind,
pub column: u16,
pub row: u16,
pub modifiers: KeyModifiers,
}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum ScrollDirection {
Up,
Down,
Left,
Right,
}
impl ScrollDirection {
pub fn delta(&self) -> ScrollDelta {
match self {
Self::Up => ScrollDelta { x: 0, y: 1 },
Self::Down => ScrollDelta { x: 0, y: -1 },
Self::Left => ScrollDelta { x: 1, y: 0 },
Self::Right => ScrollDelta { x: -1, y: 0 },
}
}
}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct ScrollDelta {
pub x: i32,
pub y: i32,
}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MouseEventKind {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Moved,
Scroll(ScrollDirection),
}
#[derive(Debug, PartialOrd, PartialEq, Eq, Clone, Copy, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum MouseButton {
Left,
Right,
Middle,
Unknown,
}
impl From<MouseEvent> for Event {
fn from(value: MouseEvent) -> Self {
Self::Mouse(value)
}
}