[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;
buttonDown: boolean;
currTouch: Touch;
touchesPool: Pool<Touch>;
private listeners;
touchesPool: Pool<Touch>;
constructor(element: HTMLElement);
private setupCallbacks;
addListener(listener: InputListener): void;

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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

View File

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

File diff suppressed because one or more lines are too long

View File

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