Delegate layer resize and rotate to CanvasLayers

Moved the resizeLayer and rotateLayer logic from Canvas.js to CanvasLayers.js, improving modularity and consistency. Updated REFACTORING_GUIDE.md to reflect these changes and document the current architecture and status.
This commit is contained in:
Dariusz L
2025-06-29 13:47:08 +02:00
parent b4a662b036
commit 22627b7532
3 changed files with 62 additions and 18 deletions

View File

@@ -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() {

View File

@@ -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];

View File

@@ -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()` | ✅ |