mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-10 02:13:58 +01:00
75 lines
No EOL
2 KiB
JavaScript
75 lines
No EOL
2 KiB
JavaScript
export class ToolManager {
|
|
|
|
constructor(viewer, defaultTool) {
|
|
this.defaultTool = defaultTool;
|
|
this.tool = defaultTool;
|
|
this.viewer = viewer;
|
|
const canvas = viewer.canvas;
|
|
canvas.addEventListener('mousemove', (e) => {
|
|
e.preventDefault();
|
|
//e.stopPropagation(); // allow propagation for move in sake of dynamic layout
|
|
this.tool.mousemove(e);
|
|
}, false);
|
|
canvas.addEventListener('mousedown', (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
this.tool.mousedown(e);
|
|
}, false);
|
|
canvas.addEventListener('mouseup', (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
this.tool.mouseup(e);
|
|
}, false);
|
|
canvas.addEventListener('mousewheel', (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
let tool = this.tool;
|
|
if (tool.mousewheel === undefined) {
|
|
tool = this.defaultTool;
|
|
}
|
|
if (tool.mousewheel !== undefined) {
|
|
tool.mousewheel(e)
|
|
}
|
|
}, false);
|
|
canvas.addEventListener('dblclick', (e) => {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
this.tool.dblclick(e);
|
|
}, false);
|
|
|
|
window.addEventListener("keydown", (e) => {
|
|
this.tool.keydown(e);
|
|
if (e.keyCode == 27) {
|
|
this.releaseControl();
|
|
} else if (e.keyCode == 46 || e.keyCode == 8) {
|
|
var selection = viewer.selected.slice();
|
|
viewer.deselectAll();
|
|
for (var i = 0; i < selection.length; i++) {
|
|
viewer.remove(selection[i]);
|
|
}
|
|
viewer.refresh();
|
|
}
|
|
}, false);
|
|
window.addEventListener("keypress", (e) => {
|
|
this.tool.keydown(e);
|
|
}, false);
|
|
window.addEventListener("keyup", (e) => {
|
|
this.tool.keydown(e);
|
|
}, false);
|
|
}
|
|
|
|
takeControl(tool) {
|
|
this.tool.cleanup();
|
|
this.switchTool(tool);
|
|
this.tool.restart();
|
|
}
|
|
|
|
switchTool(tool) {
|
|
this.tool = tool;
|
|
this.viewer.bus.dispatch("tool-change");
|
|
}
|
|
|
|
releaseControl() {
|
|
this.takeControl(this.defaultTool);
|
|
}
|
|
} |