1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
mod keyboard; pub use keyboard::*; mod mouse; pub use mouse::*; mod external; pub use external::*; use wasm_bindgen::prelude::*; use wasm_bindgen::JsCast; pub fn bind_wasm_events(canvas: &web_sys::HtmlCanvasElement) { // Handle keyboard input let key_callback = Closure::wrap(Box::new(|e: web_sys::KeyboardEvent| { on_key(e.clone()); }) as Box<dyn FnMut(_)>); let document = web_sys::window().unwrap(); document.set_onkeydown(Some(key_callback.as_ref().unchecked_ref())); key_callback.forget(); let keyup_callback = Closure::wrap(Box::new(|e: web_sys::KeyboardEvent| { on_key_up(e.clone()); }) as Box<dyn FnMut(_)>); document.set_onkeyup(Some(keyup_callback.as_ref().unchecked_ref())); keyup_callback.forget(); // Handle mouse moving let mousemove_callback = Closure::wrap(Box::new(|e: web_sys::MouseEvent| { on_mouse_move(e.clone()); }) as Box<dyn FnMut(_)>); canvas.set_onmousemove(Some(mousemove_callback.as_ref().unchecked_ref())); mousemove_callback.forget(); // Handle mouse clicking let mouseclick_callback = Closure::wrap(Box::new(|e: web_sys::MouseEvent| { on_mouse_down(e.clone()); }) as Box<dyn FnMut(_)>); canvas.set_onmousedown(Some(mouseclick_callback.as_ref().unchecked_ref())); mouseclick_callback.forget(); // Handle mouse release let mouseunclick_callback = Closure::wrap(Box::new(|e: web_sys::MouseEvent| { on_mouse_up(e.clone()); }) as Box<dyn FnMut(_)>); canvas.set_onmouseup(Some(mouseunclick_callback.as_ref().unchecked_ref())); mouseunclick_callback.forget(); }