notepat: volume/drive pointer events + smooth drift reversal
Two bugs in the seismic-nightjar-beacon flash:
1. Volume + drive sliders didn't respond to mouse/touch.
The drag-init loop in act() iterated over a hardcoded list
`["fx", "echo", "pitch", "crush"]` so the new "volume" and "drive"
row IDs never entered the hit-test, even though the row state
(fxRows.volume / fxRows.drive) and the dragging-flag setters were
already in place. Added both names to the loop.
2. Spacebar didn't smoothly reverse the wave drift — it froze.
Previous logic grew the offset at exactly 1× real-time (dt per frame)
while spaceHeld, which keeps cursor_pos = write_pos - offset
constant in absolute time. The displayed left half therefore stayed
FROZEN instead of drifting RIGHT.
Replaced with a velocity model:
waveDriftSpeed lerps toward +1 (live, wave drifts left) or -1
(replay, wave drifts right) with a 6-frame time constant.
d_offset/dt = 1 - waveDriftSpeed, so:
speed = +1 → offset doesn't change → wave drifts LEFT (live)
speed = 0 → offset grows at 1× → wave frozen (transition mid-point)
speed = -1 → offset grows at 2× → cursor retreats at 1× → wave
drifts RIGHT
Pressing space now produces a continuous deceleration of the left
drift, a momentary stop, and acceleration into a right drift —
matching what the user described as "smooth direction reversal".
Releasing space inverts the lerp, smoothly catching back up to live.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>