split background and a4 + scale a4 in every size
This commit is contained in:
@@ -1,8 +1,7 @@
|
|||||||
import { useEffect, useRef } from "react";
|
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 Konva from "konva";
|
||||||
import { useEditorStore } from "../store/editorStore";
|
import { useEditorStore } from "../store/editorStore";
|
||||||
import { clx } from "@/helpers/utils";
|
|
||||||
import { useDrawingHandlers } from "./canvas/useDrawingHandlers";
|
import { useDrawingHandlers } from "./canvas/useDrawingHandlers";
|
||||||
import { useStageSize } from "./canvas/useStageSize";
|
import { useStageSize } from "./canvas/useStageSize";
|
||||||
import ObjectRenderer from "./canvas/ObjectRenderer";
|
import ObjectRenderer from "./canvas/ObjectRenderer";
|
||||||
@@ -153,6 +152,7 @@ const EditorCanvas = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex-1 flex items-center justify-center bg-gray-100 overflow-hidden">
|
<div className="flex-1 flex items-center justify-center bg-gray-100 overflow-hidden">
|
||||||
|
<div className="shadow-lg" style={{ transform: `scale(${stageSize.scale})`, transformOrigin: 'center center' }}>
|
||||||
<Stage
|
<Stage
|
||||||
ref={stageRef}
|
ref={stageRef}
|
||||||
width={stageSize.width}
|
width={stageSize.width}
|
||||||
@@ -160,9 +160,16 @@ const EditorCanvas = () => {
|
|||||||
onMouseDown={handleStageMouseDown}
|
onMouseDown={handleStageMouseDown}
|
||||||
onMouseMove={handleStageMouseMove}
|
onMouseMove={handleStageMouseMove}
|
||||||
onMouseUp={handleStageMouseUp}
|
onMouseUp={handleStageMouseUp}
|
||||||
className={clx("bg-white shadow-lg")}
|
|
||||||
>
|
>
|
||||||
<Layer ref={layerRef}>
|
<Layer ref={layerRef}>
|
||||||
|
<Rect
|
||||||
|
x={0}
|
||||||
|
y={0}
|
||||||
|
width={stageSize.width}
|
||||||
|
height={stageSize.height}
|
||||||
|
fill="#ffffff"
|
||||||
|
listening={false}
|
||||||
|
/>
|
||||||
{objects.map((obj) => (
|
{objects.map((obj) => (
|
||||||
<ObjectRenderer
|
<ObjectRenderer
|
||||||
key={obj.id}
|
key={obj.id}
|
||||||
@@ -214,6 +221,7 @@ const EditorCanvas = () => {
|
|||||||
})()}
|
})()}
|
||||||
</Layer>
|
</Layer>
|
||||||
</Stage>
|
</Stage>
|
||||||
|
</div>
|
||||||
{editingCell && (() => {
|
{editingCell && (() => {
|
||||||
const obj = objects.find((o) => o.id === editingCell.tableId);
|
const obj = objects.find((o) => o.id === editingCell.tableId);
|
||||||
if (!obj || !obj.tableData) return null;
|
if (!obj || !obj.tableData) return null;
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
import { useState, useEffect } from "react";
|
import { useState, useEffect } from "react";
|
||||||
|
|
||||||
const A4_WIDTH = 794;
|
export const A4_WIDTH = 794;
|
||||||
const A4_HEIGHT = 1123;
|
export const A4_HEIGHT = 1123;
|
||||||
const SCALE = 0.8;
|
const SCALE = 0.8;
|
||||||
|
|
||||||
export const useStageSize = () => {
|
export const useStageSize = () => {
|
||||||
const [stageSize, setStageSize] = useState({
|
const [stageSize, setStageSize] = useState({
|
||||||
width: A4_WIDTH * SCALE,
|
width: A4_WIDTH,
|
||||||
height: A4_HEIGHT * SCALE,
|
height: A4_HEIGHT,
|
||||||
|
scale: SCALE,
|
||||||
});
|
});
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@@ -19,8 +20,9 @@ export const useStageSize = () => {
|
|||||||
const newScale = Math.min(scaleX, scaleY, SCALE);
|
const newScale = Math.min(scaleX, scaleY, SCALE);
|
||||||
|
|
||||||
setStageSize({
|
setStageSize({
|
||||||
width: A4_WIDTH * newScale,
|
width: A4_WIDTH,
|
||||||
height: A4_HEIGHT * newScale,
|
height: A4_HEIGHT,
|
||||||
|
scale: newScale,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user