Twinned from https://github.com/cfsh/ninefold/issues/439 by tools/beads/import_github.py's reconcile pass.
From Aedan, in chat:
> "Tonapse on steam deck is still way too small, we need to have an option to make song / notes-editor fullscreen themselves, and then Triangle just switches between the two screens, with a small hint at the top/bottom to open the other screen."
TonapseHome.BuildUi builds ONE page: the SONG card on top (capped at
SongGrid.MaxVisibleRows ~5.5 rows), the edit card below it taking all
remaining height (CHANNELS chips -> the change-instrument row -> pattern pills
-> play -> piano roll), and the CONTROLS guide pinned in a second column on the
right. Every stop is on screen at once, so on a 1280x800 Deck panel each half
gets ~350px and the roll cells collapse. Triangle (TonapseHome.TriangleJump)
already teleports focus between the two halves - it just doesn't change what is
*shown*.
One screen at a time. Triangle swaps which screen is up; a small persistent hint names the other one.
``` +- SONG (home) --------+ +- NOTES (deep dive) --+ | > song +bar -bar | | change keys instr. | <- on BOTH | ####....##.. keys | | > pattern | | ..####..#### drums | | .#..#..# | | CHANNELS chips | | .#..#..# roll | | pills a b c | | .#..#..# | | change keys instr. | | | +- ^ notes editor -----+ +- ^ song editor ------+ ```
Aedan's calls (chat, 2026-08-03):
- Trigger: auto by window size, with an override. Single-screen below a
height threshold (the Deck's 1280x800 lands there), split above. The
options-menu display page carries layout: auto / single / split so either
can be forced. Persisted in options.cfg like text_scale and palette.
- SONG is home; NOTES is a deep dive. In his words:
> "pattern screen doesn't need to have all the pills for different sounds / > patterns, it makes sense instead to go back to song screen as 'home', and > pattern is 'deep dive' into mostly the notes editor"
So both pickers live on the home screen - the CHANNELS chips (1:1 with song rows) and the pattern pills. The NOTES screen carries almost nothing but the roll: the transport, the change-instrument row, and the hint. - The change-instrument row is the one deliberate overlap:
> "consider that we have some overlap on both. both show 'change instrument > for channel' so e.g. u can mess with synth and then test the song, or mess > with it and test the pattern"
It is the entry to the sound-editor modal, whose whole point (#257) is
dial -> listen -> dial. Square plays the song from the home screen and the
pattern from the notes screen, so a row on each means you can shape a
channel against either kind of listening without a screen swap in between.
Both instances target EditorState.CurrentSoundIdx - two doors to one
thing, not two states to keep in sync.
Picking a *different* pattern now means going home. Two existing gestures already cover the common cases and should be checked against this, not reinvented: L1/R1 (and the held-shoulder + d-pad chord) walk the editing cell through the song without leaving the roll (#197/#245), and △ returns home to the cell whose pattern is open. If those turn out to be enough, the pills genuinely belong on home only; if they don't, that is the finding to report rather than quietly adding pills back.
- The #335 focus chain splits unevenly. Today it is one vertical chain
`menu -> SONG header -> SONG window -> CHANNELS chips -> change-instrument ->
pills -> play pattern -> roll`. Home keeps nearly all of it
(menu -> header -> window -> chips -> pills -> change-instrument), and the
deep dive gets a short one (change-instrument -> play pattern -> roll).
The seam wiring has to clamp rather than cross: SoundPicker.WireVertical's
down-target and PatternPicker.WireVertical's up-target both currently
reach across what is now a screen boundary, and the change-instrument row
exists on both screens so its neighbours differ per screen.
games/tonapse/CONTROLS.md documents the single chain and must be updated
with it.
- Triangle has to do both jobs. It currently means "teleport focus to the
other half" and must now also mean "show the other half", without losing the
#335 rule that it always targets the cell whose pattern is open.
- The CONTROLS guide column eats horizontal width that a Deck does not
have - decide whether it stays pinned, collapses, or folds into the
screen-switch hint on the single-screen layout. Open point; flagging rather
than pre-deciding.
- Probes. focus-grammar.json and focus-cujs.json lock the current
single chain and will need a single-screen sibling; the layout also needs a
probe run at Deck geometry.
Related: #257 (page flow and scrolling - this is the Steam Deck end of it), #394 (auto-scroll the song window during playback).
None.
No comments.