Touch event fixes

This commit is contained in:
Bill 2022-07-27 19:49:08 -04:00
parent 6a6d7f6947
commit 2b9f6b5634

View File

@ -4,38 +4,9 @@ import { GetRoomEngine } from './GetRoomEngine';
let didMouseMove = false; let didMouseMove = false;
let lastClick = 0; let lastClick = 0;
let clickCount = 0; let clickCount = 0;
let touchTimer: ReturnType<typeof setTimeout> = null;
export const DispatchTouchEvent = (event: TouchEvent, canvasId: number = 1, longTouch: boolean = false, altKey: boolean = false, ctrlKey: boolean = false, shiftKey: boolean = false) => export const DispatchTouchEvent = (event: TouchEvent, canvasId: number = 1, longTouch: boolean = false, altKey: boolean = false, ctrlKey: boolean = false, shiftKey: boolean = false) =>
{ {
let eventType = event.type;
if(longTouch) eventType = TouchEventType.TOUCH_LONG;
if(eventType === TouchEventType.TOUCH_END && !didMouseMove)
{
eventType = MouseEventType.MOUSE_CLICK;
if(lastClick)
{
clickCount = 1;
if(lastClick >= (Date.now() - 300)) clickCount++;
}
lastClick = Date.now();
if(clickCount === 2)
{
eventType = MouseEventType.DOUBLE_CLICK;
clickCount = 0;
lastClick = null;
}
}
if(touchTimer) clearTimeout(touchTimer);
let x = 0; let x = 0;
let y = 0; let y = 0;
@ -50,6 +21,32 @@ export const DispatchTouchEvent = (event: TouchEvent, canvasId: number = 1, long
x = event.changedTouches[0].clientX; x = event.changedTouches[0].clientX;
y = event.changedTouches[0].clientY; y = event.changedTouches[0].clientY;
} }
let eventType = event.type;
if(longTouch) eventType = TouchEventType.TOUCH_LONG;
if(eventType === MouseEventType.MOUSE_CLICK || eventType === TouchEventType.TOUCH_END)
{
eventType = MouseEventType.MOUSE_CLICK;
if(lastClick)
{
clickCount = 1;
if(lastClick >= (Date.now() - 300)) clickCount++;
}
lastClick = Date.now();
if(clickCount === 2)
{
if(!didMouseMove) eventType = MouseEventType.DOUBLE_CLICK;
clickCount = 0;
lastClick = null;
}
}
switch(eventType) switch(eventType)
{ {
@ -57,14 +54,7 @@ export const DispatchTouchEvent = (event: TouchEvent, canvasId: number = 1, long
break; break;
case MouseEventType.DOUBLE_CLICK: case MouseEventType.DOUBLE_CLICK:
break; break;
case TouchEventType.TOUCH_START: case TouchEventType.TOUCH_START:
touchTimer = setTimeout(() =>
{
if(didMouseMove) return;
DispatchTouchEvent(event, canvasId, true);
}, 300);
eventType = MouseEventType.MOUSE_DOWN; eventType = MouseEventType.MOUSE_DOWN;
didMouseMove = false; didMouseMove = false;
@ -83,5 +73,10 @@ export const DispatchTouchEvent = (event: TouchEvent, canvasId: number = 1, long
default: return; default: return;
} }
if (eventType === TouchEventType.TOUCH_START)
{
GetRoomEngine().dispatchMouseEvent(canvasId, x, y, eventType, altKey, ctrlKey, shiftKey, false);
}
GetRoomEngine().dispatchMouseEvent(canvasId, x, y, eventType, altKey, ctrlKey, shiftKey, false); GetRoomEngine().dispatchMouseEvent(canvasId, x, y, eventType, altKey, ctrlKey, shiftKey, false);
} }