|
import {
|
|
type Container,
|
|
type IRenderer,
|
|
Sprite,
|
|
Texture,
|
|
DisplayObject,
|
|
type ColorSource,
|
|
Color,
|
|
RenderTexture
|
|
} from "pixi.js";
|
|
|
|
import { type Command } from "../utils/commands";
|
|
import { make_graphics } from "../utils/pixi";
|
|
|
|
interface BgImageCommand extends Command {
|
|
|
|
|
|
|
|
|
|
start: () => Promise<[number, number]>;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function add_bg_image(
|
|
container: Container,
|
|
renderer: IRenderer,
|
|
background: Blob | File,
|
|
resize: (width: number, height: number) => void
|
|
): BgImageCommand {
|
|
let sprite: Sprite & DisplayObject;
|
|
return {
|
|
async start() {
|
|
container.removeChildren();
|
|
const img = await createImageBitmap(background);
|
|
const bitmap_texture = Texture.from(img);
|
|
sprite = new Sprite(bitmap_texture) as Sprite & DisplayObject;
|
|
return [sprite.width, sprite.height];
|
|
},
|
|
async execute() {
|
|
|
|
resize(sprite.width, sprite.height);
|
|
|
|
sprite.zIndex = 0;
|
|
container.addChild(sprite);
|
|
},
|
|
undo() {
|
|
container.removeChildAt(0);
|
|
}
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
interface BgColorCommand extends Command {
|
|
|
|
|
|
|
|
|
|
start: () => [number, number];
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
export function add_bg_color(
|
|
container: Container,
|
|
renderer: IRenderer,
|
|
color: ColorSource,
|
|
width: number,
|
|
height: number,
|
|
resize: (width: number, height: number) => void
|
|
): BgColorCommand {
|
|
let sprite: Sprite & DisplayObject;
|
|
return {
|
|
start() {
|
|
container.removeChildren();
|
|
const graphics = make_graphics(1);
|
|
const texture = RenderTexture.create({
|
|
width,
|
|
height
|
|
});
|
|
graphics.beginFill(new Color(color));
|
|
graphics.drawRect(0, 0, width, height);
|
|
graphics.endFill();
|
|
renderer.render(graphics, { renderTexture: texture });
|
|
sprite = new Sprite(texture) as Sprite & DisplayObject;
|
|
return [sprite.width, sprite.height];
|
|
},
|
|
async execute() {
|
|
resize(sprite.width, sprite.height);
|
|
sprite.zIndex = 1;
|
|
container.addChild(sprite);
|
|
},
|
|
undo() {
|
|
container.removeChildren();
|
|
}
|
|
};
|
|
}
|
|
|