diff --git a/src/components/EditorCanvas/Canvas.jsx b/src/components/EditorCanvas/Canvas.jsx index 8287fc0..c15cc05 100644 --- a/src/components/EditorCanvas/Canvas.jsx +++ b/src/components/EditorCanvas/Canvas.jsx @@ -436,24 +436,43 @@ export default function Canvas() { "wheel", (e) => { e.preventDefault(); - // How "eager" the viewport is to - // center the cursor's coordinates - const eagernessFactor = 0.05; - setTransform((prev) => ({ - pan: { - x: - prev.pan.x - - (pointer.spaces.diagram.x - prev.pan.x) * - eagernessFactor * - Math.sign(e.deltaY), - y: - prev.pan.y - - (pointer.spaces.diagram.y - prev.pan.y) * - eagernessFactor * - Math.sign(e.deltaY), - }, - zoom: e.deltaY <= 0 ? prev.zoom * 1.05 : prev.zoom / 1.05, - })); + + if (e.ctrlKey) { + // How "eager" the viewport is to + // center the cursor's coordinates + const eagernessFactor = 0.05; + setTransform((prev) => ({ + pan: { + x: + prev.pan.x - + (pointer.spaces.diagram.x - prev.pan.x) * + eagernessFactor * + Math.sign(e.deltaY), + y: + prev.pan.y - + (pointer.spaces.diagram.y - prev.pan.y) * + eagernessFactor * + Math.sign(e.deltaY), + }, + zoom: e.deltaY <= 0 ? prev.zoom * 1.05 : prev.zoom / 1.05, + })); + } else if (e.shiftKey) { + setTransform((prev) => ({ + ...prev, + pan: { + ...prev.pan, + x: prev.pan.x + e.deltaY / prev.zoom, + }, + })); + } else { + setTransform((prev) => ({ + ...prev, + pan: { + ...prev.pan, + y: prev.pan.y + e.deltaY / prev.zoom, + }, + })); + } }, canvasRef, { passive: false }, diff --git a/src/data/shortcuts.js b/src/data/shortcuts.js index 38cc673..eaf3c03 100644 --- a/src/data/shortcuts.js +++ b/src/data/shortcuts.js @@ -42,7 +42,9 @@ export const shortcuts = [ title: "Reset view", description: "Resetting view will set diagram pan to (0, 0).", }, - { shortcut: "CTRL+UP / Wheel up", title: "Zoom in" }, - { shortcut: "CTRL+DOWN / Wheel down", title: "Zoom out" }, + { shortcut: "CTRL+UP / CTRL+Wheel up", title: "Zoom in" }, + { shortcut: "CTRL+DOWN / CTRL+Wheel down", title: "Zoom out" }, + { shortcut: "Wheel up / Wheel down", title: "Pan Y" }, + { shortcut: "SHIFT+Wheel up / SHIFT+Wheel down", title: "Pan X" }, { shortcut: "CTRL+H", title: "Open shortcuts" }, ];