From ed96766ea8962a289675b5ae379dc7a2d3075171 Mon Sep 17 00:00:00 2001 From: Leopoldadmin Date: Mon, 22 Jun 2026 07:18:31 +0000 Subject: [PATCH] feat(canvas): Create LayerManager for layer rendering order, visibility/lock states --- frontend/src/canvas/LayerManager.ts | 62 +++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 frontend/src/canvas/LayerManager.ts diff --git a/frontend/src/canvas/LayerManager.ts b/frontend/src/canvas/LayerManager.ts new file mode 100644 index 0000000..019f805 --- /dev/null +++ b/frontend/src/canvas/LayerManager.ts @@ -0,0 +1,62 @@ +type Layer = { + id: string; + name: string; + visible: boolean; + locked: boolean; +}; + +export class LayerManager { + private layers: Layer[] = []; + + public addLayer(layer: Layer): void { + this.layers.push(layer); + } + + public removeLayer(id: string): void { + const index = this.layers.findIndex(layer => layer.id === id); + if (index !== -1) { + this.layers.splice(index, 1); + } + } + + public updateLayer(layer: Layer): void { + const index = this.layers.findIndex(l => l.id === layer.id); + if (index !== -1) { + this.layers[index] = layer; + } + } + + public getLayer(id: string): Layer | undefined { + return this.layers.find(layer => layer.id === id); + } + + public getLayers(): Layer[] { + return this.layers; + } + + public getVisibleLayers(): Layer[] { + return this.layers.filter(layer => layer.visible && !layer.locked); + } + + public setVisible(id: string, visible: boolean): void { + const layer = this.getLayer(id); + if (layer) { + layer.visible = visible; + } + } + + public setLocked(id: string, locked: boolean): void { + const layer = this.getLayer(id); + if (layer) { + layer.locked = locked; + } + } + + public moveLayer(id: string, newIndex: number): void { + const index = this.layers.findIndex(layer => layer.id === id); + if (index !== -1) { + const [layer] = this.layers.splice(index, 1); + this.layers.splice(newIndex, 0, layer); + } + } +}