From d571a09b391e543e6c7b10c4cf3030988e002e9c Mon Sep 17 00:00:00 2001 From: 1ilit Date: Tue, 19 Sep 2023 15:50:24 +0300 Subject: [PATCH] janky fit window --- src/components/canvas.jsx | 27 ++++++++++----------------- src/components/control_panel.jsx | 29 +++++++++++++++++++++++++++-- src/components/sidebar.jsx | 2 +- 3 files changed, 38 insertions(+), 20 deletions(-) diff --git a/src/components/canvas.jsx b/src/components/canvas.jsx index 189fd9d..28fcfb5 100644 --- a/src/components/canvas.jsx +++ b/src/components/canvas.jsx @@ -15,7 +15,7 @@ import Note from "./note"; export default function Canvas(props) { const { tables, updateTable, relationships, addRelationship } = useContext(TableContext); - const { areas, setAreas, updateArea } = useContext(AreaContext); + const { areas, updateArea } = useContext(AreaContext); const { notes, updateNote } = useContext(NoteContext); const { settings, setSettings } = useContext(SettingsContext); const { setUndoStack, setRedoStack } = useContext(UndoRedoContext); @@ -118,8 +118,8 @@ export default function Canvas(props) { dragging.element === ObjectType.NONE && areaResize.id === -1 ) { - const dx = (e.clientX - panOffset.x) / settings.zoom; - const dy = (e.clientY - panOffset.y) / settings.zoom; + const dx = e.clientX - panOffset.x; + const dy = e.clientY - panOffset.y; setSettings((prev) => ({ ...prev, pan: { x: prev.pan.x + dx, y: prev.pan.y + dy }, @@ -169,20 +169,12 @@ export default function Canvas(props) { newHeight = initCoords.height + (mouseY - initCoords.mouseY); } - setAreas((prev) => - prev.map((a) => { - if (a.id === areaResize.id) { - return { - ...a, - x: newX, - y: newY, - width: newWidth, - height: newHeight, - }; - } - return a; - }) - ); + updateArea(areaResize.id, { + x: newX, + y: newY, + width: newWidth, + height: newHeight, + }); } }; @@ -379,6 +371,7 @@ export default function Canvas(props) { transform: `translate(${settings.pan.x}px, ${settings.pan.y}px) scale(${settings.zoom})`, transformOrigin: "top left", }} + id="diagram" > {areas.map((a) => ( setSettings((prev) => ({ ...prev, zoom: 1, pan: { x: 0, y: 0 } })); + const fitWindow = () => { + const diagram = document.getElementById("diagram").getBoundingClientRect(); + const canvas = document.getElementById("canvas").getBoundingClientRect(); + + const scaleX = canvas.width / diagram.width; + const scaleY = canvas.height / diagram.height; + + const scale = Math.min(scaleX, scaleY); + + const translateX = canvas.width / 2; + const translateY = canvas.height / 2; + + setSettings((prev) => ({ + ...prev, + zoom: scale, + pan: { x: translateX, y: translateY }, + })); + }; const menu = { File: { @@ -691,6 +709,7 @@ export default function ControlPanel(props) { }); useHotkeys("ctrl+alt+c, meta+alt+c", copyAsImage, { preventDefault: true }); useHotkeys("ctrl+r, meta+r", resetView, { preventDefault: true }); + useHotkeys("ctrl+alt+w, meta+alt+w", fitWindow, { preventDefault: true }); return (
@@ -700,11 +719,17 @@ export default function ControlPanel(props) { {layoutDropdown()} - Fit window + +
Fit window / Reset
+
Ctrl+Alt+W
+
{[0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0].map((e, i) => ( +