Skip to content

feat(theme): hold-to-repeat in the pad editor, its profiles list, and arcade Select - #694

Merged
pnn64 merged 2 commits into
pnn64:mainfrom
ddrcoder:pad-config-key-repeat
Sep 22, 2026
Merged

pnn64 merged 2 commits into
pnn64:mainfrom
ddrcoder:pad-config-key-repeat

Conversation

@ddrcoder

@ddrcoder ddrcoder commented Sep 10, 2026

Copy link
Copy Markdown
Contributor

Draft — first of a four-PR stack (this one has no dependencies). Supersedes #689.

Summary

Hold-to-repeat for directional input in three places that only stepped once per press.

  • Pad editor (Configure Pads + the Song Select overlay): holding Up/Down/Left/Right repeats, driven by the theme's shared advance_hold_repeat timer. Works in the Simple and Advanced views and in the saved-profiles list. The name box ignores the hold (its Up/Down is a one-shot toggle); any modal, view change, or exit drops it. Shift state is captured at the press so a fine hold stays fine.
  • Repeat rate accelerates (the timing from feat(pad-config): keep stepping thresholds while Up/Down is held #689): 300 ms initial delay, then 120 ms shrinking by 12% per repeat down to a 30 ms floor, so a long sweep speeds up without making the first steps twitchy.
  • Arcade-navigation Player Options: Select moves to the previous row but never armed the hold timer (Start for next row already repeated), so climbing a long pane meant one tap per row. Select now arms the Up hold on press and releases it, for both sides.

Testing

  • New unit tests: repeat timing and release in the pad editor, cursor repeat pausing in modals, profiles-list repeat, held Select in arcade Player Options.
  • cargo test -p deadsync-theme-simply-love --lib -- pad_config player_options passes.
  • Verified on a cabinet (two SMX pads, arcade navigation on).

🤖 Generated with Claude Code

https://claude.ai/code/session_015PLarttSySmaMqrG5uYJHD

… arcade Select

Holding Up/Down/Left/Right in the pad editor now repeats after 300 ms at
60 ms intervals (the theme's shared hold-repeat timer), in both the
Options screen and the Song Select overlay, in the Simple and Advanced
views and the saved-profiles list. The name box ignores the hold (its
Up/Down is a one-shot toggle), and any modal, view change, or exit
drops it.

In arcade-navigation Player Options, Select moves to the previous row but
never armed the hold timer, so climbing a long pane meant tapping it once
per row while Start (next row) repeated fine. Select now arms the Up hold
on press and releases it, for both sides.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015PLarttSySmaMqrG5uYJHD
@ddrcoder
ddrcoder force-pushed the pad-config-key-repeat branch from 56935cd to cf64d36 Compare September 20, 2026 06:50
@ddrcoder
ddrcoder marked this pull request as ready for review September 20, 2026 06:52
Cancel pad-editor repeats when entering Advanced, leaving Profiles, or
opening Rename/Save, and when the edited pad disappears or FSR support is
disabled. Route Save New through begin_save so raw keyboard releases
consumed by the name dialog cannot leave navigation repeating afterward.
Ignore OS repeats for the name dialog's Set as default toggle.

ITGmania's ScreenOptions::MenuSelect delegates to MenuUpDown(-1): held
Select moves upward, repeated movement clamps at the first row, and
opposing Start/Select holds suppress repeats until one is released. Keep
DeadSync's existing 300 ms / 50 ms Player Options timing, but implement
the opposing-hold suppression and cover both players, release, and wrap
boundaries. The accelerating pad-editor cadence remains a separate
DeadSync feature; ITGmania has no corresponding built-in threshold editor.

Reference: itgmania/itgmania@8a3bf88,
src/ScreenOptions.cpp (MenuSelect, MenuUpDown, MoveRowRelative).
Simply Love@dd06138b15492f4136796dfe4b6708ced0f7b9eb uses 30 repeats/sec
for Player Options and inherits the 250 ms ScreenOptions delay.

Validation: cargo test --locked -p deadsync-theme-simply-love --lib --
pad_config player_options (186 passed, 1 ignored). Four original review
regressions and the staggered opposing-hold test reproduced the bugs
before the fixes. rustfmt checks and git diff --check pass.
@pnn64
pnn64 merged commit 0e1080d into pnn64:main Sep 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants