mirror of
https://github.com/servo/servo.git
synced 2025-08-23 06:15:35 +01:00
Touch handler: Fix race condition and rate-limit move events (#35537)
* TouchSequenceInfo is added to store information about a touch sequence. For details about TouchSequenceInfo, see the code comments. The handling_touch_move attribute is added to the TouchHandler, indicating that the script is processing the touch move event. When handling_touch_move is set to true, the touch move event does not need to be sent to the script thread. Signed-off-by: kongbai1996 <1782765876@qq.com> * move touch state, active_touch_point and handling_touch_move to TouchSequenceInfo form TouchHandler. remove TouchSequenceInfo end_sequence property, add Finished state mark sequence end. if preventDefault on touchup, do not prevent Fling. Signed-off-by: kongbai1996 <1782765876@qq.com> * Refactor Touchhandler - Add a newtype wrapper for the TouchSequenceId - Move more state back into the TouchSequenceState - Rename TouchAction to TouchMoveAction, since it only covers immediate actions now. Everything else is handled via state, since it needs to wait on the handler. Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix test-tidy Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix clippy missing-default lint Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix remaining clippy lints Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Remove accidental committed test file Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Remove wrong todo comment (move events that are sent to script are just raw touchpoints, no merging needed) Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> * Fix preventdefault after long touch_down handler Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> --------- Signed-off-by: kongbai1996 <1782765876@qq.com> Signed-off-by: Jonathan Schwender <schwenderjonathan@gmail.com> Co-authored-by: Jonathan Schwender <schwenderjonathan@gmail.com>
This commit is contained in:
parent
374bfc6983
commit
f3a8bf8ca2
9 changed files with 746 additions and 278 deletions
|
@ -24,8 +24,8 @@ use servo::webrender_api::ScrollLocation;
|
|||
use servo::{
|
||||
Cursor, ImeEvent, InputEvent, Key, KeyState, KeyboardEvent, MouseButton as ServoMouseButton,
|
||||
MouseButtonAction, MouseButtonEvent, MouseMoveEvent, OffscreenRenderingContext,
|
||||
RenderingContext, Theme, TouchAction, TouchEvent, TouchEventType, TouchId, WebView, WheelDelta,
|
||||
WheelEvent, WheelMode, WindowRenderingContext,
|
||||
RenderingContext, Theme, TouchEvent, TouchEventType, TouchId, WebView, WheelDelta, WheelEvent,
|
||||
WheelMode, WindowRenderingContext,
|
||||
};
|
||||
use surfman::{Context, Device};
|
||||
use url::Url;
|
||||
|
@ -600,12 +600,11 @@ impl WindowPortsMethods for Window {
|
|||
);
|
||||
},
|
||||
WindowEvent::Touch(touch) => {
|
||||
webview.notify_input_event(InputEvent::Touch(TouchEvent {
|
||||
event_type: winit_phase_to_touch_event_type(touch.phase),
|
||||
id: TouchId(touch.id as i32),
|
||||
point: Point2D::new(touch.location.x as f32, touch.location.y as f32),
|
||||
action: TouchAction::NoAction,
|
||||
}));
|
||||
webview.notify_input_event(InputEvent::Touch(TouchEvent::new(
|
||||
winit_phase_to_touch_event_type(touch.phase),
|
||||
TouchId(touch.id as i32),
|
||||
Point2D::new(touch.location.x as f32, touch.location.y as f32),
|
||||
)));
|
||||
},
|
||||
WindowEvent::PinchGesture { delta, .. } => {
|
||||
webview.set_pinch_zoom(delta as f32 + 1.0);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue