Two playhead renderers duplicate the same three-part glow recipe nf-dcfy ← Beads

open priority 2 task unassigned

Twinned from https://github.com/cfsh/ninefold/issues/513 by tools/beads/import_github.py's reconcile pass.

Split out of #508's review rather than folded into it. Filed unclaimed.

What

The playhead is drawn twice, independently:

Both implement the same #117 vertex-glow recipe (wide-faint / mid / crisp), both hardcode the same PlayheadColor amber — new(1f, 0.85f, 0.30f, 0.9f) in each file, with a comment in one saying it "matches the roll's playhead" — and both compute a fractional sweep position.

Why it is worth a look

aedanpope on #496: *"maybe there is some unnecessary technical divergence between the two playhead implementations"*.

⚠️ Updated 2026-08-04 (#508 R3): an earlier version of this issue said #508 had closed the behavioural half. It did not — that change ghosted the playhead at 22%, Aedan rejected it outright (*"I believe this is the wrong fix entirely"*), and it was reverted. The roll still blanks for whole bars in song mode, deliberately, and that is the rule. Both halves are live: the behaviour differs because the rules differ, and the code divergence is untouched, and it is what let the two drift apart in the first place: the grid swept continuously and the roll blinked for months without anything noticing they disagreed.

Two concrete costs, both already paid once:

Not obviously a simple extraction

Worth saying so up front, because "just share it" would miss:

So the shared part is probably the *ink* — colour + the three-pass glow at a given x, top, bottom, alpha — not the positioning. A TonapseStyle.DrawPlayheadLine(canvas, x, top, bottom, alpha) would take the duplication out without pretending the two layouts are the same thing.

Related

Dependencies

None.

Comments

No comments.

Add a comment