45 lines
1.1 KiB
JavaScript
45 lines
1.1 KiB
JavaScript
// meters/scale_helpers.js — shared helpers for drawing center-scale grid lines
|
|
|
|
export const METER_HEADER_FONT = 'bold 12px ui-monospace, monospace';
|
|
|
|
/**
|
|
* Draws a hairline-style grid (like the RMS meter) across a center column.
|
|
* The caller provides the existing mapY function so non-linear scales are supported.
|
|
*/
|
|
export function drawHairlineGrid(
|
|
g,
|
|
rect,
|
|
mapY,
|
|
topValue,
|
|
bottomValue,
|
|
step = 1,
|
|
color = 'rgba(255,255,255,0.08)',
|
|
lineWidth = 0.6
|
|
) {
|
|
if (!g || !rect || typeof mapY !== 'function') return;
|
|
if (!Number.isFinite(step) || step <= 0) return;
|
|
|
|
const hi = Math.max(topValue, bottomValue);
|
|
const lo = Math.min(topValue, bottomValue);
|
|
|
|
g.save();
|
|
g.beginPath();
|
|
g.rect(rect.x, rect.y, rect.w, rect.h);
|
|
g.clip();
|
|
|
|
for (let v = hi; v >= lo - 1e-6; v -= step) {
|
|
const y = Math.round(mapY(v)) + 0.5;
|
|
if (!Number.isFinite(y)) continue;
|
|
if (y < rect.y - 2 || y > rect.y + rect.h + 2) continue;
|
|
|
|
g.strokeStyle = color;
|
|
g.lineWidth = lineWidth;
|
|
g.beginPath();
|
|
g.moveTo(rect.x, y);
|
|
g.lineTo(rect.x + rect.w, y);
|
|
g.stroke();
|
|
}
|
|
|
|
g.restore();
|
|
}
|