Skip to content

iPhone upright: zoom the picture from Aa, the Mac's pointer held in the middle (1 of 5) - #202

Open
RaffaelFerro wants to merge 1 commit into
Saffsanity:mainfrom
RaffaelFerro:pr-zoom
Open

RaffaelFerro wants to merge 1 commit into
Saffsanity:mainfrom
RaffaelFerro:pr-zoom

Conversation

@RaffaelFerro

@RaffaelFerro RaffaelFerro commented Oct 21, 2026 •

Copy link
Copy Markdown

Part 1 of 5. Series: #202 zoom → #203 Aa's Auto → #204 strip stacks → #205 Shortcuts → #206 Full Screen. Each part builds on the one before; this one stands alone.

What

Zoom the picture on an iPhone held upright, on the device alone, with the Mac's pointer held in the middle (as macOS's own Zoom does).

  • Tap Aa to turn the zoom on (2×, or the last zoom used) or off. Hold Aa and move up for the zoom's ruler (1×, 1.5×, 2×, 3×, 4×) above Aa's own. Two-finger double tap on the picture toggles it too. Aa's label shows the zoom while on ("1× 🔍2×").
  • The pointer stays in the middle; the view stops at the frame's edges.
  • Touches, scrolls and the Pencil map back through the zoom, so a click lands under the finger. The trackpad slows by the zoom, so the pointer moves as far on the glass as without it.
  • The picture holds still while a finger is on it (otherwise a drag on the Mac would chase itself), and a finger's click is followed only after the double-click time, so a double click stays one.
  • Each source keeps its zoom (a window, the Desktop).
  • Only on a phone held upright; sideways and on an iPad nothing changes. Nothing new on the wire.

How

  • PictureZoom (new, pure geometry): where the magnified frame is drawn, the focus, the hold under a finger, the per-source memory.
  • HEVCDisplayView: the AVSampleBufferDisplayLayer now lives in a subview, so the zoom transforms the picture while the pointer sprite and the HUD keep their size; the sprite is placed in the zoomed frame.
  • InputOverlay maps through zoom.rect; a two-finger double-tap recognizer that holds nothing back (cancelsTouchesInView = false).
  • TrackpadView divides its motion by the zoom.
  • TextScaleControl takes an optional zoom: a quick tap toggles it, a hold or a move opens the rulers.

Checks

  • Tests/checks/picture-zoom (new, in CI's matrix): 45 checks, 20,000 random zooms against the geometry's rules; 19 of 19 mutants caught.
  • phone-portrait, tour, pointer-presence unchanged and passing. iOS app built with Xcode 27.1, Debug for the simulator and Release for a device.

Tested

Tried by Raffael on an iPhone 12 Pro (Release build) against Sill for Mac 0.5.1: the zoom and the pointer in the middle work. Not tried on an iPad (unchanged there by design) or a Duo; the double click while zoomed and the two-finger double tap not yet confirmed on the device.

🤖 Generated with Claude Code

…he middle

PictureZoom (Tests/checks/picture-zoom): the frame magnified 1x to 4x on the device alone, the
pointer held in the picture's middle and stopping at the frame's edges. A tap on Aa toggles it, a
hold shows its ruler above Aa's (the finger moves up to it), a two-finger double tap toggles it on
the picture. Touches, scrolls and the Pencil map back through it; the trackpad slows by it; the
picture holds still while a finger is on it, and a finger's click is followed only after the
double-click time. Each source keeps its zoom. Only on a phone held upright; nothing sent.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Saffsanity

Copy link
Copy Markdown
Owner

Heads-up: pinch to zoom on the picture is merged into main (#196), so an Aa-driven zoom would now sit beside it. If you keep this one, please rebase on main so the two agree on who owns two fingers (StreamZoom.Stroke).

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.

2 participants