forked from darius/math-toys
/
pointing.js
43 lines (35 loc) · 1010 Bytes
/
pointing.js
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
// Translate touch and mouse events to canvas-relative coords
// etc.
;(function(exports) {
'use strict';
// XXX review the touch API, use clientX etc. instead?
function touchCoords(canvas, touch) {
return canvasCoords(canvas, touch.pageX, touch.pageY);
}
function mouseCoords(canvas, event) {
return canvasCoords(canvas, event.clientX, event.clientY);
}
function canvasCoords(canvas, pageX, pageY) {
const canvasBounds = canvas.getBoundingClientRect();
return {x: pageX - canvasBounds.left,
y: pageY - canvasBounds.top};
}
function mouseHandler(canvas, handler) {
return event => handler(mouseCoords(canvas, event));
}
function leftButtonOnly(handler) {
return event => {
if (event.button === 0) { // left mouse button
handler(event);
}
};
}
if (exports.mathtoys === void 0) exports.mathtoys = {};
exports.mathtoys.pointing = {
touchCoords,
mouseCoords,
//canvasCoords,
mouseHandler,
leftButtonOnly,
};
})(this);