use wasm_bindgen::JsCast;
use wasm_bindgen::JsValue;
use wasm_bindgen::prelude::*;
use web_sys::*;
use super::super::app_state;
pub fn input_setup(canvas: &HtmlCanvasElement){
let _result = [
attach_mouse_down_handler(&canvas),
attach_mouse_up_handler(&canvas),
attach_mouse_move_handler(&canvas)
];
}
fn attach_mouse_down_handler(canvas: &HtmlCanvasElement) -> Result<(), JsValue> {
let handler = move |event: web_sys::MouseEvent| {
app_state::update_mouse_down(event.client_x() as f32, event.client_y() as f32, true)
};
let handler = Closure::wrap(Box::new(handler) as Box<dyn FnMut(_)>);
canvas.add_event_listener_with_callback("mousedown", handler.as_ref().unchecked_ref())?;
handler.forget();
Ok(())
}
fn attach_mouse_up_handler(canvas: &HtmlCanvasElement) -> Result<(), JsValue> {
let handler = move |event: web_sys::MouseEvent| {
app_state::update_mouse_down(event.client_x() as f32, event.client_y() as f32, false)
};
let handler = Closure::wrap(Box::new(handler) as Box<dyn FnMut(_)>);
canvas.add_event_listener_with_callback("mouseup", handler.as_ref().unchecked_ref())?;
handler.forget();
Ok(())
}
fn attach_mouse_move_handler(canvas: &HtmlCanvasElement) -> Result<(), JsValue> {
let handler = move |event: web_sys::MouseEvent| {
app_state::update_mouse_position(event.client_x() as f32, event.client_y() as f32)
};
let handler = Closure::wrap(Box::new(handler) as Box<dyn FnMut(_)>);
canvas.add_event_listener_with_callback("mousemove", handler.as_ref().unchecked_ref())?;
handler.forget();
Ok(())
}