use serde::{Deserialize, Serialize};
use crate::position::Position;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub struct MouseEvent {
pub event_type: MouseEventType,
pub left: bool,
pub right: bool,
pub middle: bool,
pub wheel_up: bool,
pub wheel_down: bool,
pub shift: bool,
pub alt: bool,
pub ctrl: bool,
pub position: Position,
}
#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq, Deserialize, Serialize)]
pub enum MouseEventType {
Press,
Release,
Motion,
}
impl MouseEvent {
pub fn new() -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: false,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position: Position::new(0, 0),
};
event
}
pub fn new_buttonless_motion(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: false,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_left_press_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_right_press_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: true,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_middle_press_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: false,
middle: true,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_middle_release_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Release,
left: false,
right: false,
middle: true,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_left_release_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Release,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_left_motion_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_right_release_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Release,
left: false,
right: true,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_right_motion_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: false,
right: true,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_middle_motion_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: false,
right: false,
middle: true,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_left_press_with_alt_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: true,
ctrl: false,
position,
};
event
}
pub fn new_right_press_with_alt_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: true,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: true,
ctrl: false,
position,
};
event
}
pub fn new_left_press_with_ctrl_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: true,
position,
};
event
}
pub fn new_left_motion_with_ctrl_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: true,
position,
};
event
}
pub fn new_left_release_with_ctrl_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Release,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: false,
ctrl: true,
position,
};
event
}
pub fn new_left_motion_with_alt_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Motion,
left: true,
right: false,
middle: false,
wheel_up: false,
wheel_down: false,
shift: false,
alt: true,
ctrl: false,
position,
};
event
}
pub fn new_scroll_up_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: false,
middle: false,
wheel_up: true,
wheel_down: false,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_scroll_down_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: false,
middle: false,
wheel_up: false,
wheel_down: true,
shift: false,
alt: false,
ctrl: false,
position,
};
event
}
pub fn new_ctrl_scroll_up_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: false,
middle: false,
wheel_up: true,
wheel_down: false,
shift: false,
alt: false,
ctrl: true,
position,
};
event
}
pub fn new_ctrl_scroll_down_event(position: Position) -> Self {
let event = MouseEvent {
event_type: MouseEventType::Press,
left: false,
right: false,
middle: false,
wheel_up: false,
wheel_down: true,
shift: false,
alt: false,
ctrl: true,
position,
};
event
}
}
impl Default for MouseEvent {
fn default() -> Self {
MouseEvent::new()
}
}