Skip to content

Commit caad070

Browse files
authored
Merge pull request #34 from Kitware/canvas-prevent-context-menu
prevent context menu on the canvas and focus when clicked, or mouse enters the canvas
2 parents 99d4382 + 562716e commit caad070

2 files changed

Lines changed: 38 additions & 3 deletions

File tree

src/core/canvasEventListeners.js

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
/**
2+
* Prevent default context menu and focus canvas on click and mouseenter.
3+
* @param {Event} event
4+
*/
5+
function handleEvent(event) {
6+
if (event.type === "contextmenu") {
7+
event.preventDefault();
8+
} else if (event.type === "click" || event.type === "mouseenter") {
9+
event.currentTarget.focus();
10+
}
11+
}
12+
13+
const eventTypes = ["contextmenu", "click", "mouseenter"];
14+
15+
/**
16+
* Add event listeners to the canvas element to prevent default context menu and focus canvas on click and mouseenter.
17+
* @param {HTMLCanvasElement} canvas
18+
*/
19+
export function addCanvasEventListeners(canvas) {
20+
if (!canvas) {
21+
return;
22+
}
23+
eventTypes.forEach(eventType => canvas.addEventListener(eventType, handleEvent));
24+
}
25+
26+
/**
27+
* Remove event listeners that were installed in `addCanvasEventListeners`.
28+
* @param {HTMLCanvasElement} canvas
29+
*/
30+
export function removeCanvasEventListeners(canvas) {
31+
if (!canvas) {
32+
return;
33+
}
34+
eventTypes.forEach(eventType => canvas.removeEventListener(eventType, handleEvent));
35+
}

src/remote.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import "./style.css";
22

33
import { VtkWASMLoader } from "./wasmLoader";
44
import { createVtkObjectProxy } from "./core/proxy";
5+
import { addCanvasEventListeners, removeCanvasEventListeners } from "./core/canvasEventListeners";
56

67
// url => loader instance
78
const WASM_LOADERS = {};
@@ -496,9 +497,7 @@ export class RemoteSession {
496497
canvas = document.createElement("canvas");
497498
canvas.setAttribute("class", canvasSelector.substring(1));
498499
canvas.setAttribute("tabindex", "0");
499-
// @contextmenu.prevent
500-
// @click="canvas.focus()"
501-
// @mouseenter="canvas.focus()"
500+
addCanvasEventListeners(canvas);
502501
}
503502

504503
targetElement.appendChild(canvas);
@@ -514,6 +513,7 @@ export class RemoteSession {
514513
const canvasSelector = this.getCanvasSelector(renderWindowId);
515514
const canvas = document.querySelector(canvasSelector);
516515
if (canvas) {
516+
removeCanvasEventListeners(canvas);
517517
this.offlineCanvasContainer.appendChild(canvas);
518518
}
519519
}

0 commit comments

Comments
 (0)