@@ -411,18 +411,17 @@ impl WebViewRenderer {
411411 render_api : & RenderApi ,
412412 repaint_reason : & Cell < RepaintReason > ,
413413 event_and_id : InputEventAndId ,
414- ) {
414+ ) -> bool {
415415 if let InputEvent :: Touch ( touch_event) = event_and_id. event {
416- self . on_touch_event ( render_api, repaint_reason, touch_event, event_and_id. id ) ;
417- return ;
416+ return self . on_touch_event ( render_api, repaint_reason, touch_event, event_and_id. id ) ;
418417 }
419418
420419 if let InputEvent :: Wheel ( wheel_event) = event_and_id. event {
421420 self . pending_wheel_events
422421 . insert ( event_and_id. id , wheel_event) ;
423422 }
424423
425- self . dispatch_input_event_with_hit_testing ( render_api, event_and_id) ;
424+ self . dispatch_input_event_with_hit_testing ( render_api, event_and_id)
426425 }
427426
428427 fn send_touch_event (
@@ -458,30 +457,41 @@ impl WebViewRenderer {
458457 repaint_reason : & Cell < RepaintReason > ,
459458 event : TouchEvent ,
460459 id : InputEventId ,
461- ) {
462- match event. event_type {
460+ ) -> bool {
461+ let result = match event. event_type {
463462 TouchEventType :: Down => self . on_touch_down ( render_api, event, id) ,
464463 TouchEventType :: Move => self . on_touch_move ( render_api, event, id) ,
465464 TouchEventType :: Up => self . on_touch_up ( render_api, event, id) ,
466465 TouchEventType :: Cancel => self . on_touch_cancel ( render_api, event, id) ,
467- }
466+ } ;
468467
469468 self . touch_handler
470469 . add_touch_move_refresh_observer_if_necessary (
471470 self . refresh_driver . clone ( ) ,
472471 repaint_reason,
473472 ) ;
473+ result
474474 }
475475
476- fn on_touch_down ( & mut self , render_api : & RenderApi , event : TouchEvent , id : InputEventId ) {
476+ fn on_touch_down (
477+ & mut self ,
478+ render_api : & RenderApi ,
479+ event : TouchEvent ,
480+ id : InputEventId ,
481+ ) -> bool {
477482 let point = event
478483 . point
479484 . as_device_point ( self . device_pixels_per_page_pixel ( ) ) ;
480485 self . touch_handler . on_touch_down ( event. touch_id , point) ;
481- self . send_touch_event ( render_api, event, id) ;
486+ self . send_touch_event ( render_api, event, id)
482487 }
483488
484- fn on_touch_move ( & mut self , render_api : & RenderApi , mut event : TouchEvent , id : InputEventId ) {
489+ fn on_touch_move (
490+ & mut self ,
491+ render_api : & RenderApi ,
492+ mut event : TouchEvent ,
493+ id : InputEventId ,
494+ ) -> bool {
485495 let point = event
486496 . point
487497 . as_device_point ( self . device_pixels_per_page_pixel ( ) ) ;
@@ -503,37 +513,45 @@ impl WebViewRenderer {
503513 self . pending_scroll_zoom_events . push ( action) ;
504514 }
505515 }
516+ let mut reached_constellation = false ;
506517 // When the event is touchmove, if the script thread is processing the touch
507518 // move event, we skip sending the event to the script thread.
508519 // This prevents the script thread from stacking up for a large amount of time.
509520 if !self . touch_handler . is_handling_touch_move_for_touch_id (
510521 self . touch_handler . current_sequence_id ,
511522 event. touch_id ,
512- ) && self . send_touch_event ( render_api, event, id) &&
513- event. is_cancelable ( )
514- {
515- self . touch_handler . set_handling_touch_move_for_touch_id (
516- self . touch_handler . current_sequence_id ,
517- event. touch_id ,
518- TouchIdMoveTracking :: Track ,
519- ) ;
523+ ) {
524+ reached_constellation = self . send_touch_event ( render_api, event, id) ;
525+ if reached_constellation && event. is_cancelable ( ) {
526+ self . touch_handler . set_handling_touch_move_for_touch_id (
527+ self . touch_handler . current_sequence_id ,
528+ event. touch_id ,
529+ TouchIdMoveTracking :: Track ,
530+ ) ;
531+ }
520532 }
533+ reached_constellation
521534 }
522535
523- fn on_touch_up ( & mut self , render_api : & RenderApi , event : TouchEvent , id : InputEventId ) {
536+ fn on_touch_up ( & mut self , render_api : & RenderApi , event : TouchEvent , id : InputEventId ) -> bool {
524537 let point = event
525538 . point
526539 . as_device_point ( self . device_pixels_per_page_pixel ( ) ) ;
527540 self . touch_handler . on_touch_up ( event. touch_id , point) ;
528- self . send_touch_event ( render_api, event, id) ;
541+ self . send_touch_event ( render_api, event, id)
529542 }
530543
531- fn on_touch_cancel ( & mut self , render_api : & RenderApi , event : TouchEvent , id : InputEventId ) {
544+ fn on_touch_cancel (
545+ & mut self ,
546+ render_api : & RenderApi ,
547+ event : TouchEvent ,
548+ id : InputEventId ,
549+ ) -> bool {
532550 let point = event
533551 . point
534552 . as_device_point ( self . device_pixels_per_page_pixel ( ) ) ;
535553 self . touch_handler . on_touch_cancel ( event. touch_id , point) ;
536- self . send_touch_event ( render_api, event, id) ;
554+ self . send_touch_event ( render_api, event, id)
537555 }
538556
539557 fn on_touch_event_processed (
0 commit comments