Rewild Your Web
web browser dweb
at main 67 lines 2.2 kB view raw
1/* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ 4 5//! Simulates touch events from mouse input for mobile development. 6//! Copied from servoshell/desktop/headed_window.rs 7 8use std::cell::Cell; 9 10use euclid::Point2D; 11use servo::{DevicePixel, InputEvent, TouchEvent, TouchEventType, TouchId, WebView}; 12use winit::event::{ElementState, MouseButton}; 13 14/// Simulates touch events from mouse input when mobile simulation is enabled. 15#[derive(Default)] 16pub struct TouchEventSimulator { 17 left_mouse_button_down: Cell<bool>, 18} 19 20impl TouchEventSimulator { 21 /// Convert mouse button event to touch. Returns true if consumed. 22 pub fn maybe_consume_mouse_button_event( 23 &self, 24 webview: &WebView, 25 button: MouseButton, 26 action: ElementState, 27 point: Point2D<f32, DevicePixel>, 28 ) -> bool { 29 if button != MouseButton::Left { 30 return false; 31 } 32 33 if action == ElementState::Pressed && !self.left_mouse_button_down.get() { 34 webview.notify_input_event(InputEvent::Touch(TouchEvent::new( 35 TouchEventType::Down, 36 TouchId(0), 37 point.into(), 38 ))); 39 self.left_mouse_button_down.set(true); 40 } else if action == ElementState::Released { 41 webview.notify_input_event(InputEvent::Touch(TouchEvent::new( 42 TouchEventType::Up, 43 TouchId(0), 44 point.into(), 45 ))); 46 self.left_mouse_button_down.set(false); 47 } 48 true 49 } 50 51 /// Convert mouse move to touch move. Returns true if consumed. 52 pub fn maybe_consume_mouse_move_event( 53 &self, 54 webview: &WebView, 55 point: Point2D<f32, DevicePixel>, 56 ) -> bool { 57 if !self.left_mouse_button_down.get() { 58 return false; 59 } 60 webview.notify_input_event(InputEvent::Touch(TouchEvent::new( 61 TouchEventType::Move, 62 TouchId(0), 63 point.into(), 64 ))); 65 true 66 } 67}