Generate mouse move events as well as scroll events while scrolling

This commit is contained in:
Alan Jeffrey 2018-11-30 11:35:28 -06:00
parent 6a1e948ec7
commit ce4c53bb7f

View file

@ -200,10 +200,10 @@ pub unsafe extern "C" fn move_servo(servo: *mut ServoInstance, x: f32, y: f32) {
// Servo's cursor was moved // Servo's cursor was moved
if let Some(servo) = servo.as_mut() { if let Some(servo) = servo.as_mut() {
let point = DevicePoint::new(x, y); let point = DevicePoint::new(x, y);
let (new_state, window_event) = match servo.scroll_state { let (new_state, window_events) = match servo.scroll_state {
ScrollState::TriggerUp => ( ScrollState::TriggerUp => (
ScrollState::TriggerUp, ScrollState::TriggerUp,
WindowEvent::MouseWindowMoveEventClass(point), vec![WindowEvent::MouseWindowMoveEventClass(point)],
), ),
ScrollState::TriggerDown(start) ScrollState::TriggerDown(start)
if (start - point).square_length() < DRAG_CUTOFF_SQUARED => if (start - point).square_length() < DRAG_CUTOFF_SQUARED =>
@ -212,23 +212,29 @@ pub unsafe extern "C" fn move_servo(servo: *mut ServoInstance, x: f32, y: f32) {
}, },
ScrollState::TriggerDown(start) => ( ScrollState::TriggerDown(start) => (
ScrollState::TriggerDragging(start, point), ScrollState::TriggerDragging(start, point),
vec![
WindowEvent::MouseWindowMoveEventClass(point),
WindowEvent::Scroll( WindowEvent::Scroll(
ScrollLocation::Delta((point - start) * servo.scroll_scale), ScrollLocation::Delta((point - start) * servo.scroll_scale),
start.to_i32(), start.to_i32(),
TouchEventType::Down, TouchEventType::Down,
), ),
],
), ),
ScrollState::TriggerDragging(start, prev) => ( ScrollState::TriggerDragging(start, prev) => (
ScrollState::TriggerDragging(start, point), ScrollState::TriggerDragging(start, point),
vec![
WindowEvent::MouseWindowMoveEventClass(point),
WindowEvent::Scroll( WindowEvent::Scroll(
ScrollLocation::Delta((point - prev) * servo.scroll_scale), ScrollLocation::Delta((point - prev) * servo.scroll_scale),
start.to_i32(), start.to_i32(),
TouchEventType::Move, TouchEventType::Move,
), ),
],
), ),
}; };
servo.scroll_state = new_state; servo.scroll_state = new_state;
servo.servo.handle_events(vec![window_event]); servo.servo.handle_events(window_events);
} }
} }