import { Pixmap } from "rkgk/haku.js"; export class BrushPreview extends HTMLElement { constructor() { super(); } connectedCallback() { this.canvas = this.appendChild(document.createElement("canvas")); this.ctx = this.canvas.getContext("2d"); this.#resizeCanvas(); } #resizeCanvas() { this.canvas.width = this.clientWidth; this.canvas.height = this.clientHeight; if (this.pixmap != null) { this.pixmap.destroy(); } this.pixmap = new Pixmap(this.canvas.width, this.canvas.height); } async #renderBrushInner(haku) { this.pixmap.clear(); let evalResult = await haku.evalBrush({ runDotter: async () => { return { fromX: this.canvas.width / 2, fromY: this.canvas.width / 2, toX: this.canvas.width / 2, toY: this.canvas.width / 2, num: 0, }; }, runScribble: async (renderToPixmap) => { return renderToPixmap(this.pixmap, 0, 0); }, }); if (evalResult.status != "ok") { return { status: "error", phase: "eval", result: evalResult }; } this.ctx.putImageData(this.pixmap.getImageData(), 0, 0); return { status: "ok" }; } async renderBrush(haku) { this.unsetErrorFlag(); let result = await this.#renderBrushInner(haku); if (result.status == "error") { this.setErrorFlag(); } return result; } unsetErrorFlag() { this.classList.remove("error"); } setErrorFlag() { this.classList.add("error"); } } customElements.define("rkgk-brush-preview", BrushPreview);