use anathema_geometry::Pos;
#[derive(Debug, Copy, Clone, PartialEq)]
pub struct MouseEvent {
pub x: u16,
pub y: u16,
pub state: MouseState,
}
impl MouseEvent {
pub fn pos(&self) -> Pos {
(self.x, self.y).into()
}
pub fn left_down(&self) -> bool {
matches!(self.state, MouseState::Down(MouseButton::Left))
}
pub fn right_down(&self) -> bool {
matches!(self.state, MouseState::Down(MouseButton::Right))
}
pub fn middle_down(&self) -> bool {
matches!(self.state, MouseState::Down(MouseButton::Middle))
}
pub fn is_left_down(&self) -> bool {
matches!(
self.state,
MouseState::Down(MouseButton::Left) | MouseState::Drag(MouseButton::Left)
)
}
pub fn is_right_down(&self) -> bool {
matches!(
self.state,
MouseState::Down(MouseButton::Right) | MouseState::Drag(MouseButton::Right)
)
}
pub fn is_middle_down(&self) -> bool {
matches!(
self.state,
MouseState::Down(MouseButton::Middle) | MouseState::Drag(MouseButton::Middle)
)
}
pub fn left_up(&self) -> bool {
matches!(self.state, MouseState::Up(MouseButton::Left))
}
pub fn right_up(&self) -> bool {
matches!(self.state, MouseState::Up(MouseButton::Right))
}
pub fn middle_up(&self) -> bool {
matches!(self.state, MouseState::Up(MouseButton::Middle))
}
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum MouseState {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Move,
ScrollUp,
ScrollDown,
ScrollLeft,
ScrollRight,
}
#[derive(Debug, Copy, Clone, PartialEq)]
pub enum MouseButton {
Left,
Middle,
Right,
}