h6-logicirc/src/painter.ts
2025-05-07 17:13:43 +02:00

58 lines
1.6 KiB
TypeScript

import { CanvasRenderer } from "./canvas.ts";
import { Renderer, RendererImage } from "./renderer.ts";
export class Painter implements Renderer {
private c: OffscreenCanvas;
private g: OffscreenCanvasRenderingContext2D;
private r: Renderer;
constructor(width: number, height: number) {
this.c = new OffscreenCanvas(width, height);
this.g = this.c.getContext("2d")!;
this.r = new CanvasRenderer(
this.c as unknown as HTMLCanvasElement,
this.g as unknown as CanvasRenderingContext2D,
);
}
render(r: Renderer, x: number, y: number, alpha = 1) {
r.putImage(this.c, x, y, this.c.width, this.c.height, alpha);
}
get width(): number {
return this.r.width;
}
get height(): number {
return this.r.height;
}
clear(color: string): void {
this.r.clear(color);
}
fillRect(x: number, y: number, w: number, h: number, color: string): void {
this.r.fillRect(x, y, w, h, color);
}
strokeRect(
x: number,
y: number,
w: number,
h: number,
color: string,
lineWidth: number,
): void {
this.r.strokeRect(x, y, w, h, color, lineWidth);
}
fillCirc(x: number, y: number, radius: number, color: string): void {
this.r.fillCirc(x, y, radius, color);
}
putImage(
data: RendererImage,
x: number,
y: number,
w = data.width,
h = data.height,
alpha = 1,
): void {
this.r.putImage(data, x, y, w, h, alpha);
}
}