From 1bb4909438145431c540c5e6d650250a51c19095 Mon Sep 17 00:00:00 2001 From: Dariusz L Date: Sun, 29 Jun 2025 14:11:34 +0200 Subject: [PATCH] Remove CanvasState delegating methods from Canvas Removed delegating methods to CanvasState from Canvas.js and updated all references to use canvas.canvasState directly for state operations (undo, redo, saveStateToDB). Updated CanvasInteractions.js, CanvasIO.js, CanvasLayers.js, and CanvasView.js accordingly. Updated REFACTORING_GUIDE.md to reflect the completion of this refactor. --- js/Canvas.js | 6 +++--- js/CanvasIO.js | 2 +- js/CanvasInteractions.js | 18 +++++++++--------- js/CanvasLayers.js | 2 +- js/CanvasView.js | 4 ++-- js/REFACTORING_GUIDE.md | 9 ++++++++- 6 files changed, 24 insertions(+), 17 deletions(-) diff --git a/js/Canvas.js b/js/Canvas.js index 91908bc..55cde9f 100644 --- a/js/Canvas.js +++ b/js/Canvas.js @@ -469,11 +469,11 @@ export class Canvas { * - this.canvasInteractions dla obsługi interakcji * - this.canvasIO dla operacji I/O * - this.canvasState dla zarządzania stanem + * + * UWAGA: Metody delegujące do CanvasState zostały usunięte. + * Używaj: canvas.canvasState.saveStateToDB(), canvas.canvasState.undo(), etc. */ - // Delegacje do CanvasState - async saveStateToDB(immediate = false) { return this.canvasState.saveStateToDB(immediate); } - // Delegacje do CanvasLayers async copySelectedLayers() { return this.canvasLayers.copySelectedLayers(); } async handlePaste(addMode) { return this.canvasLayers.handlePaste(addMode); } diff --git a/js/CanvasIO.js b/js/CanvasIO.js index d457037..52e3a5d 100644 --- a/js/CanvasIO.js +++ b/js/CanvasIO.js @@ -46,7 +46,7 @@ export class CanvasIO { log.warn(`Node ${this.canvas.node.id} has no layers, creating empty canvas`); return Promise.resolve(true); } - await this.canvas.saveStateToDB(true); + await this.canvas.canvasState.saveStateToDB(true); const nodeId = this.canvas.node.id; const delay = (nodeId % 10) * 50; if (delay > 0) { diff --git a/js/CanvasInteractions.js b/js/CanvasInteractions.js index 0e8066b..206b395 100644 --- a/js/CanvasInteractions.js +++ b/js/CanvasInteractions.js @@ -176,7 +176,7 @@ export class CanvasInteractions { if (interactionEnded) { this.canvas.saveState(); - this.canvas.saveStateToDB(true); + this.canvas.canvasState.saveStateToDB(true); } } @@ -297,16 +297,16 @@ export class CanvasInteractions { e.preventDefault(); e.stopPropagation(); if (e.shiftKey) { - this.canvas.redo(); + this.canvas.canvasState.redo(); } else { - this.canvas.undo(); + this.canvas.canvasState.undo(); } return; } if (e.key.toLowerCase() === 'y') { e.preventDefault(); e.stopPropagation(); - this.canvas.redo(); + this.canvas.canvasState.redo(); return; } } @@ -324,30 +324,30 @@ export class CanvasInteractions { e.preventDefault(); e.stopPropagation(); if (e.shiftKey) { - this.canvas.redo(); + this.canvas.canvasState.redo(); } else { - this.canvas.undo(); + this.canvas.canvasState.undo(); } return; } if (e.key.toLowerCase() === 'y') { e.preventDefault(); e.stopPropagation(); - this.canvas.redo(); + this.canvas.canvasState.redo(); return; } if (e.key.toLowerCase() === 'c') { if (this.canvas.selectedLayers.length > 0) { e.preventDefault(); e.stopPropagation(); - this.canvas.copySelectedLayers(); + this.canvas.canvasLayers.copySelectedLayers(); } return; } if (e.key.toLowerCase() === 'v') { e.preventDefault(); e.stopPropagation(); - this.canvas.handlePaste('mouse'); + this.canvas.canvasLayers.handlePaste('mouse'); return; } } diff --git a/js/CanvasLayers.js b/js/CanvasLayers.js index ae21057..785bcc0 100644 --- a/js/CanvasLayers.js +++ b/js/CanvasLayers.js @@ -359,7 +359,7 @@ export class CanvasLayers { this.canvas.render(); if (saveHistory) { - this.canvas.saveStateToDB(); + this.canvas.canvasState.saveStateToDB(); } } diff --git a/js/CanvasView.js b/js/CanvasView.js index 22a2ab6..6f77708 100644 --- a/js/CanvasView.js +++ b/js/CanvasView.js @@ -749,14 +749,14 @@ async function createCanvasWidget(node, widget, app) { textContent: "Undo", title: "Undo last action", disabled: true, - onclick: () => canvas.undo() + onclick: () => canvas.canvasState.undo() }), $el("button.painter-button", { id: `redo-button-${node.id}`, textContent: "Redo", title: "Redo last undone action", disabled: true, - onclick: () => canvas.redo() + onclick: () => canvas.canvasState.redo() }), ]), $el("div.painter-separator"), diff --git a/js/REFACTORING_GUIDE.md b/js/REFACTORING_GUIDE.md index 1b0691f..ef8bd22 100644 --- a/js/REFACTORING_GUIDE.md +++ b/js/REFACTORING_GUIDE.md @@ -146,7 +146,7 @@ canvas.imageReferenceManager.manualGarbageCollection() ### 🎯 Kolejne kroki 1. **Monitorowanie działania** - sprawdzenie czy wszystkie funkcje działają poprawnie ✅ -2. **Usunięcie metod delegujących** - w przyszłych wersjach (po okresie przejściowym) +2. **Usunięcie metod delegujących do CanvasState** - zakończone ✅ 3. **Rozszerzenie dokumentacji** - dla poszczególnych modułów ✅ 4. **Dodanie testów jednostkowych** - dla modułów @@ -168,6 +168,13 @@ canvas.imageReferenceManager.manualGarbageCollection() - Poprawiono wywołania w CanvasView.js - `canvas.rotateLayer()` → `canvas.canvasLayers.rotateLayer()` - Wszystkie moduły używają teraz spójnej konwencji nazewnictwa +4. **Usunięcie metod delegujących do CanvasState** ✅ + - Usunięto metodę delegującą `saveStateToDB()` z Canvas.js + - Zaktualizowano wszystkie wywołania w CanvasView.js: `canvas.undo()` → `canvas.canvasState.undo()` + - Zaktualizowano wszystkie wywołania w CanvasInteractions.js dla operacji undo/redo i copy/paste + - Zaktualizowano wywołania w CanvasLayers.js i CanvasIO.js + - Wszystkie operacje na stanie używają teraz bezpośrednio modułu `canvasState` + ## Uwagi dla deweloperów - ✅ **Refaktoryzacja zakończona** - wszystkie pliki zostały zaktualizowane