FR-DEV-16 — Give develop a keyboard vocabulary, and generate it #6

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

The develop view shall have a documented keyboard vocabulary, generated into the gesture book from the code that implements it.

Why

ui/dr-ui/src/gesture_book.rs — which is generated by cargo run -p traceability -- gestures and is the application's own statement of what it can do — currently holds 16 gestures across exactly two sections: Library grid and People. Develop has none. Two of the sixteen carry a key binding at all.

Either the bindings do not exist or they are undiscoverable, and to a photographer those are the same problem. Editing rhythm depends on the hands staying put: reaching for a menu breaks the concentration of an edit the same way it breaks the pace of a cull.

Known to exist today: Ctrl+Z / Ctrl+Shift+Z (app.slint:2111). That is the whole develop vocabulary.

Acceptance

At minimum, each bound and each tagged beside its implementation:

  • Next / previous frame
  • Fit ↔ 1:1 (see the 1:1 inspection ticket)
  • Hold-to-compare against the original (see that ticket)
  • Undo / redo — already bound, needs the tag
  • Reset the focused control
  • Toggle the selected mask layer
  • Cycle panel groups
  • Copy settings / paste settings

And:

  • cargo run -p traceability -- gestures emits a Develop section — the book cannot describe a gesture the application does not have.
  • Every binding has a pointer or touch equivalent; none is keyboard-only (FR-DEV-3b, NFR-A11Y-2).

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

The develop view shall have a **documented keyboard vocabulary**, generated into the gesture book from the code that implements it. ## Why `ui/dr-ui/src/gesture_book.rs` — which is generated by `cargo run -p traceability -- gestures` and is the application's own statement of what it can do — currently holds **16 gestures across exactly two sections: Library grid and People.** Develop has none. Two of the sixteen carry a key binding at all. Either the bindings do not exist or they are undiscoverable, and to a photographer those are the same problem. Editing rhythm depends on the hands staying put: reaching for a menu breaks the concentration of an edit the same way it breaks the pace of a cull. Known to exist today: Ctrl+Z / Ctrl+Shift+Z (`app.slint:2111`). That is the whole develop vocabulary. ## Acceptance At minimum, each bound and each tagged beside its implementation: - [ ] Next / previous frame - [ ] Fit ↔ 1:1 (see the 1:1 inspection ticket) - [ ] Hold-to-compare against the original (see that ticket) - [ ] Undo / redo — already bound, needs the tag - [ ] Reset the focused control - [ ] Toggle the selected mask layer - [ ] Cycle panel groups - [ ] Copy settings / paste settings And: - [ ] `cargo run -p traceability -- gestures` emits a Develop section — the book cannot describe a gesture the application does not have. - [ ] Every binding has a pointer or touch equivalent; none is keyboard-only (FR-DEV-3b, NFR-A11Y-2). --- Part of the Develop Ergonomics spec (FR-DEV series proposal), 2026-09-05.
dtourolle added the developergonomicsuisize:S labels 2026-09-05 16:09:17 +00:00
Author
Owner

Bindings to cover once they exist: #2 (fit ↔ 1:1) and #3 (hold-to-compare).

Bindings to cover once they exist: #2 (fit ↔ 1:1) and #3 (hold-to-compare).
Author
Owner

Landed across 9cc52fd (2026-09-12) and its predecessors: every gesture in the clause is bound, including the two this issue's follow-up named (reset the last-moved control, hide the selected mask layer). FR-DEV-16 is tagged in five files and the book is generated.

Landed across 9cc52fd (2026-09-12) and its predecessors: every gesture in the clause is bound, including the two this issue's follow-up named (reset the last-moved control, hide the selected mask layer). FR-DEV-16 is tagged in five files and the book is generated.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dtourolle/DarkRoom#6