diff --git a/src/pages/editor/components/EditorCanvas.tsx b/src/pages/editor/components/EditorCanvas.tsx index 7bc5464..82cfcbd 100644 --- a/src/pages/editor/components/EditorCanvas.tsx +++ b/src/pages/editor/components/EditorCanvas.tsx @@ -6,6 +6,7 @@ import { useDrawingHandlers } from "./canvas/useDrawingHandlers"; import { useStageSize } from "./canvas/useStageSize"; import { useKeyboardMovement } from "./canvas/useKeyboardMovement"; import ObjectRenderer from "./canvas/ObjectRenderer"; +import { getMaskForObject } from "./canvas/maskUtils"; import CellEditor from "@/components/CellEditor"; import ZoomControls from "./ZoomControls"; @@ -110,7 +111,16 @@ const EditorCanvas = () => { const timeoutId = setTimeout(() => { if (!layerRef.current || !transformerRef.current) return; - const node = layerRef.current.findOne(`#${selectedObjectId}`); + // Check if object is masked - if so, find parent Group + const maskShape = getMaskForObject(selectedObject, objects); + let node: Konva.Node | undefined; + + if (maskShape) { + node = layerRef.current.findOne(`.masked-group-${selectedObjectId}`); + } else { + node = layerRef.current.findOne(`#${selectedObjectId}`); + } + if (node && transformerRef.current) { transformerRef.current.nodes([node]); transformerRef.current.getLayer()?.batchDraw(); @@ -169,7 +179,7 @@ const EditorCanvas = () => { onMouseMove={handleStageMouseMove} onMouseUp={handleStageMouseUp} > - + { fill="#ffffff" listening={false} /> - {objects.map((obj) => ( - - ))} + + + + {objects.map((obj) => { + const maskShape = getMaskForObject(obj, objects); + + return ( + + ); + })} + {selectedObjectId && (() => { const selectedObject = objects.find(obj => obj.id === selectedObjectId); const isText = selectedObject?.type === "text"; diff --git a/src/pages/editor/components/LayersList.tsx b/src/pages/editor/components/LayersList.tsx index c7897e8..bbe2746 100644 --- a/src/pages/editor/components/LayersList.tsx +++ b/src/pages/editor/components/LayersList.tsx @@ -25,8 +25,12 @@ const LayersList = () => { } } - const getLayerLabel = (type: string) => { - switch (type) { + const getLayerLabel = (obj: typeof objects[0]) => { + if (obj.isMask) { + return 'ماسک' + } + + switch (obj.type) { case 'text': return 'متن' case 'rectangle': @@ -60,7 +64,7 @@ const LayersList = () => { )} >
{getLayerIcon(obj.type)}
-
{getLayerLabel(obj.type)}
+
{getLayerLabel(obj)}