From 97c59702bdf0446a021a8f8648c74002d7e7f21e Mon Sep 17 00:00:00 2001 From: hamid zarghami Date: Tue, 30 Dec 2025 15:01:34 +0330 Subject: [PATCH] split background and a4 + scale a4 in every size --- src/pages/editor/components/EditorCanvas.tsx | 132 ++++++++++-------- .../editor/components/canvas/useStageSize.ts | 14 +- 2 files changed, 78 insertions(+), 68 deletions(-) diff --git a/src/pages/editor/components/EditorCanvas.tsx b/src/pages/editor/components/EditorCanvas.tsx index e1db2d8..02d11bc 100644 --- a/src/pages/editor/components/EditorCanvas.tsx +++ b/src/pages/editor/components/EditorCanvas.tsx @@ -1,8 +1,7 @@ import { useEffect, useRef } from "react"; -import { Stage, Layer, Transformer } from "react-konva"; +import { Stage, Layer, Transformer, Rect } from "react-konva"; import Konva from "konva"; import { useEditorStore } from "../store/editorStore"; -import { clx } from "@/helpers/utils"; import { useDrawingHandlers } from "./canvas/useDrawingHandlers"; import { useStageSize } from "./canvas/useStageSize"; import ObjectRenderer from "./canvas/ObjectRenderer"; @@ -106,7 +105,7 @@ const EditorCanvas = () => { // Use a small delay to ensure the node is mounted (especially for images that need to load) const timeoutId = setTimeout(() => { if (!layerRef.current || !transformerRef.current) return; - + const node = layerRef.current.findOne(`#${selectedObjectId}`); if (node && transformerRef.current) { transformerRef.current.nodes([node]); @@ -153,67 +152,76 @@ const EditorCanvas = () => { return (
- - - {objects.map((obj) => ( - + + + - ))} - {selectedObjectId && (() => { - const selectedObject = objects.find(obj => obj.id === selectedObjectId); - const isText = selectedObject?.type === "text"; - - return ( - { - if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) { - return oldBox; - } - return newBox; - }} - ignoreStroke={isText} - perfectDrawEnabled={false} - anchorFill="#3b82f6" - anchorStroke="#ffffff" - borderStroke="#3b82f6" - borderStrokeWidth={2} - anchorSize={8} - rotateEnabled={true} - enabledAnchors={[ - "top-left", - "top-right", - "bottom-left", - "bottom-right", - "top-center", - "bottom-center", - "middle-left", - "middle-right", - ]} + {objects.map((obj) => ( + - ); - })()} - - + ))} + {selectedObjectId && (() => { + const selectedObject = objects.find(obj => obj.id === selectedObjectId); + const isText = selectedObject?.type === "text"; + + return ( + { + if (Math.abs(newBox.width) < 5 || Math.abs(newBox.height) < 5) { + return oldBox; + } + return newBox; + }} + ignoreStroke={isText} + perfectDrawEnabled={false} + anchorFill="#3b82f6" + anchorStroke="#ffffff" + borderStroke="#3b82f6" + borderStrokeWidth={2} + anchorSize={8} + rotateEnabled={true} + enabledAnchors={[ + "top-left", + "top-right", + "bottom-left", + "bottom-right", + "top-center", + "bottom-center", + "middle-left", + "middle-right", + ]} + /> + ); + })()} + + +
{editingCell && (() => { const obj = objects.find((o) => o.id === editingCell.tableId); if (!obj || !obj.tableData) return null; diff --git a/src/pages/editor/components/canvas/useStageSize.ts b/src/pages/editor/components/canvas/useStageSize.ts index 8403c2c..d5357d3 100644 --- a/src/pages/editor/components/canvas/useStageSize.ts +++ b/src/pages/editor/components/canvas/useStageSize.ts @@ -1,13 +1,14 @@ import { useState, useEffect } from "react"; -const A4_WIDTH = 794; -const A4_HEIGHT = 1123; +export const A4_WIDTH = 794; +export const A4_HEIGHT = 1123; const SCALE = 0.8; export const useStageSize = () => { const [stageSize, setStageSize] = useState({ - width: A4_WIDTH * SCALE, - height: A4_HEIGHT * SCALE, + width: A4_WIDTH, + height: A4_HEIGHT, + scale: SCALE, }); useEffect(() => { @@ -19,8 +20,9 @@ export const useStageSize = () => { const newScale = Math.min(scaleX, scaleY, SCALE); setStageSize({ - width: A4_WIDTH * newScale, - height: A4_HEIGHT * newScale, + width: A4_WIDTH, + height: A4_HEIGHT, + scale: newScale, }); };