mirror of
https://github.com/italicsjenga/winit-sonoma-fix.git
synced 2024-12-23 22:01:31 +11:00
Add pointerrawupdate
support
This commit is contained in:
parent
d3aeff8838
commit
3f4f580181
|
@ -67,6 +67,7 @@ And please only add new entries to the top of this list, right below the `# Unre
|
||||||
- On Web, fix touch input not gaining or loosing focus.
|
- On Web, fix touch input not gaining or loosing focus.
|
||||||
- **Breaking:** On Web, dropped support for Safari versions below 13.
|
- **Breaking:** On Web, dropped support for Safari versions below 13.
|
||||||
- On Web, prevent clicks on the canvas to select text.
|
- On Web, prevent clicks on the canvas to select text.
|
||||||
|
- On Web, use high-frequency pointer input events when supported by the browser.
|
||||||
|
|
||||||
# 0.28.6
|
# 0.28.6
|
||||||
|
|
||||||
|
|
|
@ -6,9 +6,10 @@ use crate::event::{Force, MouseButton};
|
||||||
use crate::keyboard::ModifiersState;
|
use crate::keyboard::ModifiersState;
|
||||||
|
|
||||||
use event::ButtonsState;
|
use event::ButtonsState;
|
||||||
|
use once_cell::unsync::OnceCell;
|
||||||
use wasm_bindgen::prelude::wasm_bindgen;
|
use wasm_bindgen::prelude::wasm_bindgen;
|
||||||
use wasm_bindgen::{JsCast, JsValue};
|
use wasm_bindgen::{JsCast, JsValue};
|
||||||
use web_sys::PointerEvent;
|
use web_sys::{HtmlCanvasElement, PointerEvent};
|
||||||
|
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
pub(super) struct PointerHandler {
|
pub(super) struct PointerHandler {
|
||||||
|
@ -186,7 +187,11 @@ impl PointerHandler {
|
||||||
{
|
{
|
||||||
let canvas = canvas_common.raw.clone();
|
let canvas = canvas_common.raw.clone();
|
||||||
self.on_cursor_move = Some(canvas_common.add_event(
|
self.on_cursor_move = Some(canvas_common.add_event(
|
||||||
"pointermove",
|
if has_pointer_raw_support(&canvas) {
|
||||||
|
"pointerrawupdate"
|
||||||
|
} else {
|
||||||
|
"pointermove"
|
||||||
|
},
|
||||||
move |event: PointerEvent| {
|
move |event: PointerEvent| {
|
||||||
// coalesced events are not available on Safari
|
// coalesced events are not available on Safari
|
||||||
#[wasm_bindgen]
|
#[wasm_bindgen]
|
||||||
|
@ -300,3 +305,24 @@ impl PointerHandler {
|
||||||
self.on_touch_cancel = None;
|
self.on_touch_cancel = None;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn has_pointer_raw_support(canvas: &HtmlCanvasElement) -> bool {
|
||||||
|
thread_local! {
|
||||||
|
static POINTER_RAW_SUPPORT: OnceCell<bool> = OnceCell::new();
|
||||||
|
}
|
||||||
|
|
||||||
|
POINTER_RAW_SUPPORT.with(|support| {
|
||||||
|
*support.get_or_init(|| {
|
||||||
|
#[wasm_bindgen]
|
||||||
|
extern "C" {
|
||||||
|
type HtmlCanvasElementExt;
|
||||||
|
|
||||||
|
#[wasm_bindgen(method, getter, js_name = onpointerrawupdate)]
|
||||||
|
fn has_on_pointerrawupdate(this: &HtmlCanvasElementExt) -> JsValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let canvas: &HtmlCanvasElementExt = canvas.unchecked_ref();
|
||||||
|
!canvas.has_on_pointerrawupdate().is_undefined()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue