Follow-up on the shading and peaks, plus the knobs to tune them. The gradient now ends at a configured `spectrum_top_color` -- the secondary purple -- rather than blending toward white, so the top row *is* the top color. "none" ramps brightness alone. A peak now fills the gap between the bar and its held maximum instead of marking it with a rule, so each bar trails a shadow of where it just was. `spectrum_peak_fill = false` keeps the rule, which is also the fallback for a font without U+2594. The dividers make the segments legible without breaking the field apart: the seam between two bars is the bar itself at 35% brightness rather than an empty column, and `spectrum_row_gap` eighths are left unlit at the top of every cell so a full row draws `▇` and each value row reads on its own. `spectrum_bar_width` is a minimum -- bars take the spare columns of their slot and seams stay exactly `spectrum_bar_gap` wide, because an uneven bar reads as an uneven level while an uneven seam is only untidy. Keeping the seam inside the bar's own cells means all 24 bins still fit a normal pane. Peaks fall in seconds now, not frames: `update_spectrum` times the interval between frames and `spectrum_peak_fall` says how long a full-scale shadow takes to reach the floor (4s, up from an effective 1.7s). The server's frame rate is its own business, and a per-frame decay silently retunes itself when it changes. `advance_spectrum` takes the interval so the fall is testable without a clock, and the renderer floors the divisor itself rather than trusting the config clamp -- a zero would freeze every shadow on screen. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| src | ||
| Cargo.lock | ||
| Cargo.toml | ||
| build.rs | ||
| schema.graphql | ||