Skip to content

Swipe Sill's controls away for a larger picture (#279, #280) - #302

Open
addhumal wants to merge 1 commit into
Saffsanity:mainfrom
addhumal:larger-picture-swipe
Open

addhumal wants to merge 1 commit into
Saffsanity:mainfrom
addhumal:larger-picture-swipe

Conversation

@addhumal

@addhumal addhumal commented Nov 3, 2026

Copy link
Copy Markdown
Contributor

Closes #279 and #280. Sill's controls can now be swiped away so the picture gets the screen. Upright, the picture grows into the room they leave.

How it works

  • Sideways: a swipe up on the bar hides it, and the picture fills the screen.
  • Upright, iPhone or iPad:
  • The way back:
    • With everything hidden, a swipe in from the edge the controls left brings them all back: the top sideways, the bottom upright. Sill takes that swipe ahead of iOS's own.
    • A small grabber shows at that edge for 2 s after hiding, and it's a button.
  • VoiceOver: "Show Sill's controls" on the picture, and "Hide Sill's controls" and "Show the trackpad" on the rows.
  • Which swipe: it starts on the controls, never on the picture, where one finger belongs to the Mac. It must be 40 pt and twice as far up or down as across, so the thumbnail strip's sideways scroll is no swipe.
  • Nothing hides while the app drawer, Settings or Aa's ruler is open. Turned sideways with only the trackpad hidden, the bar shows (it has no trackpad).
  • The rules are HiddenControls: pure, in PhonePortraitLayout.swift. DEBUG: -SillHideControls trackpad|all.
  • This builds on main, not on Stream: Hide Top Bar in landscape, shake to show it again (#92) #197 (Hide Top Bar, shake) or Immersive: the stream edge to edge on an iPad with a hardware keyboard #161 (immersive). They overlap in purpose; which to keep is your call.

Problems found, and how they were fixed

  • Dead code. A mutant that removed my "not over a keyboard" guard survived: over a keyboard, Larger Picture sets the picture's height anyway. The guard went.
  • A blank VoiceOver action. A conditional action name would have left an empty-named action when nothing is hidden. It now uses accessibilityActions, with "Show the trackpad" only when it's hidden.
  • Moved mutant. M3's pattern moved with the edit and was repointed.

Checks

  • phone-portrait: 491 checks (7 new: the steps, the swipe rule, 273 phone sizes with the trackpad hidden: the picture takes all its room, the rows unchanged, nothing off the screen). 79 of 79 mutants (6 new).
  • run-all.sh: all passed.
  • The three iOS builds: Debug and Release for the simulator, Debug for a device.
  • Harness photos on a private iPad Pro 13" simulator (iOS 27.0, deleted after): a 390×844 phone upright with and without the trackpad, the iPad upright without it, and sideways with everything hidden.

Not checked: the swipes and the edge swipe with a real finger (no touch rig was run), the grabber's 2 s, the Duo's halves, VoiceOver.

@Saffsanity: on the iPhone upright, swipe down on the buttons twice, then swipe up from the bottom edge. Sideways, swipe up on the bar, then down from the top.

…y#279, Saffsanity#280)

Noah's way back (2026-11-02): a swipe in from the edge the controls left,
with a small grabber there for 2 s after hiding.

- Sideways: a swipe up on the bar hides it; the picture fills the screen.
- Upright, on an iPhone or an iPad: a swipe down on the rows hides the
  trackpad and the picture takes its room (Saffsanity#280: PhonePortraitLayout's
  trackpadHidden, the halves' own split), the viewport following, so the
  Mac fits the window to the taller picture; a second swipe hides the rest.
  A swipe up on the rows brings the trackpad back.
- Everything hidden: a swipe in from the top (sideways) or the bottom
  (upright) brings it all back, ahead of iOS's own edge swipe
  (defersSystemGestures); the grabber is a button; VoiceOver has "Show
  Sill's controls" on the picture, "Hide Sill's controls" and "Show the
  trackpad" on the rows. Turned sideways with only the trackpad hidden, the
  bar shows. Not while the drawer, Settings or Aa's ruler is open.
- HiddenControls (pure, in PhonePortraitLayout.swift): the steps, the way
  back, and what counts as a swipe (40 pt, twice as far up or down as
  across: a thumbnail strip's scroll is no swipe).
- DEBUG: -SillHideControls trackpad|all.

Checks: phone-portrait 491 (7 new: the steps, the swipe, 273 phone sizes
with the trackpad hidden) and 79 of 79 mutants (6 new; M3 repointed; an
equivalent one showed a dead guard, removed); run-all.sh all passed; the
three iOS builds; harness photos on a private iPad Pro 13" simulator
(iOS 27.0, deleted after): a 390x844 phone upright with and without the
trackpad, the iPad upright without it, sideways with everything hidden.

This branch has not been deployed

No deployments
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.

Swipe the UI away for a larger picture

1 participant