fix: Bericht öffnen — Canvas war weiß obwohl Seiten Bilder hatten
All checks were successful
Deploy bericht / deploy (push) Successful in 1s
All checks were successful
Deploy bericht / deploy (push) Successful in 1s
Drei Probleme behoben: 1. Wenn fabric_json existierte aber leer oder ohne Objekte war, wurde rerenderCurrent() NICHT aufgerufen und das Canvas blieb leer. 2. Canvas-Dimensionen wurden nur im fabric_json-Zweig gesetzt — bei altem Berichten ohne JSON fehlte der Init und das Canvas war 1x1. 3. loadFromJSON-Callback hat zwar das Promise resolved, aber die nachfolgende applyTool() für Tool-Locking fehlte, dadurch waren die geladenen Bilder nach Reload immer ziehbar. Fix: - Canvas-Dimensionen IMMER zuerst auf A4 setzen - Nur laden wenn fabric_json tatsächlich Objekte enthält - Sonst (oder bei Parse-Fehler) Fallback auf rerenderCurrent() das das Quell-Bild frisch als fabric.Image lädt - applyTool() nach loadFromJSON damit Tool-Lock-Status korrekt ist Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> [deploy]
This commit is contained in:
parent
9e96063bbc
commit
e0ae936811
1 changed files with 31 additions and 18 deletions
43
js/editor.js
43
js/editor.js
|
|
@ -161,29 +161,42 @@
|
||||||
|
|
||||||
await loadPageMeta(); // setzt currentPageRotation + ggf. loadedFabricJson
|
await loadPageMeta(); // setzt currentPageRotation + ggf. loadedFabricJson
|
||||||
|
|
||||||
if (loadedFabricJson) {
|
// Canvas-Dimensionen IMMER auf A4 setzen
|
||||||
// Existierender State wird geladen — enthält bereits Bild, Shapes, Text etc.
|
|
||||||
try {
|
|
||||||
const parsed = (typeof loadedFabricJson === 'string') ? JSON.parse(loadedFabricJson) : loadedFabricJson;
|
|
||||||
// Canvas-Dimensionen aus dem geladenen JSON übernehmen und skalieren
|
|
||||||
const target = getTargetCanvasWidth();
|
const target = getTargetCanvasWidth();
|
||||||
const pageAspect = 1 / 1.414;
|
const pageAspect = 1 / 1.414;
|
||||||
const isLandscape = currentPageRotation === 90 || currentPageRotation === 270;
|
const isLandscape = currentPageRotation === 90 || currentPageRotation === 270;
|
||||||
pdfCanvas.width = target;
|
pdfCanvas.width = target;
|
||||||
pdfCanvas.height = isLandscape ? Math.round(target * pageAspect) : Math.round(target / pageAspect);
|
pdfCanvas.height = isLandscape ? Math.round(target * pageAspect) : Math.round(target / pageAspect);
|
||||||
const ctx = pdfCanvas.getContext('2d');
|
const pctx = pdfCanvas.getContext('2d');
|
||||||
ctx.fillStyle = '#ffffff';
|
pctx.fillStyle = '#ffffff';
|
||||||
ctx.fillRect(0, 0, pdfCanvas.width, pdfCanvas.height);
|
pctx.fillRect(0, 0, pdfCanvas.width, pdfCanvas.height);
|
||||||
resizeFabricToCanvas();
|
resizeFabricToCanvas();
|
||||||
await new Promise(res => {
|
|
||||||
fabricCanvas.loadFromJSON(parsed, () => { fabricCanvas.renderAll(); res(); });
|
let jsonHasObjects = false;
|
||||||
|
if (loadedFabricJson) {
|
||||||
|
try {
|
||||||
|
const parsed = (typeof loadedFabricJson === 'string') ? JSON.parse(loadedFabricJson) : loadedFabricJson;
|
||||||
|
jsonHasObjects = parsed && Array.isArray(parsed.objects) && parsed.objects.length > 0;
|
||||||
|
if (jsonHasObjects) {
|
||||||
|
// WICHTIG: loadFromJSON ist für fabric.Image async — Bilder kommen erst
|
||||||
|
// im Callback ins Canvas. Wir warten auf den Callback.
|
||||||
|
await new Promise((res) => {
|
||||||
|
fabricCanvas.loadFromJSON(parsed, () => {
|
||||||
|
fabricCanvas.renderAll();
|
||||||
|
res();
|
||||||
});
|
});
|
||||||
} catch (e) {
|
});
|
||||||
console.warn('Fabric-JSON restore fehlgeschlagen, fallback auf Neu-Render:', e);
|
// Re-apply tool state: wenn aktuelles Tool nicht select ist, Objekte sperren
|
||||||
await rerenderCurrent();
|
applyTool();
|
||||||
}
|
}
|
||||||
} else {
|
} catch (e) {
|
||||||
// Erster Besuch der Seite: Quellbild frisch als Fabric-Image laden
|
console.warn('Fabric-JSON restore fehlgeschlagen:', e);
|
||||||
|
jsonHasObjects = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!jsonHasObjects) {
|
||||||
|
// Kein gespeicherter State → Quellbild frisch als Fabric-Image laden
|
||||||
await rerenderCurrent();
|
await rerenderCurrent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue