Link fifty gestures on the help sheet to the manual section that shows them

The sheet could now offer "See it", but no gesture said where to look.

Every GESTURE tag whose move the manual describes names that section:
the white-balance picker, zoom and pan, masks, undo and snapshots,
export, colour labels and ratings, selection, collections, the People
page, thumbnail size. Fifty of the fifty-one; the one left, putting a
single control back to its default, has no section and is too small to
earn one.

Three important gestures had nowhere to land, so the manual gains three
short sections, without pictures for now: Bursts (opening a folded
burst, choosing the frame it shows, and the eyes-open filter), Moving
between photographs (the roll, the arrows and A/D in develop) and
Copying settings (Copy, Paste, Paste to N, and choosing what a copy
carries). The page, the gesture book and docs/gestures.md are
regenerated from them.
This commit is contained in:
2026-09-24 23:25:37 -04:00
parent 7591738c73
commit 150e53e878
12 changed files with 276 additions and 128 deletions
+20
View File
@@ -1634,6 +1634,7 @@ export component LibraryGrid inherits Rectangle {
// select a second photograph — the first tap would open it.
// The hold is the fast way in and the button is the one that
// can be found.
// manual: selecting-several
//
// GESTURE: Add or remove one photograph
// where: Library grid
@@ -1642,12 +1643,14 @@ export component LibraryGrid inherits Rectangle {
// why: While selecting, a tap never opens. That is the whole point
// of the mode: one meaning per gesture at a time. Press Done to
// get tap-to-open back.
// manual: selecting-several
//
// GESTURE: Leave selecting
// where: Library grid
// touch: Press Done in the header
// pointer: Press Done in the header
// keys: Escape
// manual: selecting-several
in property <bool> select-mode: false;
callback toggle-select-mode();
@@ -1683,6 +1686,7 @@ export component LibraryGrid inherits Rectangle {
// there the drag cannot be lost to a scroll. A mouse never
// waits: the cursor is precise enough that a sideways drag is
// unambiguous from the first pixel.
// manual: collections
in-out property <int> held-row: -1;
/// TRACES: FR-CAT-5
// --- reordering a manual collection (FR-CAT-7) --------------------------
@@ -1749,6 +1753,7 @@ export component LibraryGrid inherits Rectangle {
// can scroll between the two taps — the ranges that hurt on a
// tablet are longer than a screenful, which is exactly where a
// finger sweep runs out.
// manual: selecting-several
property <bool> ranging: false;
// A range armed against nothing has no anchor to extend from, and the strip
@@ -2461,6 +2466,7 @@ export component LibraryGrid inherits Rectangle {
// drops frames where the chosen people are caught
// blinking, and leaves sunglasses and eyes it could
// not read alone.
// manual: bursts
if root.filter-people.length > 0: FilterChip {
icon: "eye";
label: "Eyes open";
@@ -2492,6 +2498,7 @@ export component LibraryGrid inherits Rectangle {
// intersection. The tray is where both terms and the
// choice between them live, because a filter belongs
// on the filter bar.
// manual: people
FilterChip {
icon: root.people-tray ? "chevron-down" : "chevron-right";
label: "People";
@@ -2610,6 +2617,7 @@ export component LibraryGrid inherits Rectangle {
// why: Each chip is the label's mark and its name, so
// the one you want is found by reading it; tap
// the lit chip again to show every label.
// manual: rating-and-flagging
//
// TRACES: FR-CAT-6 | NFR-A11Y-3
// One chip per colour label, each the cell's own mark and the
@@ -3077,6 +3085,7 @@ export component LibraryGrid inherits Rectangle {
// plain chord opens them beside an Export
// button and the shifted one skips straight to
// exporting.
// manual: export
//
// TRACES: FR-EXP-7 | FR-UI-5
// Before the bare keys below: a chord must not also be read
@@ -3096,6 +3105,7 @@ export component LibraryGrid inherits Rectangle {
// selection bar
// pointer: Select them, then "Paste to N"
// keys: Ctrl+V
// manual: copying-settings
//
// TRACES: FR-DEV-6 | FR-UI-5
// Silent with nothing copied, as the button is disabled.
@@ -3123,6 +3133,7 @@ export component LibraryGrid inherits Rectangle {
// with a ceiling — the twos and threes still
// to be decided — is the keyboard's alone, and
// the bar says so in words while it holds.
// manual: rating-and-flagging
//
// Held rather than typed in sequence, so nothing waits
// to find out whether a second digit is coming: every
@@ -3176,6 +3187,7 @@ export component LibraryGrid inherits Rectangle {
// mark carries its label's initial, so the
// label is read without telling the colours
// apart.
// manual: rating-and-flagging
//
// TRACES: FR-CAT-5 | FR-UI-5 | NFR-A11Y-3
// After the F chord above, which has returned for its own
@@ -3348,6 +3360,7 @@ export component LibraryGrid inherits Rectangle {
// why: There is no wheel on a tablet, so without the
// pinch the cell size could only be changed by a
// control a finger cannot reach.
// manual: getting-about
grid-pinch := ScaleRotateGestureHandler {
width: 100%;
height: parent.viewport-height;
@@ -3549,6 +3562,7 @@ export component LibraryGrid inherits Rectangle {
// why: The selection is what the drag carries, which is
// why selecting several is worth the mode: forty
// photographs file in one gesture.
// manual: collections
for cell[i] in root.cells: DragArea {
// Cells are positioned at their **absolute** place in the
// library, not their index in the loaded window: the window
@@ -3846,6 +3860,7 @@ export component LibraryGrid inherits Rectangle {
// finger to dwell 120 ms instead, and that
// rejected ordinary taps — a real tap is
// often quicker than a brush.
// manual: developing-a-photograph
property <int> down-finger: -1;
property <bool> click-pending: false;
@@ -3963,6 +3978,7 @@ export component LibraryGrid inherits Rectangle {
// why: A star has to take the press without it
// also reaching the cell, or every rating
// throws the user into develop.
// manual: rating-and-flagging
//
// --- the rating strip, INSIDE the cell's hit area ---
//
@@ -4104,6 +4120,7 @@ export component LibraryGrid inherits Rectangle {
// they are open and side by side, which is
// the one moment the alternatives are on
// screen to be compared.
// manual: bursts
//
// Drawn on every frame of an open group and on none of
// a folded one. Folded, the single cell showing *is*
@@ -4769,6 +4786,7 @@ export component LibraryGrid inherits Rectangle {
// why: Distinct from Done, which leaves the mode
// entirely. Clearing keeps it, so the next
// selection can start straight away.
// manual: selecting-several
if !root.ranging && root.selected-count > 0: Button {
text: "Clear";
y: (parent.height - self.height) / 2;
@@ -4788,6 +4806,7 @@ export component LibraryGrid inherits Rectangle {
// taps otherwise, and "all of them, except those
// three" is a far more common shape than the taps it
// took to say it.
// manual: selecting-several
if !root.ranging && root.selected-count > 0: Button {
text: "Select all";
y: (parent.height - self.height) / 2;
@@ -4928,6 +4947,7 @@ export component LibraryGrid inherits Rectangle {
// three collections and never which. This is the sheet
// that names them, and the only way out of one the grid
// is not currently scoped to.
// manual: collections
if !root.ranging && root.selected-count > 0: Button {
text: "Collections…";
y: (parent.height - self.height) / 2;