From 39a358749d21f8c2b8cb77f66ef1ed9b8d3fb123 Mon Sep 17 00:00:00 2001 From: Fedor Indutny <79877362+indutny-signal@users.noreply.github.com> Date: Mon, 4 Nov 2024 15:25:02 -0800 Subject: [PATCH] Fix adding large stickers in media editor --- ts/mediaEditor/MediaEditorFabricSticker.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/ts/mediaEditor/MediaEditorFabricSticker.ts b/ts/mediaEditor/MediaEditorFabricSticker.ts index 011160667b..0f89e7b9db 100644 --- a/ts/mediaEditor/MediaEditorFabricSticker.ts +++ b/ts/mediaEditor/MediaEditorFabricSticker.ts @@ -2,6 +2,7 @@ // SPDX-License-Identifier: AGPL-3.0-only import { fabric } from 'fabric'; +import { loadImage } from '../util/loadImage'; import { customFabricObjectControls } from './util/customFabricObjectControls'; export class MediaEditorFabricSticker extends fabric.Image { @@ -23,13 +24,21 @@ export class MediaEditorFabricSticker extends fabric.Image { this.on('modified', () => this.canvas?.bringToFront(this)); } - static fromObject( + static async fromObject( // eslint-disable-next-line max-len // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types options: any, - callback: (_: MediaEditorFabricSticker) => unknown - ): void { - callback(new MediaEditorFabricSticker(options.src, options)); + callback: (_: MediaEditorFabricSticker | null, isError: boolean) => unknown + ): Promise { + let { src } = options; + try { + if (typeof src === 'string') { + src = await loadImage(src); + } + callback(new MediaEditorFabricSticker(src, options), false); + } catch { + callback(null, true); + } } }