hd0013's picture
Upload folder using huggingface_hub
8fdc036 verified
raw
history blame contribute delete
No virus
2.83 kB
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 {
/**
* Initial setup for the bg command
* @returns
*/
start: () => Promise<[number, number]>;
}
/**
* Adds a background image to the canvas.
* @param container The container to add the image to.
* @param renderer The renderer to use for the image.
* @param background The background image to add.
* @param resize The function to resize the canvas.
* @returns A command that can be used to undo the action.
*/
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() {
// renderer.resize(sprite.width, sprite.height);
resize(sprite.width, sprite.height);
sprite.zIndex = 0;
container.addChild(sprite);
},
undo() {
container.removeChildAt(0);
}
};
}
/**
* Command that sets a background
*/
interface BgColorCommand extends Command {
/**
* Initial setup for the bg command
* @returns
*/
start: () => [number, number];
}
/**
* Adds a background color to the canvas.
* @param container The container to add the image to.
* @param renderer The renderer to use for the image.
* @param color The background color to add.
* @param width The width of the background.
* @param height The height of the background.
* @param resize The function to resize the canvas.
* @returns A command that can be used to undo the action.
*/
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();
}
};
}