js-draw
Version:
Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript.
64 lines (63 loc) • 2.73 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.editorImageToSVGAsync = exports.editorImageToSVGSync = void 0;
const math_1 = require("@js-draw/math");
const SVGRenderer_1 = __importDefault(require("../../rendering/renderers/SVGRenderer"));
const SVGLoader_1 = require("../../SVGLoader/SVGLoader");
const adjustExportedSVGSize_1 = __importDefault(require("./adjustExportedSVGSize"));
const toSVGInternal = (image, renderFunction, options) => {
const importExportViewport = image.getImportExportViewport().getTemporaryClone();
// If the rectangle has zero width or height, its size can't be increased
// -- set its size to the minimum.
if (options?.minDimension) {
const originalRect = importExportViewport.visibleRect;
let rect = originalRect;
if (rect.w <= 0) {
rect = new math_1.Rect2(rect.x, rect.y, options.minDimension, rect.h);
}
if (rect.h <= 0) {
rect = new math_1.Rect2(rect.x, rect.y, rect.w, options.minDimension);
}
if (!rect.eq(originalRect)) {
importExportViewport.updateScreenSize(rect.size);
}
}
const { element: result, renderer } = SVGRenderer_1.default.fromViewport(importExportViewport, {
sanitize: options.sanitize ?? false,
useViewBoxForPositioning: true,
});
// Use a callback rather than async/await to allow this function to create
// both sync and async render functions
renderFunction(renderer, () => {
if (image.getAutoresizeEnabled()) {
result.classList.add(SVGLoader_1.svgLoaderAutoresizeClassName);
}
else {
result.classList.remove(SVGLoader_1.svgLoaderAutoresizeClassName);
}
const exportRect = importExportViewport.visibleRect;
(0, adjustExportedSVGSize_1.default)(result, exportRect, options);
return result;
});
return result;
};
const editorImageToSVGSync = (image, options) => {
return toSVGInternal(image, (renderer, onComplete) => {
image.renderAll(renderer);
onComplete();
}, options);
};
exports.editorImageToSVGSync = editorImageToSVGSync;
const editorImageToSVGAsync = (image, preRenderComponent, options) => {
return new Promise((resolve) => {
toSVGInternal(image, async (renderer, onComplete) => {
await image.renderAllAsync(renderer, preRenderComponent);
const result = onComplete();
resolve(result);
}, options);
});
};
exports.editorImageToSVGAsync = editorImageToSVGAsync;
;