fix: disable render throttling by default & during resize (#5451)

This commit is contained in:
David Luzar 2022-07-16 11:36:55 +02:00 committed by GitHub
parent df14c69977
commit 5bc40402a6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 66 additions and 14 deletions

View file

@ -181,7 +181,7 @@ const renderLinearPointHandles = (
context.restore();
};
export const renderScene = (
export const _renderScene = (
elements: readonly NonDeletedExcalidrawElement[],
appState: AppState,
selectionElement: NonDeletedExcalidrawElement | null,
@ -572,8 +572,7 @@ export const renderScene = (
return { atLeastOneVisibleElement: visibleElements.length > 0, scrollBars };
};
/** renderScene throttled to animation framerate */
export const renderSceneThrottled = throttleRAF(
const renderSceneThrottled = throttleRAF(
(
elements: readonly NonDeletedExcalidrawElement[],
appState: AppState,
@ -582,9 +581,9 @@ export const renderSceneThrottled = throttleRAF(
rc: RoughCanvas,
canvas: HTMLCanvasElement,
renderConfig: RenderConfig,
callback?: (data: ReturnType<typeof renderScene>) => void,
callback?: (data: ReturnType<typeof _renderScene>) => void,
) => {
const ret = renderScene(
const ret = _renderScene(
elements,
appState,
selectionElement,
@ -598,6 +597,46 @@ export const renderSceneThrottled = throttleRAF(
{ trailing: true },
);
/** renderScene throttled to animation framerate */
export const renderScene = <T extends boolean = false>(
elements: readonly NonDeletedExcalidrawElement[],
appState: AppState,
selectionElement: NonDeletedExcalidrawElement | null,
scale: number,
rc: RoughCanvas,
canvas: HTMLCanvasElement,
renderConfig: RenderConfig,
callback?: (data: ReturnType<typeof _renderScene>) => void,
/** Whether to throttle rendering. Defaults to false.
* When throttling, no value is returned. Use the callback instead. */
throttle?: T,
): T extends true ? void : ReturnType<typeof _renderScene> => {
if (throttle) {
renderSceneThrottled(
elements,
appState,
selectionElement,
scale,
rc,
canvas,
renderConfig,
callback,
);
return undefined as T extends true ? void : ReturnType<typeof _renderScene>;
}
const ret = _renderScene(
elements,
appState,
selectionElement,
scale,
rc,
canvas,
renderConfig,
);
callback?.(ret);
return ret as T extends true ? void : ReturnType<typeof _renderScene>;
};
const renderTransformHandles = (
context: CanvasRenderingContext2D,
renderConfig: RenderConfig,