|
@@ -416,7 +416,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
ref={this.handleCanvasRef}
|
|
ref={this.handleCanvasRef}
|
|
onContextMenu={this.handleCanvasContextMenu}
|
|
onContextMenu={this.handleCanvasContextMenu}
|
|
onPointerMove={this.handleCanvasPointerMove}
|
|
onPointerMove={this.handleCanvasPointerMove}
|
|
- onPointerUp={this.removePointer}
|
|
|
|
|
|
+ onPointerUp={this.handleCanvasPointerUp}
|
|
onPointerCancel={this.removePointer}
|
|
onPointerCancel={this.removePointer}
|
|
onTouchMove={this.handleTouchMove}
|
|
onTouchMove={this.handleTouchMove}
|
|
onPointerDown={this.handleCanvasPointerDown}
|
|
onPointerDown={this.handleCanvasPointerDown}
|
|
@@ -439,7 +439,7 @@ class App extends React.Component<AppProps, AppState> {
|
|
onPointerDown={this.handleCanvasPointerDown}
|
|
onPointerDown={this.handleCanvasPointerDown}
|
|
onDoubleClick={this.handleCanvasDoubleClick}
|
|
onDoubleClick={this.handleCanvasDoubleClick}
|
|
onPointerMove={this.handleCanvasPointerMove}
|
|
onPointerMove={this.handleCanvasPointerMove}
|
|
- onPointerUp={this.removePointer}
|
|
|
|
|
|
+ onPointerUp={this.handleCanvasPointerUp}
|
|
onPointerCancel={this.removePointer}
|
|
onPointerCancel={this.removePointer}
|
|
onTouchMove={this.handleTouchMove}
|
|
onTouchMove={this.handleTouchMove}
|
|
>
|
|
>
|
|
@@ -1523,28 +1523,6 @@ class App extends React.Component<AppProps, AppState> {
|
|
};
|
|
};
|
|
|
|
|
|
removePointer = (event: React.PointerEvent<HTMLElement> | PointerEvent) => {
|
|
removePointer = (event: React.PointerEvent<HTMLElement> | PointerEvent) => {
|
|
- this.lastPointerUp = event;
|
|
|
|
- if (this.isMobile) {
|
|
|
|
- const scenePointer = viewportCoordsToSceneCoords(
|
|
|
|
- { clientX: event.clientX, clientY: event.clientY },
|
|
|
|
- this.state,
|
|
|
|
- );
|
|
|
|
- const hitElement = this.getElementAtPosition(
|
|
|
|
- scenePointer.x,
|
|
|
|
- scenePointer.y,
|
|
|
|
- );
|
|
|
|
- this.hitLinkElement = this.getElementLinkAtPosition(
|
|
|
|
- scenePointer,
|
|
|
|
- hitElement,
|
|
|
|
- );
|
|
|
|
- }
|
|
|
|
- if (
|
|
|
|
- this.hitLinkElement &&
|
|
|
|
- !this.state.selectedElementIds[this.hitLinkElement.id]
|
|
|
|
- ) {
|
|
|
|
- this.redirectToLink();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
// remove touch handler for context menu on touch devices
|
|
// remove touch handler for context menu on touch devices
|
|
if (event.pointerType === "touch" && touchTimeout) {
|
|
if (event.pointerType === "touch" && touchTimeout) {
|
|
clearTimeout(touchTimeout);
|
|
clearTimeout(touchTimeout);
|
|
@@ -2879,6 +2857,34 @@ class App extends React.Component<AppProps, AppState> {
|
|
}
|
|
}
|
|
};
|
|
};
|
|
|
|
|
|
|
|
+ private handleCanvasPointerUp = (
|
|
|
|
+ event: React.PointerEvent<HTMLCanvasElement>,
|
|
|
|
+ ) => {
|
|
|
|
+ this.lastPointerUp = event;
|
|
|
|
+ if (this.isMobile) {
|
|
|
|
+ const scenePointer = viewportCoordsToSceneCoords(
|
|
|
|
+ { clientX: event.clientX, clientY: event.clientY },
|
|
|
|
+ this.state,
|
|
|
|
+ );
|
|
|
|
+ const hitElement = this.getElementAtPosition(
|
|
|
|
+ scenePointer.x,
|
|
|
|
+ scenePointer.y,
|
|
|
|
+ );
|
|
|
|
+ this.hitLinkElement = this.getElementLinkAtPosition(
|
|
|
|
+ scenePointer,
|
|
|
|
+ hitElement,
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ if (
|
|
|
|
+ this.hitLinkElement &&
|
|
|
|
+ !this.state.selectedElementIds[this.hitLinkElement.id]
|
|
|
|
+ ) {
|
|
|
|
+ this.redirectToLink();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ this.removePointer(event);
|
|
|
|
+ };
|
|
|
|
+
|
|
private maybeOpenContextMenuAfterPointerDownOnTouchDevices = (
|
|
private maybeOpenContextMenuAfterPointerDownOnTouchDevices = (
|
|
event: React.PointerEvent<HTMLCanvasElement>,
|
|
event: React.PointerEvent<HTMLCanvasElement>,
|
|
): void => {
|
|
): void => {
|