use serde::{Deserialize, Serialize};
use crate::position::Position;
#[derive(Debug, Copy, Clone, PartialEq, Eq, Deserialize, Serialize)]
pub enum MouseEvent {
Press(MouseButton, Position),
Release(Position),
Hold(Position),
}
impl From<termwiz::input::MouseEvent> for MouseEvent {
fn from(event: termwiz::input::MouseEvent) -> Self {
#[allow(clippy::if_same_then_else)]
if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::LEFT)
{
MouseEvent::Press(
MouseButton::Left,
Position::new(event.y.saturating_sub(1) as i32, event.x.saturating_sub(1)),
)
} else if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::RIGHT)
{
MouseEvent::Press(
MouseButton::Right,
Position::new(event.y.saturating_sub(1) as i32, event.x.saturating_sub(1)),
)
} else if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::MIDDLE)
{
MouseEvent::Press(
MouseButton::Middle,
Position::new(event.y.saturating_sub(1) as i32, event.x.saturating_sub(1)),
)
} else if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::VERT_WHEEL)
{
if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::WHEEL_POSITIVE)
{
MouseEvent::Press(
MouseButton::WheelUp,
Position::new(event.y.saturating_sub(1) as i32, event.x.saturating_sub(1)),
)
} else {
MouseEvent::Press(
MouseButton::WheelDown,
Position::new(event.y.saturating_sub(1) as i32, event.x.saturating_sub(1)),
)
}
} else if event
.mouse_buttons
.contains(termwiz::input::MouseButtons::NONE)
{
MouseEvent::Release(Position::new(
event.y.saturating_sub(1) as i32,
event.x.saturating_sub(1),
))
} else {
MouseEvent::Release(Position::new(
event.y.saturating_sub(1) as i32,
event.x.saturating_sub(1),
))
}
}
}
#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, Deserialize, Serialize)]
pub enum MouseButton {
Left,
Right,
Middle,
WheelUp,
WheelDown,
}