8
function MouseAdapter(bus, screen_container)
11
var SPEED_FACTOR = 0.15;
13
var left_down = false,
26
this.emu_enabled = true;
30
this.bus.register("mouse-enable", function(enabled)
32
this.enabled = enabled;
35
this.destroy = function()
37
if(typeof window === "undefined")
41
window.removeEventListener("touchstart", touch_start_handler, false);
42
window.removeEventListener("touchend", touch_end_handler, false);
45
window.removeEventListener("mousedown", mousedown_handler, false);
46
window.removeEventListener("mouseup", mouseup_handler, false);
47
window.removeEventListener("DOMMouseScroll", mousewheel_handler, false);
48
window.removeEventListener("mousewheel", mousewheel_handler, { passive: false });
51
this.init = function()
53
if(typeof window === "undefined")
59
window.addEventListener("touchstart", touch_start_handler, false);
60
window.addEventListener("touchend", touch_end_handler, false);
63
window.addEventListener("mousedown", mousedown_handler, false);
64
window.addEventListener("mouseup", mouseup_handler, false);
65
window.addEventListener("DOMMouseScroll", mousewheel_handler, false);
66
window.addEventListener("mousewheel", mousewheel_handler, { passive: false });
70
function is_child(child, parent)
72
while(child.parentNode)
78
child = child.parentNode;
84
function may_handle(e)
86
if(!mouse.enabled || !mouse.emu_enabled)
91
const MOVE_MOUSE_WHEN_OVER_SCREEN_ONLY = true;
93
if(MOVE_MOUSE_WHEN_OVER_SCREEN_ONLY)
95
var parent = screen_container || document.body;
96
return document.pointerLockElement || is_child(e.target, parent);
100
if(e.type === "mousemove" || e.type === "touchmove")
105
if(e.type === "mousewheel" || e.type === "DOMMouseScroll")
107
return is_child(e.target, parent);
110
return !e.target || e.target.nodeName !== "INPUT" && e.target.nodeName !== "TEXTAREA";
114
function touch_start_handler(e)
118
var touches = e["changedTouches"];
120
if(touches && touches.length)
122
var touch = touches[touches.length - 1];
123
last_x = touch.clientX;
124
last_y = touch.clientY;
129
function touch_end_handler(e)
131
if(left_down || middle_down || right_down)
133
mouse.bus.send("mouse-click", [false, false, false]);
134
left_down = middle_down = right_down = false;
138
function mousemove_handler(e)
153
var touches = e["changedTouches"];
159
var touch = touches[touches.length - 1];
160
delta_x = touch.clientX - last_x;
161
delta_y = touch.clientY - last_y;
163
last_x = touch.clientX;
164
last_y = touch.clientY;
171
if(typeof e["movementX"] === "number")
173
delta_x = e["movementX"];
174
delta_y = e["movementY"];
176
else if(typeof e["webkitMovementX"] === "number")
178
delta_x = e["webkitMovementX"];
179
delta_y = e["webkitMovementY"];
181
else if(typeof e["mozMovementX"] === "number")
183
delta_x = e["mozMovementX"];
184
delta_y = e["mozMovementY"];
189
delta_x = e.clientX - last_x;
190
delta_y = e.clientY - last_y;
197
delta_x *= SPEED_FACTOR;
198
delta_y *= SPEED_FACTOR;
207
mouse.bus.send("mouse-delta", [delta_x, delta_y]);
211
let absolute_x = e.pageX - screen_container.offsetLeft;
212
let absolute_y = e.pageY - screen_container.offsetTop;
213
mouse.bus.send("mouse-absolute", [
214
absolute_x, absolute_y, screen_container.offsetWidth, screen_container.offsetHeight]);
218
function mousedown_handler(e)
222
click_event(e, true);
226
function mouseup_handler(e)
230
click_event(e, false);
234
function click_event(e, down)
245
else if(e.which === 2)
249
else if(e.which === 3)
255
dbg_log("Unknown event.which: " + e.which);
257
mouse.bus.send("mouse-click", [left_down, middle_down, right_down]);
261
function mousewheel_handler(e)
268
var delta_x = e.wheelDelta || -e.detail;
280
mouse.bus.send("mouse-wheel", [delta_x, delta_y]);