diff --git a/FEATURES.md b/FEATURES.md index ca28c417f1..1b859726cd 100644 --- a/FEATURES.md +++ b/FEATURES.md @@ -202,7 +202,7 @@ Legend: |Cursor icon |✔️ |✔️ |✔️ |✔️ |**N/A**|**N/A**|✔️ | |Touch events |✔️ |❌ |✔️ |✔️ |✔️ |✔️ |❌ | |Touch pressure |✔️ |❌ |❌ |❌ |❌ |✔️ |❌ | -|Multitouch |✔️ |❌ |✔️ |✔️ |❓ |✔️ |❌ | +|Multitouch |✔️ |❌ |✔️ |✔️ |✔️ |✔️ |❌ | |Keyboard events |✔️ |✔️ |✔️ |✔️ |❓ |❌ |✔️ | |Drag & Drop |▢[#720] |▢[#720] |▢[#720] |❌[#306] |**N/A**|**N/A**|❓ | |Raw Device Events |▢[#750] |▢[#750] |▢[#750] |❌ |❌ |❌ |❓ | diff --git a/src/platform_impl/android/mod.rs b/src/platform_impl/android/mod.rs index ddd1eb961a..b8df45151b 100644 --- a/src/platform_impl/android/mod.rs +++ b/src/platform_impl/android/mod.rs @@ -193,14 +193,27 @@ impl EventLoop { } _ => None, // TODO mouse events }; - if let Some(phase) = phase { - for pointer in motion_event.pointers() { + let pointers: Box< + dyn Iterator>, + > = match phase { + event::TouchPhase::Started + | event::TouchPhase::Ended => Box::new( + std::iter::once(motion_event.pointer_at_index( + motion_event.pointer_index(), + )), + ), + event::TouchPhase::Moved + | event::TouchPhase::Cancelled => { + Box::new(motion_event.pointers()) + } + }; + + for pointer in pointers { let location = PhysicalPosition { x: pointer.x() as _, y: pointer.y() as _, }; - let event = event::Event::WindowEvent { window_id, event: event::WindowEvent::Touch(