mirror of
https://git.sfja.dk/sfja/h6-logicirc.git
synced 2025-05-16 01:08:07 +01:00
58 lines
1.6 KiB
TypeScript
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);
|
|
}
|
|
}
|