[ts] Fixed multi touch runtime error.

Repro: touch down 1, touch down 2 (using second finger), touch up 1, touch up 2 -> error.
This commit is contained in:
Nathan Sweet 2021-06-22 23:08:09 -04:00
parent f77a51d33a
commit b3c405e9ca
10 changed files with 318 additions and 311 deletions

View File

@ -1337,8 +1337,8 @@ declare module spine.webgl {
lastY: number; lastY: number;
buttonDown: boolean; buttonDown: boolean;
currTouch: Touch; currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners; private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement); constructor(element: HTMLElement);
private setupCallbacks; private setupCallbacks;
addListener(listener: InputListener): void; addListener(listener: InputListener): void;

View File

@ -9401,10 +9401,10 @@ var spine;
this.lastY = 0; this.lastY = 0;
this.buttonDown = false; this.buttonDown = false;
this.currTouch = null; this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () { this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0); return new spine.webgl.Touch(0, 0, 0);
}); });
this.listeners = new Array();
this.element = element; this.element = element;
this.setupCallbacks(element); this.setupCallbacks(element);
} }
@ -9416,10 +9416,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].down) if (listeners[i].down)
listeners[i].down(x, y); listeners[i].down(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = true; _this.buttonDown = true;
@ -9453,10 +9452,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].up) if (listeners[i].up)
listeners[i].up(x, y); listeners[i].up(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = false; _this.buttonDown = false;
@ -9468,94 +9466,98 @@ var spine;
element.addEventListener("mousemove", mouseMove, true); element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true); element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) { element.addEventListener("touchstart", function (ev) {
if (_this.currTouch) if (!_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; _this.currTouch = _this.touchesPool.obtain();
_this.currTouch = _this.touchesPool.obtain(); _this.currTouch.identifier = touch.identifier;
_this.currTouch.identifier = touch.identifier; _this.currTouch.x = x;
_this.currTouch.x = x; _this.currTouch.y = y;
_this.currTouch.y = y; break;
break; }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
} }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchend", function (ev) { element.addEventListener("touchend", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_18 = 0; i_18 < listeners.length; i_18++) { var listeners = _this.listeners;
if (listeners[i_18].up) for (var i_18 = 0; i_18 < listeners.length; i_18++) {
listeners[i_18].up(x, y); if (listeners[i_18].up)
listeners[i_18].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchcancel", function (ev) { element.addEventListener("touchcancel", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_19 = 0; i_19 < listeners.length; i_19++) { var listeners = _this.listeners;
if (listeners[i_19].up) for (var i_19 = 0; i_19 < listeners.length; i_19++) {
listeners[i_19].up(x, y); if (listeners[i_19].up)
listeners[i_19].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchmove", function (ev) { element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch) if (_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; if (_this.currTouch.identifier === touch.identifier) {
if (_this.currTouch.identifier === touch.identifier) { var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; var listeners = _this.listeners;
var listeners = _this.listeners; for (var i_20 = 0; i_20 < listeners.length; i_20++) {
for (var i_20 = 0; i_20 < listeners.length; i_20++) { if (listeners[i_20].dragged)
if (listeners[i_20].dragged) listeners[i_20].dragged(x, y);
listeners[i_20].dragged(x, y); }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();

File diff suppressed because one or more lines are too long

View File

@ -1306,8 +1306,8 @@ declare module spine.webgl {
lastY: number; lastY: number;
buttonDown: boolean; buttonDown: boolean;
currTouch: Touch; currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners; private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement); constructor(element: HTMLElement);
private setupCallbacks; private setupCallbacks;
addListener(listener: InputListener): void; addListener(listener: InputListener): void;

View File

@ -9151,10 +9151,10 @@ var spine;
this.lastY = 0; this.lastY = 0;
this.buttonDown = false; this.buttonDown = false;
this.currTouch = null; this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () { this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0); return new spine.webgl.Touch(0, 0, 0);
}); });
this.listeners = new Array();
this.element = element; this.element = element;
this.setupCallbacks(element); this.setupCallbacks(element);
} }
@ -9166,10 +9166,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].down) if (listeners[i].down)
listeners[i].down(x, y); listeners[i].down(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = true; _this.buttonDown = true;
@ -9203,10 +9202,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].up) if (listeners[i].up)
listeners[i].up(x, y); listeners[i].up(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = false; _this.buttonDown = false;
@ -9218,94 +9216,98 @@ var spine;
element.addEventListener("mousemove", mouseMove, true); element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true); element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) { element.addEventListener("touchstart", function (ev) {
if (_this.currTouch) if (!_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; _this.currTouch = _this.touchesPool.obtain();
_this.currTouch = _this.touchesPool.obtain(); _this.currTouch.identifier = touch.identifier;
_this.currTouch.identifier = touch.identifier; _this.currTouch.x = x;
_this.currTouch.x = x; _this.currTouch.y = y;
_this.currTouch.y = y; break;
break; }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
} }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchend", function (ev) { element.addEventListener("touchend", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_18 = 0; i_18 < listeners.length; i_18++) { var listeners = _this.listeners;
if (listeners[i_18].up) for (var i_18 = 0; i_18 < listeners.length; i_18++) {
listeners[i_18].up(x, y); if (listeners[i_18].up)
listeners[i_18].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchcancel", function (ev) { element.addEventListener("touchcancel", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_19 = 0; i_19 < listeners.length; i_19++) { var listeners = _this.listeners;
if (listeners[i_19].up) for (var i_19 = 0; i_19 < listeners.length; i_19++) {
listeners[i_19].up(x, y); if (listeners[i_19].up)
listeners[i_19].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchmove", function (ev) { element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch) if (_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; if (_this.currTouch.identifier === touch.identifier) {
if (_this.currTouch.identifier === touch.identifier) { var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; var listeners = _this.listeners;
var listeners = _this.listeners; for (var i_20 = 0; i_20 < listeners.length; i_20++) {
for (var i_20 = 0; i_20 < listeners.length; i_20++) { if (listeners[i_20].dragged)
if (listeners[i_20].dragged) listeners[i_20].dragged(x, y);
listeners[i_20].dragged(x, y); }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();

File diff suppressed because one or more lines are too long

View File

@ -1306,8 +1306,8 @@ declare module spine.webgl {
lastY: number; lastY: number;
buttonDown: boolean; buttonDown: boolean;
currTouch: Touch; currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners; private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement); constructor(element: HTMLElement);
private setupCallbacks; private setupCallbacks;
addListener(listener: InputListener): void; addListener(listener: InputListener): void;

View File

@ -9151,10 +9151,10 @@ var spine;
this.lastY = 0; this.lastY = 0;
this.buttonDown = false; this.buttonDown = false;
this.currTouch = null; this.currTouch = null;
this.listeners = new Array();
this.touchesPool = new spine.Pool(function () { this.touchesPool = new spine.Pool(function () {
return new spine.webgl.Touch(0, 0, 0); return new spine.webgl.Touch(0, 0, 0);
}); });
this.listeners = new Array();
this.element = element; this.element = element;
this.setupCallbacks(element); this.setupCallbacks(element);
} }
@ -9166,10 +9166,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].down) if (listeners[i].down)
listeners[i].down(x, y); listeners[i].down(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = true; _this.buttonDown = true;
@ -9203,10 +9202,9 @@ var spine;
var x = ev.clientX - rect.left; var x = ev.clientX - rect.left;
var y = ev.clientY - rect.top; var y = ev.clientY - rect.top;
var listeners = _this.listeners; var listeners = _this.listeners;
for (var i = 0; i < listeners.length; i++) { for (var i = 0; i < listeners.length; i++)
if (listeners[i].up) if (listeners[i].up)
listeners[i].up(x, y); listeners[i].up(x, y);
}
_this.lastX = x; _this.lastX = x;
_this.lastY = y; _this.lastY = y;
_this.buttonDown = false; _this.buttonDown = false;
@ -9218,94 +9216,98 @@ var spine;
element.addEventListener("mousemove", mouseMove, true); element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true); element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", function (ev) { element.addEventListener("touchstart", function (ev) {
if (_this.currTouch) if (!_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; _this.currTouch = _this.touchesPool.obtain();
_this.currTouch = _this.touchesPool.obtain(); _this.currTouch.identifier = touch.identifier;
_this.currTouch.identifier = touch.identifier; _this.currTouch.x = x;
_this.currTouch.x = x; _this.currTouch.y = y;
_this.currTouch.y = y; break;
break; }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
} }
var listeners = _this.listeners;
for (var i_17 = 0; i_17 < listeners.length; i_17++) {
if (listeners[i_17].down)
listeners[i_17].down(_this.currTouch.x, _this.currTouch.y);
}
_this.lastX = _this.currTouch.x;
_this.lastY = _this.currTouch.y;
_this.buttonDown = true;
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchend", function (ev) { element.addEventListener("touchend", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_18 = 0; i_18 < listeners.length; i_18++) { var listeners = _this.listeners;
if (listeners[i_18].up) for (var i_18 = 0; i_18 < listeners.length; i_18++) {
listeners[i_18].up(x, y); if (listeners[i_18].up)
listeners[i_18].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchcancel", function (ev) { element.addEventListener("touchcancel", function (ev) {
var touches = ev.changedTouches; if (_this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (_this.currTouch.identifier === touch.identifier) { var touch = touches[i];
var rect = element.getBoundingClientRect(); if (_this.currTouch.identifier === touch.identifier) {
var x = _this.currTouch.x = touch.clientX - rect.left; var rect = element.getBoundingClientRect();
var y = _this.currTouch.y = touch.clientY - rect.top; var x = _this.currTouch.x = touch.clientX - rect.left;
_this.touchesPool.free(_this.currTouch); var y = _this.currTouch.y = touch.clientY - rect.top;
var listeners = _this.listeners; _this.touchesPool.free(_this.currTouch);
for (var i_19 = 0; i_19 < listeners.length; i_19++) { var listeners = _this.listeners;
if (listeners[i_19].up) for (var i_19 = 0; i_19 < listeners.length; i_19++) {
listeners[i_19].up(x, y); if (listeners[i_19].up)
listeners[i_19].up(x, y);
}
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
_this.lastX = x;
_this.lastY = y;
_this.buttonDown = false;
_this.currTouch = null;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchmove", function (ev) { element.addEventListener("touchmove", function (ev) {
if (!_this.currTouch) if (_this.currTouch) {
return; var touches = ev.changedTouches;
var touches = ev.changedTouches; for (var i = 0; i < touches.length; i++) {
for (var i = 0; i < touches.length; i++) { var touch = touches[i];
var touch = touches[i]; if (_this.currTouch.identifier === touch.identifier) {
if (_this.currTouch.identifier === touch.identifier) { var rect = element.getBoundingClientRect();
var rect = element.getBoundingClientRect(); var x = touch.clientX - rect.left;
var x = touch.clientX - rect.left; var y = touch.clientY - rect.top;
var y = touch.clientY - rect.top; var listeners = _this.listeners;
var listeners = _this.listeners; for (var i_20 = 0; i_20 < listeners.length; i_20++) {
for (var i_20 = 0; i_20 < listeners.length; i_20++) { if (listeners[i_20].dragged)
if (listeners[i_20].dragged) listeners[i_20].dragged(x, y);
listeners[i_20].dragged(x, y); }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
_this.lastX = _this.currTouch.x = x;
_this.lastY = _this.currTouch.y = y;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();

File diff suppressed because one or more lines are too long

View File

@ -34,11 +34,12 @@ module spine.webgl {
lastY = 0; lastY = 0;
buttonDown = false; buttonDown = false;
currTouch: Touch = null; currTouch: Touch = null;
private listeners = new Array<InputListener>();
touchesPool = new Pool<spine.webgl.Touch>(() => { touchesPool = new Pool<spine.webgl.Touch>(() => {
return new spine.webgl.Touch(0, 0, 0); return new spine.webgl.Touch(0, 0, 0);
}); });
private listeners = new Array<InputListener>();
constructor (element: HTMLElement) { constructor (element: HTMLElement) {
this.element = element; this.element = element;
this.setupCallbacks(element); this.setupCallbacks(element);
@ -52,9 +53,8 @@ module spine.webgl {
let y = ev.clientY - rect.top; let y = ev.clientY - rect.top;
let listeners = this.listeners; let listeners = this.listeners;
for (let i = 0; i < listeners.length; i++) { for (let i = 0; i < listeners.length; i++)
if (listeners[i].down) listeners[i].down(x, y); if (listeners[i].down) listeners[i].down(x, y);
}
this.lastX = x; this.lastX = x;
this.lastY = y; this.lastY = y;
@ -92,9 +92,8 @@ module spine.webgl {
let y = ev.clientY - rect.top; let y = ev.clientY - rect.top;
let listeners = this.listeners; let listeners = this.listeners;
for (let i = 0; i < listeners.length; i++) { for (let i = 0; i < listeners.length; i++)
if (listeners[i].up) listeners[i].up(x, y); if (listeners[i].up) listeners[i].up(x, y);
}
this.lastX = x; this.lastX = x;
this.lastY = y; this.lastY = y;
@ -104,102 +103,104 @@ module spine.webgl {
} }
} }
element.addEventListener("mousedown", mouseDown, true); element.addEventListener("mousedown", mouseDown, true);
element.addEventListener("mousemove", mouseMove, true); element.addEventListener("mousemove", mouseMove, true);
element.addEventListener("mouseup", mouseUp, true); element.addEventListener("mouseup", mouseUp, true);
element.addEventListener("touchstart", (ev: TouchEvent) => { element.addEventListener("touchstart", (ev: TouchEvent) => {
if (this.currTouch) return; if (!this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
let rect = element.getBoundingClientRect();
let x = touch.clientX - rect.left;
let y = touch.clientY - rect.top;
this.currTouch = this.touchesPool.obtain();
this.currTouch.identifier = touch.identifier;
this.currTouch.x = x;
this.currTouch.y = y;
break;
}
var touches = ev.changedTouches; let listeners = this.listeners;
for (var i = 0; i < touches.length; i++) { for (let i = 0; i < listeners.length; i++) {
var touch = touches[i]; if (listeners[i].down) listeners[i].down(this.currTouch.x, this.currTouch.y);
let rect = element.getBoundingClientRect(); }
let x = touch.clientX - rect.left;
let y = touch.clientY - rect.top; this.lastX = this.currTouch.x;
this.currTouch = this.touchesPool.obtain(); this.lastY = this.currTouch.y;
this.currTouch.identifier = touch.identifier; this.buttonDown = true;
this.currTouch.x = x;
this.currTouch.y = y;
break;
} }
let listeners = this.listeners;
for (let i = 0; i < listeners.length; i++) {
if (listeners[i].down) listeners[i].down(this.currTouch.x, this.currTouch.y);
}
this.lastX = this.currTouch.x;
this.lastY = this.currTouch.y;
this.buttonDown = true;
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchend", (ev: TouchEvent) => { element.addEventListener("touchend", (ev: TouchEvent) => {
var touches = ev.changedTouches; if (this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (this.currTouch.identifier === touch.identifier) { var touch = touches[i];
let rect = element.getBoundingClientRect(); if (this.currTouch.identifier === touch.identifier) {
let x = this.currTouch.x = touch.clientX - rect.left; let rect = element.getBoundingClientRect();
let y = this.currTouch.y = touch.clientY - rect.top; let x = this.currTouch.x = touch.clientX - rect.left;
this.touchesPool.free(this.currTouch); let y = this.currTouch.y = touch.clientY - rect.top;
let listeners = this.listeners; this.touchesPool.free(this.currTouch);
for (let i = 0; i < listeners.length; i++) { let listeners = this.listeners;
if (listeners[i].up) listeners[i].up(x, y); for (let i = 0; i < listeners.length; i++) {
} if (listeners[i].up) listeners[i].up(x, y);
}
this.lastX = x; this.lastX = x;
this.lastY = y; this.lastY = y;
this.buttonDown = false; this.buttonDown = false;
this.currTouch = null; this.currTouch = null;
break; break;
}
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchcancel", (ev: TouchEvent) => { element.addEventListener("touchcancel", (ev: TouchEvent) => {
var touches = ev.changedTouches; if (this.currTouch) {
for (var i = 0; i < touches.length; i++) { var touches = ev.changedTouches;
var touch = touches[i]; for (var i = 0; i < touches.length; i++) {
if (this.currTouch.identifier === touch.identifier) { var touch = touches[i];
let rect = element.getBoundingClientRect(); if (this.currTouch.identifier === touch.identifier) {
let x = this.currTouch.x = touch.clientX - rect.left; let rect = element.getBoundingClientRect();
let y = this.currTouch.y = touch.clientY - rect.top; let x = this.currTouch.x = touch.clientX - rect.left;
this.touchesPool.free(this.currTouch); let y = this.currTouch.y = touch.clientY - rect.top;
let listeners = this.listeners; this.touchesPool.free(this.currTouch);
for (let i = 0; i < listeners.length; i++) { let listeners = this.listeners;
if (listeners[i].up) listeners[i].up(x, y); for (let i = 0; i < listeners.length; i++) {
} if (listeners[i].up) listeners[i].up(x, y);
}
this.lastX = x; this.lastX = x;
this.lastY = y; this.lastY = y;
this.buttonDown = false; this.buttonDown = false;
this.currTouch = null; this.currTouch = null;
break; break;
}
} }
} }
ev.preventDefault(); ev.preventDefault();
}, false); }, false);
element.addEventListener("touchmove", (ev: TouchEvent) => { element.addEventListener("touchmove", (ev: TouchEvent) => {
if (!this.currTouch) return; if (this.currTouch) {
var touches = ev.changedTouches;
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
if (this.currTouch.identifier === touch.identifier) {
let rect = element.getBoundingClientRect();
let x = touch.clientX - rect.left;
let y = touch.clientY - rect.top;
var touches = ev.changedTouches; let listeners = this.listeners;
for (var i = 0; i < touches.length; i++) { for (let i = 0; i < listeners.length; i++) {
var touch = touches[i]; if (listeners[i].dragged) listeners[i].dragged(x, y);
if (this.currTouch.identifier === touch.identifier) { }
let rect = element.getBoundingClientRect();
let x = touch.clientX - rect.left;
let y = touch.clientY - rect.top;
let listeners = this.listeners; this.lastX = this.currTouch.x = x;
for (let i = 0; i < listeners.length; i++) { this.lastY = this.currTouch.y = y;
if (listeners[i].dragged) listeners[i].dragged(x, y); break;
} }
this.lastX = this.currTouch.x = x;
this.lastY = this.currTouch.y = y;
break;
} }
} }
ev.preventDefault(); ev.preventDefault();