FR-DEV-13 — A 1:1 inspection zoom that survives the next frame #2

Closed
opened 2026-09-05 16:09:15 +00:00 by dtourolle · 2 comments
Owner

The develop view shall offer a one-gesture 1:1 zoom about a chosen point, and that point shall persist as the photographer moves between frames.

Why

Noise reduction and sharpening cannot be judged at fit view — judging them there is the documented cause of over-sharpening across every source consulted. Persistence across frames is what turns "check the same eye on forty portraits" into forty keystrokes instead of forty pans.

Today: scroll zooms about the pointer (DevelopSession::zoom_about) and there is a reset-to-fit (reset_zoom), but no gesture reaches 100%, and the zoom does not survive opening another frame.

Acceptance

  • A key toggles between fit and 1:1, anchored on the pointer or on the last inspected point.
  • Opening the next frame restores the same normalised inspection point at the same zoom.
  • The zoom stays a viewing state: it does not enter the edit, the sidecar or the export. (Already true — framing.rs separates view() from crop(), and develop.rs deliberately restores framing around an export. Must stay true.)
  • Documented in the gesture book (see the develop keyboard vocabulary ticket).

Lands in

core/dr-pipeline/src/framing.rs already has the mechanism; this is persistence across sessions plus a binding in ui/dr-ui.


Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.

The develop view shall offer a **one-gesture 1:1 zoom** about a chosen point, and that point shall **persist as the photographer moves between frames.** ## Why Noise reduction and sharpening cannot be judged at fit view — judging them there is the documented cause of over-sharpening across every source consulted. Persistence across frames is what turns "check the same eye on forty portraits" into forty keystrokes instead of forty pans. Today: scroll zooms about the pointer (`DevelopSession::zoom_about`) and there is a reset-to-fit (`reset_zoom`), but no gesture reaches 100%, and the zoom does not survive opening another frame. ## Acceptance - [ ] A key toggles between fit and 1:1, anchored on the pointer or on the last inspected point. - [ ] Opening the next frame restores the same normalised inspection point at the same zoom. - [ ] The zoom stays a *viewing* state: it does not enter the edit, the sidecar or the export. (Already true — `framing.rs` separates `view()` from `crop()`, and `develop.rs` deliberately restores framing around an export. Must stay true.) - [ ] Documented in the gesture book (see the develop keyboard vocabulary ticket). ## Lands in `core/dr-pipeline/src/framing.rs` already has the mechanism; this is persistence across sessions plus a binding in `ui/dr-ui`. --- Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
dtourolle added the developergonomicsuisize:S labels 2026-09-05 16:09:15 +00:00
Author
Owner

Feeds #6 (the binding needs a gesture-book entry) and #3 (fit ↔ 1:1 and hold-to-compare are the two halves of judging an edit).

**Feeds** #6 (the binding needs a gesture-book entry) and #3 (fit ↔ 1:1 and hold-to-compare are the two halves of judging an edit).
Author
Owner

Done in 9b674a8 ("Let the photographer look at the pixels, and keep looking"): the 1:1 toggle is anchored on the pointer (toggle_inspection / inspect_at in develop/framing.rs), the next frame restores the inspected point (lib.rs, inspect_at(held.at…)), it is a view state that leaves history alone, and it is in the gesture book as Z / double-tap / double-click.

Done in 9b674a8 ("Let the photographer look at the pixels, and keep looking"): the 1:1 toggle is anchored on the pointer (`toggle_inspection` / `inspect_at` in `develop/framing.rs`), the next frame restores the inspected point (`lib.rs`, `inspect_at(held.at…)`), it is a view state that leaves history alone, and it is in the gesture book as Z / double-tap / double-click.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dtourolle/DarkRoom#2