fix: No more debounced refresh() for subtypes.

This commit is contained in:
Daniel J. Geiger 2023-04-28 09:47:03 -05:00
parent 91fe07d9c5
commit ab3467973f
6 changed files with 31 additions and 71 deletions

View file

@ -11,7 +11,6 @@ import {
getInitializedImageElements,
updateImageCache,
} from "../element/image";
import { ensureSubtypesLoadedForElements } from "../subtypes";
export const SVG_EXPORT_TAG = `<!-- svg-source:excalidraw -->`;
@ -52,48 +51,30 @@ export const exportToCanvas = async (
files,
});
let refreshTimer = 0;
const renderConfig = {
viewBackgroundColor: exportBackground ? viewBackgroundColor : null,
scrollX: -minX + exportPadding,
scrollY: -minY + exportPadding,
zoom: defaultAppState.zoom,
remotePointerViewportCoords: {},
remoteSelectedElementIds: {},
shouldCacheIgnoreZoom: false,
remotePointerUsernames: {},
remotePointerUserStates: {},
theme: appState.exportWithDarkMode ? "dark" : "light",
imageCache,
renderScrollbars: false,
renderSelection: false,
renderGrid: false,
isExporting: true,
renderCb: () => {
if (refreshTimer !== 0) {
window.clearTimeout(refreshTimer);
}
refreshTimer = window.setTimeout(() => {
renderConfig.renderCb = () => {};
window.clearTimeout(refreshTimer);
// Here instead of setState({}), call renderScene() again
render();
}, 50);
renderScene({
elements,
appState,
scale,
rc: rough.canvas(canvas),
canvas,
renderConfig: {
viewBackgroundColor: exportBackground ? viewBackgroundColor : null,
scrollX: -minX + exportPadding,
scrollY: -minY + exportPadding,
zoom: defaultAppState.zoom,
remotePointerViewportCoords: {},
remoteSelectedElementIds: {},
shouldCacheIgnoreZoom: false,
remotePointerUsernames: {},
remotePointerUserStates: {},
theme: appState.exportWithDarkMode ? "dark" : "light",
imageCache,
renderScrollbars: false,
renderSelection: false,
renderGrid: false,
isExporting: true,
},
};
const render = () => {
renderScene({
elements,
appState,
scale,
rc: rough.canvas(canvas),
canvas,
renderConfig,
});
};
render();
});
return canvas;
};
@ -187,12 +168,10 @@ export const exportToSvg = async (
}
const rsvg = rough.svg(svgRoot);
await ensureSubtypesLoadedForElements(elements, () => {
renderSceneToSvg(elements, rsvg, svgRoot, files || {}, {
offsetX: -minX + exportPadding,
offsetY: -minY + exportPadding,
exportWithDarkMode: appState.exportWithDarkMode,
});
renderSceneToSvg(elements, rsvg, svgRoot, files || {}, {
offsetX: -minX + exportPadding,
offsetY: -minY + exportPadding,
exportWithDarkMode: appState.exportWithDarkMode,
});
return svgRoot;