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.
The playhead is drawn twice, independently:
games/tonapse/ui/SongGrid.cs — DrawPlayhead(), onto a dedicated _playheadOverlaygames/tonapse/ui/PianoRoll.cs — inline in _DrawBoth 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.
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:
_Draw of the entire piano roll — notes, piano, grid lines, glow polygons — 60 times a second during playback. Nobody has measured whether that matters on a Deck, and this is the natural place to find out.Worth saying so up front, because "just share it" would miss:
h_separation gap it deliberately spans (#217); the roll sweeps across step columns at CellW._labelW..gridRight; the grid's is positioned from live control geometry.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.
None.
No comments.