use super::key::Modifiers;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct MouseEvent {
pub kind: MouseEventKind,
pub column: u16,
pub row: u16,
pub modifiers: Modifiers,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MouseEventKind {
Down(MouseButton),
Up(MouseButton),
Drag(MouseButton),
Moved,
ScrollUp,
ScrollDown,
ScrollLeft,
ScrollRight,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum MouseButton {
Left,
Right,
Middle,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_mouse_event_construction() {
let event = MouseEvent {
kind: MouseEventKind::Down(MouseButton::Left),
column: 10,
row: 5,
modifiers: Modifiers::NONE,
};
assert_eq!(event.column, 10);
assert_eq!(event.row, 5);
assert!(event.modifiers.is_none());
}
#[test]
fn test_mouse_event_kind_equality() {
assert_eq!(
MouseEventKind::Down(MouseButton::Left),
MouseEventKind::Down(MouseButton::Left),
);
assert_ne!(
MouseEventKind::Down(MouseButton::Left),
MouseEventKind::Down(MouseButton::Right),
);
assert_ne!(
MouseEventKind::Down(MouseButton::Left),
MouseEventKind::Up(MouseButton::Left),
);
}
#[test]
fn test_mouse_button_equality() {
assert_eq!(MouseButton::Left, MouseButton::Left);
assert_ne!(MouseButton::Left, MouseButton::Right);
}
#[test]
fn test_mouse_with_modifiers() {
let event = MouseEvent {
kind: MouseEventKind::Down(MouseButton::Left),
column: 0,
row: 0,
modifiers: Modifiers::CONTROL | Modifiers::SHIFT,
};
assert!(event.modifiers.ctrl());
assert!(event.modifiers.shift());
}
}