Make VU meter canvas DPR-aware for sharp edges on Retina displays

This commit is contained in:
Armin 2026-07-08 18:22:33 +02:00
commit 56faa28f6b

View file

@ -535,8 +535,17 @@ function drawSpectrum() {
const vuCanvas = document.getElementById('vuMeter'); const vuCanvas = document.getElementById('vuMeter');
if (vuCanvas && tracks.length && analyserL && analyserR) { if (vuCanvas && tracks.length && analyserL && analyserR) {
const vuctx = vuCanvas.getContext('2d'); const vuctx = vuCanvas.getContext('2d');
const vw = vuCanvas.width, vh = vuCanvas.height; const vuRect = vuCanvas.getBoundingClientRect();
vuctx.clearRect(0, 0, vw, vh); const vuDpr = window.devicePixelRatio || 1;
const bufW = Math.round(vuRect.width * vuDpr);
const bufH = Math.round(vuRect.height * vuDpr);
if (vuCanvas.width !== bufW || vuCanvas.height !== bufH) {
vuCanvas.width = bufW;
vuCanvas.height = bufH;
}
vuctx.setTransform(vuDpr, 0, 0, vuDpr, 0, 0);
vuctx.clearRect(0, 0, vuRect.width, vuRect.height);
const vw = vuRect.width;
const rowH = 6; const rowH = 6;
const gap = 4; const gap = 4;
const labelW = 12; const labelW = 12;