diff --git a/js/Canvas.js b/js/Canvas.js index 3f05401..91908bc 100644 --- a/js/Canvas.js +++ b/js/Canvas.js @@ -482,21 +482,8 @@ export class Canvas { } moveLayerUp() { return this.canvasLayers.moveLayerUp(); } moveLayerDown() { return this.canvasLayers.moveLayerDown(); } - resizeLayer(scale) { - this.selectedLayers.forEach(layer => { - layer.width *= scale; - layer.height *= scale; - }); - this.render(); - this.saveState(); - } - rotateLayer(angle) { - this.selectedLayers.forEach(layer => { - layer.rotation += angle; - }); - this.render(); - this.saveState(); - } + resizeLayer(scale) { return this.canvasLayers.resizeLayer(scale); } + rotateLayer(angle) { return this.canvasLayers.rotateLayer(angle); } getLayerAtPosition(worldX, worldY) { return this.canvasLayers.getLayerAtPosition(worldX, worldY); } getHandles(layer) { return this.canvasLayers.getHandles(layer); } getHandleAtPosition(worldX, worldY) { return this.canvasLayers.getHandleAtPosition(worldX, worldY); } @@ -504,9 +491,9 @@ export class Canvas { async mirrorVertical() { return this.canvasLayers.mirrorVertical(); } async getLayerImageData(layer) { return this.canvasLayers.getLayerImageData(layer); } showBlendModeMenu(x, y) { return this.canvasLayers.showBlendModeMenu(x, y); } + // Delegacje do CanvasInteractions handleMouseMove(e) { this.canvasInteractions.handleMouseMove(e); } - // Delegacje do ImageReferenceManager async runGarbageCollection() { diff --git a/js/CanvasLayers.js b/js/CanvasLayers.js index 1b30120..7546b70 100644 --- a/js/CanvasLayers.js +++ b/js/CanvasLayers.js @@ -198,6 +198,35 @@ export class CanvasLayers { this.canvasLayers.saveState(); } + /** + * Zmienia rozmiar wybranych warstw + * @param {number} scale - Skala zmiany rozmiaru + */ + resizeLayer(scale) { + if (this.canvasLayers.selectedLayers.length === 0) return; + + this.canvasLayers.selectedLayers.forEach(layer => { + layer.width *= scale; + layer.height *= scale; + }); + this.canvasLayers.render(); + this.canvasLayers.saveState(); + } + + /** + * Obraca wybrane warstwy + * @param {number} angle - Kąt obrotu w stopniach + */ + rotateLayer(angle) { + if (this.canvasLayers.selectedLayers.length === 0) return; + + this.canvasLayers.selectedLayers.forEach(layer => { + layer.rotation += angle; + }); + this.canvasLayers.render(); + this.canvasLayers.saveState(); + } + getLayerAtPosition(worldX, worldY) { for (let i = this.canvasLayers.layers.length - 1; i >= 0; i--) { const layer = this.canvasLayers.layers[i]; diff --git a/js/REFACTORING_GUIDE.md b/js/REFACTORING_GUIDE.md index dc329b6..35049d0 100644 --- a/js/REFACTORING_GUIDE.md +++ b/js/REFACTORING_GUIDE.md @@ -145,17 +145,45 @@ canvas.imageReferenceManager.manualGarbageCollection() ### 🎯 Kolejne kroki -1. **Monitorowanie działania** - sprawdzenie czy wszystkie funkcje działają poprawnie +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) -3. **Rozszerzenie dokumentacji** - dla poszczególnych modułów +3. **Rozszerzenie dokumentacji** - dla poszczególnych modułów ✅ 4. **Dodanie testów jednostkowych** - dla modułów +### 🔧 Ostatnie poprawki (2025-06-29) + +1. **Dodano brakujące metody w CanvasLayers.js** ✅ + - `resizeLayer(scale)` - zmienia rozmiar wybranych warstw + - `rotateLayer(angle)` - obraca wybrane warstwy + - Poprawiono delegację z Canvas.js do CanvasLayers.js + +2. **Weryfikacja spójności** ✅ + - Wszystkie delegacje w Canvas.js wskazują na istniejące metody w modułach + - CanvasView.js używa nowego podejścia modułowego + - Dokumentacja została zaktualizowana + ## Uwagi dla deweloperów - ✅ **Refaktoryzacja zakończona** - wszystkie pliki zostały zaktualizowane - ✅ **Nowy kod** używa modułów bezpośrednio zgodnie z wzorcem fasady +- ✅ **Wszystkie delegacje** wskazują na istniejące metody w modułach - ⚠️ **Metody delegujące** są zachowane dla kompatybilności, ale oznaczone jako tymczasowe - 📚 **Dokumentacja** została zaktualizowana w tym przewodniku - 🔄 **Kompatybilność** z istniejącym kodem jest zachowana **Refaktoryzacja została zakończona pomyślnie!** System jest gotowy do dalszego rozwoju z lepszą architekturą opartą na wzorcu fasady. + +### 📋 Mapowanie kompletnych funkcjonalności + +| Funkcjonalność | Moduł | Metoda | Status | +|----------------|-------|--------|--------| +| Dodawanie warstw | `canvasLayers` | `addLayerWithImage()` | ✅ | +| Kopiowanie/wklejanie | `canvasLayers` | `copySelectedLayers()`, `handlePaste()` | ✅ | +| Przesuwanie warstw | `canvasLayers` | `moveLayerUp()`, `moveLayerDown()` | ✅ | +| Transformacje | `canvasLayers` | `resizeLayer()`, `rotateLayer()` | ✅ | +| Odbicia lustrzane | `canvasLayers` | `mirrorHorizontal()`, `mirrorVertical()` | ✅ | +| Obsługa interakcji | `canvasInteractions` | `handleMouseMove()`, `handleKeyDown()` | ✅ | +| Zarządzanie stanem | `canvasState` | `saveState()`, `undo()`, `redo()` | ✅ | +| Operacje I/O | `canvasIO` | `importLatestImage()`, `sendDataViaWebSocket()` | ✅ | +| Renderowanie | `canvasRenderer` | `render()` | ✅ | +| Zarządzanie pamięcią | `imageReferenceManager` | `manualGarbageCollection()` | ✅ |