Skip to content

Support for high density monitors with devicePixelRatio #306

@Absulit

Description

@Absulit

This is related to #299

Required for high density monitors and the HTML in Canvas to not look blurry, it needs to support the device pixel ratio

const observer = new ResizeObserver(this.#resizeCanvasToFitWindow);

const supportsDevicePixelContentBox =
    typeof ResizeObserverEntry !== 'undefined' &&
    'devicePixelContentBoxSize' in ResizeObserverEntry.prototype;
const options = supportsDevicePixelContentBox ? { box: 'device-pixel-content-box', signal } : { signal };
observer.observe(this.#canvas, options);



#resizeCanvasToFitWindow = (entries) => {
    // there are some calls of this function that do not have entries
    // because of this, clientWidth and clientHeight values are used
    const entry = entries?.[0];

    this.#screenResized = true;
    if (this.#fitWindow) {
        const width = entry?.contentRect?.width || this.#canvas.clientWidth;
        const height = entry?.contentRect?.height || this.#canvas.clientHeight;
        const dpc = entry?.devicePixelContentBoxSize;
        this.#canvas.width = dpc ? dpc[0].inlineSize : Math.round(width * window.devicePixelRatio);
        this.#canvas.height = dpc ? dpc[0].blockSize : Math.round(height * window.devicePixelRatio);
        this.#setScreenSize();
        this.#frame()
    }
}

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions