diff --git a/src/components/Canvas.jsx b/src/components/Canvas.jsx index 27bb0af..acd5529 100644 --- a/src/components/Canvas.jsx +++ b/src/components/Canvas.jsx @@ -13,7 +13,7 @@ const Canvas = () => { const { openSetting, openObjectPanel, openPanel } = useContext(OpenContext); - const { activeObject, setActiveObject } = useContext(ActiveObjectContext); + const { setActiveObject } = useContext(ActiveObjectContext); useEffect(() => { if (!canvas) return; // Ensure canvas is available @@ -76,8 +76,6 @@ const Canvas = () => { }; }, [removeSelected]); - console.log(activeObject); - return (
diff --git a/src/components/EachComponent/Customization/SelectObjectFromGroup.jsx b/src/components/EachComponent/Customization/SelectObjectFromGroup.jsx index a771496..c4ff0af 100644 --- a/src/components/EachComponent/Customization/SelectObjectFromGroup.jsx +++ b/src/components/EachComponent/Customization/SelectObjectFromGroup.jsx @@ -25,35 +25,86 @@ const SelectObjectFromGroup = () => { } }, [activeObject]) + // useEffect(() => { + // if (selectedObject && previewCanvasRef.current) { + // const previewCanvas = new fabric.StaticCanvas(previewCanvasRef.current); + + // previewCanvas.setDimensions({ + // width: 100, + // height: 100 + // }) + + // // Clone the active object to create a true deep copy + // selectedObject.clone((clonedObject) => { + // if (selectedObject?.width > 100 || selectedObject?.height > 100) { + // clonedObject.set({ + // scaleX: 0.2, + // scaleY: 0.2, + // }) + // } + // // Add the cloned object to the canvas + // clonedObject.set({ + // left: 50, + // top: 50, + // originX: 'center', + // originY: 'center', + // selectable: false, + // evented: false, + // }) + // previewCanvas.add(clonedObject); + // previewCanvas.renderAll(); + // }); + + // return () => { + // previewCanvas.dispose() + // } + // } + // }, [selectedObject]) + + useEffect(() => { if (selectedObject && previewCanvasRef.current) { + // Create a new static canvas const previewCanvas = new fabric.StaticCanvas(previewCanvasRef.current); previewCanvas.setDimensions({ width: 100, height: 100 - }) + }); - // Clone the active object to create a true deep copy + // Clear previous objects (if any) + previewCanvas.clear(); + + // Clone the active object for preview selectedObject.clone((clonedObject) => { - // Add the cloned object to the canvas + const scaledWidth = selectedObject.width * selectedObject.scaleX; + const scaledHeight = selectedObject.height * selectedObject.scaleY; + + if (scaledWidth > 100 || scaledHeight > 100) { + clonedObject.scaleToWidth(100); // Scale to fit width + clonedObject.scaleToHeight(100); // Scale to fit height + } + clonedObject.set({ left: 50, top: 50, originX: 'center', originY: 'center', - selectable: false, - evented: false, - }) + }); + + // Add the cloned object to preview canvas previewCanvas.add(clonedObject); previewCanvas.renderAll(); }); + // Cleanup function to dispose of the canvas return () => { - previewCanvas.dispose() - } + previewCanvas.clear(); // Clear all objects + previewCanvas.dispose(); // Properly dispose the canvas + }; } - }, [selectedObject]) + }, [selectedObject, previewCanvasRef]); + const handleSelectObject = (value) => { const selected = groupObjects[parseInt(value)] @@ -77,7 +128,7 @@ const SelectObjectFromGroup = () => { - + {groupObjects.map((object, index) => ( {object.name || `Object ${index + 1}`} diff --git a/src/components/EditPanel.jsx b/src/components/EditPanel.jsx index 3bc8733..a782b4d 100644 --- a/src/components/EditPanel.jsx +++ b/src/components/EditPanel.jsx @@ -23,6 +23,8 @@ export function EditPanel() { const activeObjects = canvas.getActiveObjects(); // Get selected objects if (activeObjects.length > 1) { + canvas.discardActiveObject(); + const group = new fabric.Group(activeObjects, { left: canvas?.width / 2, top: canvas?.height / 2, @@ -34,7 +36,8 @@ export function EditPanel() { }) canvas.remove(...activeObjects); canvas.add(group); - // canvas.setActiveObject(group); + canvas.setActiveObject(group); + setActiveObject(group); canvas.renderAll(); } else { console.log("Select at least two objects") @@ -43,13 +46,13 @@ export function EditPanel() { const ungroupSelectedObjects = () => { const activeObject = canvas.getActiveObject(); - if (activeObject && activeObject.type === "group") { // Get the group const group = activeObject; - + canvas.discardActiveObject(); // Remove the group from the canvas canvas.remove(group); + setActiveObject(null); // Iterate through each object in the group group._objects.forEach((object) => {