import { Rectangle } from "./spatial/Rectangle.js"; export class ScaledCanvas { constructor(container) { this.canvas = null; this.context = null; this.container = container; } clearFrame() { this.context.clearRect(0, 0, this.canvas.width, this.canvas.height); } init() { this.canvas = document.createElement("canvas"); this.container.appendChild(this.canvas); this.context = this.canvas.getContext('2d'); window.addEventListener("resize", this.onResize); this.onResize(); } getPixelRatio() { let dpr = window.devicePixelRatio || 1; let bsr = this.context.webkitBackingStorePixelRatio || this.context.mozBackingStorePixelRatio || this.context.msBackingStorePixelRatio || this.context.oBackingStorePixelRatio || this.context.backingStorePixelRatio || 1; return dpr / bsr; } onResize = () => { let ratio = this.getPixelRatio(); let canvasBounds = this.canvas.getBoundingClientRect(); this.canvas.width = canvasBounds.width * ratio; this.canvas.height = canvasBounds.height * ratio; this.context.scale(ratio, ratio); } getContext() { return this.context; } get pixelWidth() { return this.canvas.width; } get pixelHeight() { return this.canvas.height; } get center() { return this.bounds.center; } get bounds() { return new Rectangle(0,0, this.canvas.width / this.getPixelRatio(), this.canvas.height / this.getPixelRatio()); } }