use std::cell::RefCell;
use std::rc::Rc;
use crate::common::Point;
use crate::control::ControlObject;
use crate::events::*;
pub enum Gesture {
TapDown { position: Point },
TapUp { position: Point },
TapMove { position: Point },
}
pub struct GestureDetector {
mouse_pos: Point,
}
impl GestureDetector {
pub fn new() -> Self {
GestureDetector {
mouse_pos: Point::new(0f32, 0f32),
}
}
pub fn handle_event(
&mut self,
_root_view: &Rc<RefCell<dyn ControlObject>>,
event: &InputEvent,
) -> Option<Gesture> {
match event {
InputEvent::CursorMoved { position, .. } => {
self.mouse_pos = *position;
return Some(Gesture::TapMove {
position: self.mouse_pos,
});
}
InputEvent::MouseInput {
button: MouseButton::Left,
state: ElementState::Pressed,
..
} => {
return Some(Gesture::TapDown {
position: self.mouse_pos,
});
}
InputEvent::MouseInput {
button: MouseButton::Left,
state: ElementState::Released,
..
} => {
return Some(Gesture::TapUp {
position: self.mouse_pos,
});
}
_ => None,
}
}
}