Fix panning

This commit is contained in:
1ilit 2023-09-19 15:49:48 +03:00
parent 4ec9f3f55b
commit 982d2daa11
3 changed files with 15 additions and 32 deletions

View File

@ -110,8 +110,8 @@ export default function Canvas(props) {
setLine({ setLine({
...line, ...line,
endX: (e.clientX - offsetX) / settings.zoom, endX: (e.clientX - offsetX) / settings.zoom - settings.pan.x,
endY: (e.clientY - offsetY) / settings.zoom, endY: (e.clientY - offsetY) / settings.zoom - settings.pan.y,
}); });
} else if ( } else if (
panning && panning &&
@ -120,29 +120,11 @@ export default function Canvas(props) {
) { ) {
const dx = (e.clientX - panOffset.x) / settings.zoom; const dx = (e.clientX - panOffset.x) / settings.zoom;
const dy = (e.clientY - panOffset.y) / settings.zoom; const dy = (e.clientY - panOffset.y) / settings.zoom;
setSettings((prev) => ({
...prev,
pan: { x: prev.pan.x + dx, y: prev.pan.y + dy },
}));
setPanOffset({ x: e.clientX, y: e.clientY }); setPanOffset({ x: e.clientX, y: e.clientY });
setTables((prev) =>
prev.map((t) => ({
...t,
x: t.x + dx,
y: t.y + dy,
}))
);
setRelationships(
relationships.map((r) => ({
...r,
startX: tables[r.startTableId].x + 15,
startY: tables[r.startTableId].y + r.startFieldId * 36 + 69,
endX: tables[r.endTableId].x + 15,
endY: tables[r.endTableId].y + r.endFieldId * 36 + 69,
}))
);
setAreas((prev) => prev.map((t) => ({ ...t, x: t.x + dx, y: t.y + dy })));
setNotes((prev) => prev.map((n) => ({ ...n, x: n.x + dx, y: n.y + dy })));
} else if (dragging.element === ObjectType.TABLE && dragging.id >= 0) { } else if (dragging.element === ObjectType.TABLE && dragging.id >= 0) {
const updatedTables = tables.map((t) => { const updatedTables = tables.map((t) => {
if (t.id === dragging.id) { if (t.id === dragging.id) {
@ -385,8 +367,8 @@ export default function Canvas(props) {
)} )}
<g <g
style={{ style={{
transform: `scale(${settings.zoom})`, transform: `translate(${settings.pan.x}px, ${settings.pan.y}px) scale(${settings.zoom})`,
transformOrigin: "0 0", transformOrigin: "top left",
}} }}
> >
{areas.map((a) => ( {areas.map((a) => (

View File

@ -113,8 +113,8 @@ export default function ControlPanel(props) {
{ {
id: prev.length, id: prev.length,
name: `table_${prev.length}`, name: `table_${prev.length}`,
x: 0, x: -settings.pan.x,
y: 0, y: -settings.pan.y,
fields: [ fields: [
{ {
name: "id", name: "id",
@ -141,8 +141,8 @@ export default function ControlPanel(props) {
{ {
id: prev.length, id: prev.length,
name: `area_${prev.length}`, name: `area_${prev.length}`,
x: 0, x: -settings.pan.x,
y: 0, y: -settings.pan.y,
width: 200, width: 200,
height: 200, height: 200,
color: defaultTableTheme, color: defaultTableTheme,
@ -155,8 +155,8 @@ export default function ControlPanel(props) {
...prev, ...prev,
{ {
id: prev.length, id: prev.length,
x: 0, x: -settings.pan.x,
y: 0, y: -settings.pan.y,
title: `note_${prev.length}`, title: `note_${prev.length}`,
content: "", content: "",
color: defaultNoteTheme, color: defaultNoteTheme,

View File

@ -41,6 +41,7 @@ export default function Editor(props) {
strictMode: false, strictMode: false,
showFieldSummary: true, showFieldSummary: true,
zoom: 1, zoom: 1,
pan: {x: 0, y: 0},
showGrid: true, showGrid: true,
}); });
const [undoStack, setUndoStack] = useState([]); const [undoStack, setUndoStack] = useState([]);