Fix panning
This commit is contained in:
parent
4ec9f3f55b
commit
982d2daa11
@ -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) => (
|
||||||
|
@ -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,
|
||||||
|
@ -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([]);
|
||||||
|
Loading…
Reference in New Issue
Block a user