feat: wheel and trackpad horizontal seek in the score #6

Manually merged
rob merged 1 commit from feat/wheel-seek into main 2026-09-09 15:00:39 +02:00
Collaborator

The wheel was previously unused over the score — setupScrollDisabling()
only cancels the container native scroll, since the score is positioned
by transform on #scrollStage rather than scrollLeft.

Wheel seek lives in transportTouch.js so it shares the drag-to-scrub
lifecycle: it pauses playback, sets the seek flags, throttles WS jump
messages, and ends via finishSeeking(). Whichever of deltaX/deltaY
dominates drives the scrub, so trackpad swipes, plain wheels and
shift+wheel all work; deltaMode is normalised to pixels. Since wheel has
no end event, 140ms of silence closes the gesture.

Modifier combos (ctrl/meta/alt) pass through to the browser, and edit
modes, drawing mode and locked transport are respected.

Adds a wheelSeekSensitivity preference (default 1) next to the existing
touch-seek settings.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

The wheel was previously unused over the score — setupScrollDisabling() only cancels the container native scroll, since the score is positioned by transform on #scrollStage rather than scrollLeft. Wheel seek lives in transportTouch.js so it shares the drag-to-scrub lifecycle: it pauses playback, sets the seek flags, throttles WS jump messages, and ends via finishSeeking(). Whichever of deltaX/deltaY dominates drives the scrub, so trackpad swipes, plain wheels and shift+wheel all work; deltaMode is normalised to pixels. Since wheel has no end event, 140ms of silence closes the gesture. Modifier combos (ctrl/meta/alt) pass through to the browser, and edit modes, drawing mode and locked transport are respected. Adds a wheelSeekSensitivity preference (default 1) next to the existing touch-seek settings. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The wheel was previously unused over the score — setupScrollDisabling()
only cancels the container native scroll, since the score is positioned
by transform on #scrollStage rather than scrollLeft.

Wheel seek lives in transportTouch.js so it shares the drag-to-scrub
lifecycle: it pauses playback, sets the seek flags, throttles WS jump
messages, and ends via finishSeeking(). Whichever of deltaX/deltaY
dominates drives the scrub, so trackpad swipes, plain wheels and
shift+wheel all work; deltaMode is normalised to pixels. Since wheel has
no end event, 140ms of silence closes the gesture.

Modifier combos (ctrl/meta/alt) pass through to the browser, and edit
modes, drawing mode and locked transport are respected.

Adds a wheelSeekSensitivity preference (default 1) next to the existing
touch-seek settings.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
rob closed this pull request 2026-09-09 14:44:38 +02:00
filip reopened this pull request 2026-09-09 14:49:48 +02:00
rob manually merged commit 930e5eabf2 into main 2026-09-09 15:00:39 +02:00
filip deleted branch feat/wheel-seek 2026-09-09 15:23:43 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
rob/oscilla!6
No description provided.