mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
69 lines
1.5 KiB
TypeScript
69 lines
1.5 KiB
TypeScript
import { throttleRAF } from "@excalidraw/common";
|
|
|
|
import { renderElement } from "@excalidraw/element/renderElement";
|
|
|
|
import { bootstrapCanvas, getNormalizedCanvasDimensions } from "./helpers";
|
|
|
|
import type { NewElementSceneRenderConfig } from "../src/scene/types";
|
|
|
|
const _renderNewElementScene = ({
|
|
canvas,
|
|
rc,
|
|
newElement,
|
|
elementsMap,
|
|
allElementsMap,
|
|
scale,
|
|
appState,
|
|
renderConfig,
|
|
}: NewElementSceneRenderConfig) => {
|
|
if (canvas) {
|
|
const [normalizedWidth, normalizedHeight] = getNormalizedCanvasDimensions(
|
|
canvas,
|
|
scale,
|
|
);
|
|
|
|
const context = bootstrapCanvas({
|
|
canvas,
|
|
scale,
|
|
normalizedWidth,
|
|
normalizedHeight,
|
|
});
|
|
|
|
// Apply zoom
|
|
context.save();
|
|
context.scale(appState.zoom.value, appState.zoom.value);
|
|
|
|
if (newElement && newElement.type !== "selection") {
|
|
renderElement(
|
|
newElement,
|
|
elementsMap,
|
|
allElementsMap,
|
|
rc,
|
|
context,
|
|
renderConfig,
|
|
appState,
|
|
);
|
|
} else {
|
|
context.clearRect(0, 0, normalizedWidth, normalizedHeight);
|
|
}
|
|
}
|
|
};
|
|
|
|
export const renderNewElementSceneThrottled = throttleRAF(
|
|
(config: NewElementSceneRenderConfig) => {
|
|
_renderNewElementScene(config);
|
|
},
|
|
{ trailing: true },
|
|
);
|
|
|
|
export const renderNewElementScene = (
|
|
renderConfig: NewElementSceneRenderConfig,
|
|
throttle?: boolean,
|
|
) => {
|
|
if (throttle) {
|
|
renderNewElementSceneThrottled(renderConfig);
|
|
return;
|
|
}
|
|
|
|
_renderNewElementScene(renderConfig);
|
|
};
|