You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
6 months ago
|
import { useEffect, useRef } from "react";
|
||
|
import type { NonDeletedSceneElementsMap } from "../../element/types";
|
||
|
import type { AppState } from "../../types";
|
||
|
import type {
|
||
|
RenderableElementsMap,
|
||
|
StaticCanvasRenderConfig,
|
||
|
} from "../../scene/types";
|
||
|
import type { RoughCanvas } from "roughjs/bin/canvas";
|
||
|
import { renderNewElementScene } from "../../renderer/renderNewElementScene";
|
||
|
import { isRenderThrottlingEnabled } from "../../reactUtils";
|
||
|
|
||
|
interface NewElementCanvasProps {
|
||
|
appState: AppState;
|
||
|
elementsMap: RenderableElementsMap;
|
||
|
allElementsMap: NonDeletedSceneElementsMap;
|
||
|
scale: number;
|
||
|
rc: RoughCanvas;
|
||
|
renderConfig: StaticCanvasRenderConfig;
|
||
|
}
|
||
|
|
||
|
const NewElementCanvas = (props: NewElementCanvasProps) => {
|
||
|
const canvasRef = useRef<HTMLCanvasElement | null>(null);
|
||
|
useEffect(() => {
|
||
|
if (!canvasRef.current) {
|
||
|
return;
|
||
|
}
|
||
|
renderNewElementScene(
|
||
|
{
|
||
|
canvas: canvasRef.current,
|
||
|
scale: props.scale,
|
||
|
newElement: props.appState.newElement,
|
||
|
elementsMap: props.elementsMap,
|
||
|
allElementsMap: props.allElementsMap,
|
||
|
rc: props.rc,
|
||
|
renderConfig: props.renderConfig,
|
||
|
appState: props.appState,
|
||
|
},
|
||
|
isRenderThrottlingEnabled(),
|
||
|
);
|
||
|
});
|
||
|
|
||
|
return (
|
||
|
<canvas
|
||
|
className="excalidraw__canvas"
|
||
|
style={{
|
||
|
width: props.appState.width,
|
||
|
height: props.appState.height,
|
||
|
}}
|
||
|
width={props.appState.width * props.scale}
|
||
|
height={props.appState.height * props.scale}
|
||
|
ref={canvasRef}
|
||
|
/>
|
||
|
);
|
||
|
};
|
||
|
|
||
|
export default NewElementCanvas;
|