signal-desktop/ts/mediaEditor/MediaEditorFabricSticker.ts

39 lines
1.3 KiB
TypeScript
Raw Normal View History

2021-12-01 02:14:25 +00:00
// Copyright 2021 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import { fabric } from 'fabric';
import { customFabricObjectControls } from './util/customFabricObjectControls';
export class MediaEditorFabricSticker extends fabric.Image {
constructor(
element: string | HTMLImageElement | HTMLVideoElement,
options: fabric.IImageOptions = {}
) {
// Fabric seems to have issues when passed a string, but not an Image.
let normalizedElement: undefined | HTMLImageElement | HTMLVideoElement;
if (typeof element === 'string') {
normalizedElement = new Image();
normalizedElement.src = element;
} else {
normalizedElement = element;
}
super(normalizedElement, options);
this.on('modified', () => this.canvas?.bringToFront(this));
2021-12-01 02:14:25 +00:00
}
static 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));
}
}
MediaEditorFabricSticker.prototype.type = 'MediaEditorFabricSticker';
MediaEditorFabricSticker.prototype.borderColor = '#ffffff';
MediaEditorFabricSticker.prototype.controls = customFabricObjectControls;