76 lines
2.5 KiB
Rust
76 lines
2.5 KiB
Rust
use servo::{
|
|
DevicePoint, InputEvent, KeyState, KeyboardEvent, Location, Modifiers, MouseButton,
|
|
MouseButtonAction, MouseButtonEvent, MouseMoveEvent, TouchEvent, TouchEventType, TouchId,
|
|
TouchPointerType, WebView, WebViewPoint,
|
|
};
|
|
|
|
use crate::keyboard::key_and_code_for_character;
|
|
|
|
pub(super) fn send_mouse_hover(webview: &WebView, x: u32, y: u32) {
|
|
webview.notify_input_event(InputEvent::MouseMove(MouseMoveEvent::new(point(x, y))));
|
|
}
|
|
|
|
pub(super) fn send_mouse_click(webview: &WebView, x: u32, y: u32) {
|
|
let point = point(x, y);
|
|
webview.notify_input_event(InputEvent::MouseMove(MouseMoveEvent::new(point)));
|
|
send_mouse_button(webview, MouseButtonAction::Down, point);
|
|
send_mouse_button(webview, MouseButtonAction::Up, point);
|
|
}
|
|
|
|
pub(super) fn send_mouse_drag(webview: &WebView, from_x: u32, from_y: u32, to_x: u32, to_y: u32) {
|
|
let from = point(from_x, from_y);
|
|
let to = point(to_x, to_y);
|
|
send_mouse_button(webview, MouseButtonAction::Down, from);
|
|
webview.notify_input_event(InputEvent::MouseMove(MouseMoveEvent::new(to)));
|
|
send_mouse_button(webview, MouseButtonAction::Up, to);
|
|
}
|
|
|
|
pub(super) fn send_touch_tap(webview: &WebView, x: u32, y: u32) {
|
|
let point = point(x, y);
|
|
let touch_id = TouchId(1);
|
|
for event_type in [TouchEventType::Down, TouchEventType::Up] {
|
|
webview.notify_input_event(InputEvent::Touch(TouchEvent::new(
|
|
event_type,
|
|
touch_id,
|
|
point,
|
|
TouchPointerType::Touch,
|
|
)));
|
|
}
|
|
}
|
|
|
|
pub(super) fn send_keyboard_text(webview: &WebView, text: &str) {
|
|
for character in text.chars() {
|
|
let (key, code) = key_and_code_for_character(character);
|
|
webview.notify_input_event(InputEvent::Keyboard(KeyboardEvent::new_without_event(
|
|
KeyState::Down,
|
|
key.clone(),
|
|
code,
|
|
Location::Standard,
|
|
Modifiers::empty(),
|
|
false,
|
|
false,
|
|
)));
|
|
webview.notify_input_event(InputEvent::Keyboard(KeyboardEvent::new_without_event(
|
|
KeyState::Up,
|
|
key,
|
|
code,
|
|
Location::Standard,
|
|
Modifiers::empty(),
|
|
false,
|
|
false,
|
|
)));
|
|
}
|
|
}
|
|
|
|
fn send_mouse_button(webview: &WebView, action: MouseButtonAction, point: WebViewPoint) {
|
|
webview.notify_input_event(InputEvent::MouseButton(MouseButtonEvent::new(
|
|
action,
|
|
MouseButton::Left,
|
|
point,
|
|
)));
|
|
}
|
|
|
|
fn point(x: u32, y: u32) -> WebViewPoint {
|
|
WebViewPoint::Device(DevicePoint::new(x as f32, y as f32))
|
|
}
|