Fail CI when a key is bound but not in the gesture book, or listed but not bound
The gesture book is generated from GESTURE tags, so it could not describe a gesture nobody tagged, but nothing made anyone tag one. The arrow keys, Enter, P, X, U, Delete, F1 and F2 all worked in the grid with no line in the help sheet, and a tag could name a key whose handler had gone. Key handlers now compare one canonical string, Keys.chord(event) == "Ctrl+Z", instead of reading event.text and the modifiers themselves. keys.slint folds the key and its modifiers into that spelling, so the literal in the handler is the whole binding and the checker reads exactly what the handler dispatches on. Each handler carries a KEYMAP comment naming the gesture-book section its keys belong to, and a tag's keys field names its keys between backticks. gestures-check now fails when a handler binds a key no tag in that section names, when a tag names a key no handler there binds, when any .slint file other than keys.slint reads event.text, when a compared literal is not canonical, and when keys.slint's named keys drift from the Rust list. Spellings are normalised in one place, chord.rs: Ctrl+z, Control+Z and LeftArrow all mean what the handler's "Ctrl+Z" and "Left" mean. Shift and Alt count only for letters and named keys, because on the French layout every digit needs shift and a 6 has to be a 6 however it was typed. A Rust keymap that both dispatched and was read by the generator was the alternative. It would have moved the handlers' decisions away from the Slint state they depend on, and a window that forgot to install it would have had no working keys at all. The keys that were already bound and undocumented are now tagged.
This commit is contained in:
+45
-45
File diff suppressed because one or more lines are too long
+133
-66
@@ -5,7 +5,7 @@
|
||||
|
||||
Every entry here is extracted from the comment beside the code that implements it, so this file cannot describe a gesture the application does not have. Add one by writing a `GESTURE:` block next to the implementation; there is nowhere else to write it.
|
||||
|
||||
51 gestures, in 4 places.
|
||||
58 gestures, in 5 places.
|
||||
|
||||
## Develop
|
||||
|
||||
@@ -27,7 +27,7 @@ Sampling a neutral is the first move of the tonal pass — every colour judgemen
|
||||
|
||||
Anchored on the fingers' midpoint, and on the pointer, so the gesture reads as magnifying the picture rather than sliding it about. Double-tap is the way to an exact 1:1; this is the way to everything in between. Past 1:1 the pixels are shown as they are, square and unsmoothed; below it, filtered.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:1780`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:1792`</sub>
|
||||
|
||||
### Move a magnified photograph about
|
||||
|
||||
@@ -37,7 +37,7 @@ Anchored on the fingers' midpoint, and on the pointer, so the gesture reads as m
|
||||
|
||||
Only once there is something outside the viewport to reach, which is why the cursor becomes a hand exactly then. The view is clamped to the frame: panning past the edge would show undefined area beside the photograph, and that reads as a rendering fault rather than as the end of the picture.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:1874`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:1886`</sub>
|
||||
|
||||
### Paint a mask by hand
|
||||
|
||||
@@ -47,143 +47,151 @@ Only once there is something outside the viewport to reach, which is why the cur
|
||||
|
||||
A model's mask stops inside a shoulder and leaks into the hair, and no single edge control fixes two errors that go opposite ways. The whole stroke is one step in the history, so taking a mark back costs one press however long it took to make.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:1962`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:1974`</sub>
|
||||
|
||||
### Take back the last change
|
||||
|
||||
- **Touch** — Tap the step above the current one in the History list
|
||||
- **Pointer** — Click it, or press Undo in the History header
|
||||
- **Keyboard** — Ctrl+Z
|
||||
- **Keyboard** — `Ctrl+Z`
|
||||
- **See it** — [in the manual](manual/README.md#history-snapshots-presets)
|
||||
|
||||
A whole drag is one step, so undo takes back a decision rather than a frame of a gesture. The list is there because arriving six steps back costs what arriving from one does.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2194`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2208`</sub>
|
||||
|
||||
### Do it again after taking it back
|
||||
|
||||
- **Touch** — Tap the step below the current one in the History list
|
||||
- **Pointer** — Click it, or press Redo in the History header
|
||||
- **Keyboard** — Ctrl+Shift+Z
|
||||
- **Keyboard** — `Ctrl+Shift+Z`
|
||||
- **See it** — [in the manual](manual/README.md#history-snapshots-presets)
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2208`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2222`</sub>
|
||||
|
||||
### Remove a repair
|
||||
|
||||
- **Touch** — Tap it, then Delete Repair
|
||||
- **Pointer** — Click it, then Delete Repair
|
||||
- **Keyboard** — `Delete` or `Backspace`, while repairing
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2240`</sub>
|
||||
|
||||
### Copy the settings from this photograph
|
||||
|
||||
- **Touch** — Press Copy in the top bar
|
||||
- **Pointer** — Press Copy in the top bar
|
||||
- **Keyboard** — Ctrl+C
|
||||
- **Keyboard** — `Ctrl+C`
|
||||
- **See it** — [in the manual](manual/README.md#copying-settings)
|
||||
|
||||
The button is the copy that has to work: a tablet has no modifier key to hold and no menu bar to hang the action from. The shortcut is an accelerator for a control that is on screen either way.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2242`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2259`</sub>
|
||||
|
||||
### Paste the settings onto this photograph
|
||||
|
||||
- **Touch** — Press Paste in the top bar
|
||||
- **Pointer** — Press Paste in the top bar
|
||||
- **Keyboard** — Ctrl+V
|
||||
- **Keyboard** — `Ctrl+V`
|
||||
- **See it** — [in the manual](manual/README.md#copying-settings)
|
||||
|
||||
The button names what would be pasted — "3 adjustments", and whether the crop is coming with it — which the shortcut cannot say. Both paste the same scope.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2255`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2272`</sub>
|
||||
|
||||
### Choose which kinds of edit a copy carries
|
||||
|
||||
- **Touch** — Open Presets and toggle the kinds
|
||||
- **Pointer** — Open Presets and toggle the kinds
|
||||
- **Keyboard** — Ctrl+Shift+C, which offers Copy beside them
|
||||
- **Keyboard** — `Ctrl+Shift+C`, which offers Copy beside them
|
||||
- **See it** — [in the manual](manual/README.md#copying-settings)
|
||||
|
||||
Lightroom's Copy Settings. Pasting a look across a shoot usually means leaving each frame's crop and rotation alone, and that is a choice to make at the moment of copying.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2273`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2290`</sub>
|
||||
|
||||
### Export this photograph as the last one was
|
||||
|
||||
- **Touch** — Press Export in the top bar
|
||||
- **Pointer** — Press Export in the top bar
|
||||
- **Keyboard** — Ctrl+Shift+E
|
||||
- **Keyboard** — `Ctrl+Shift+E`
|
||||
- **See it** — [in the manual](manual/README.md#export)
|
||||
|
||||
Every export runs on the defaults in Settings, so "as the last one was" is what the button already does. The chord is Lightroom's and darktable's, kept so hands that learned it there need not learn it again.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2303`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2315`</sub>
|
||||
|
||||
### Choose how to export, then export
|
||||
|
||||
- **Touch** — Open Settings, then Export defaults
|
||||
- **Pointer** — Open Settings, then Export defaults
|
||||
- **Keyboard** — Ctrl+E
|
||||
- **Keyboard** — `Ctrl+E`
|
||||
- **See it** — [in the manual](manual/README.md#export)
|
||||
|
||||
The export sheet is the export defaults alone with an Export button. What is chosen there is kept, so it is also what the next Ctrl+Shift+E uses.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2316`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2328`</sub>
|
||||
|
||||
### Change which group of adjustments is on screen
|
||||
|
||||
- **Touch** — Tap a group in the rail down the left
|
||||
- **Pointer** — Click a group in the strip above the develop column
|
||||
- **Keyboard** — [ and ] step through them, wrapping round through "everything"
|
||||
- **Keyboard** — `[` and `]` step through them, wrapping round through "everything"
|
||||
- **See it** — [in the manual](manual/README.md#developing-a-photograph)
|
||||
|
||||
The groups are whatever the operation set declares itself to be about, so there are as many as the pipeline has and no key can be assigned to one of them by name. Stepping is the binding that survives a node being added.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2342`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2352`</sub>
|
||||
|
||||
### Look at the photograph at 1:1
|
||||
|
||||
- **Touch** — Double-tap the photograph
|
||||
- **Pointer** — Double-click it, or press the zoom readout floating over the canvas
|
||||
- **Keyboard** — Z
|
||||
- **Keyboard** — `Z`
|
||||
- **See it** — [in the manual](manual/README.md#looking-closer)
|
||||
|
||||
Noise reduction and capture sharpening are judgements about single pixels, and a fitted view averages several of the file's into each one on screen — so the frame looks softer than it is and the correction goes too far. The point and the magnification survive opening the next photograph, which is what makes checking the same eye across forty portraits forty keystrokes rather than forty pans. From 1:1 on the photograph is drawn as its own pixels, each a hard-edged square, rather than smoothed into a blur.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2378`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2388`</sub>
|
||||
|
||||
### Give this photograph a colour label
|
||||
|
||||
- **Touch** — Tap Label in the top bar, then a colour
|
||||
- **Pointer** — Click Label in the top bar, then a colour
|
||||
- **Keyboard** — 6 red, 7 yellow, 8 green, 9 blue; the same key again takes it off
|
||||
- **Keyboard** — `6` red, `7` yellow, `8` green, `9` blue; the same key again takes it off
|
||||
- **See it** — [in the manual](manual/README.md#rating-and-flagging)
|
||||
|
||||
The grid's keys, on the photograph that is open, so labelling while stepping through a folder is one hand's work. The bar names the label in words beside its mark.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2434`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2440`</sub>
|
||||
|
||||
### Move to the next or previous photograph
|
||||
|
||||
- **Touch** — Tap a frame in the roll along the foot of the canvas
|
||||
- **Pointer** — Click a frame in the roll
|
||||
- **Keyboard** — Right arrow, D or space for the next; left arrow or A for the one before
|
||||
- **Keyboard** — `→`, `D` or `Space` for the next; `←` or `A` for the one before
|
||||
- **See it** — [in the manual](manual/README.md#moving-between-photographs)
|
||||
|
||||
The edit on screen is saved on the way out, so stepping through a folder is as much a departure as going back to the grid and loses nothing. A and D as well as the arrows, so the left hand steps along the roll while the right stays on the mouse. Unmodified only: Ctrl+D and Ctrl+A are not this.
|
||||
The edit on screen is saved on the way out, so stepping through a folder is as much a departure as going back to the grid and loses nothing. A and D as well as the arrows, so the left hand steps along the roll while the right stays on the mouse.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2460`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2465`</sub>
|
||||
|
||||
### See the photograph before you edited it
|
||||
|
||||
- **Touch** — Press and hold "Before"
|
||||
- **Pointer** — Press and hold "Before"
|
||||
- **Keyboard** — Hold \
|
||||
- **Keyboard** — Hold `\`
|
||||
- **See it** — [in the manual](manual/README.md#light)
|
||||
|
||||
Held rather than toggled, and no split screen: a split halves the working image on the tablet the column was sized for, and the comparison photographers describe making is a flick back and forth. It takes no history step, so checking whether a frame is overcooked costs nothing to undo afterwards.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:2594`</sub>
|
||||
<sub>`ui/dr-ui/ui/app.slint:2595`</sub>
|
||||
|
||||
### Put one control back to its default
|
||||
|
||||
- **Touch** — Double-tap its track
|
||||
- **Pointer** — Double-click its track, or right-click it
|
||||
- **Keyboard** — R, for the control last moved
|
||||
- **Keyboard** — `R`, for the control last moved
|
||||
|
||||
The column is 280px wide and the colour mixer alone puts thirty-six of these in it, so a reset button per row would be most of the width. Two ways in with a pointer because right-click is the one a hand already reaches for and double-click is the one that needs no second button. A group's own reset is in its heading; this is the single control.
|
||||
|
||||
@@ -213,10 +221,10 @@ The history is forgotten with the sitting, on purpose; a snapshot is the photogr
|
||||
|
||||
- **Touch** — Tap the ring at the head of its row
|
||||
- **Pointer** — Click the ring at the head of its row
|
||||
- **Keyboard** — H, for the selected layer history step, unlike holding "Before" — the layer really is off until it is switched back on.
|
||||
- **Keyboard** — `H`, for the selected layer
|
||||
- **See it** — [in the manual](manual/README.md#local-adjustments)
|
||||
|
||||
Disabling a layer is the before-and-after a local edit constantly wants, so it is one press away rather than inside the row. It is an edit and does take a
|
||||
Disabling a layer is the before-and-after a local edit constantly wants, so it is one press away rather than inside the row. It is an edit and does take a history step, unlike holding "Before" — the layer really is off until it is switched back on.
|
||||
|
||||
<sub>`ui/dr-ui/ui/masks.slint:213`</sub>
|
||||
|
||||
@@ -228,7 +236,7 @@ Disabling a layer is the before-and-after a local edit constantly wants, so it i
|
||||
|
||||
A mask is judged by seeing where it falls, and two are judged by seeing where they meet — so each row has its own eye rather than the panel having one, and the eye is drawn in the colour the mask shows in, so the row says which shape on the picture is its. Nothing about the edit changes: this is how the photograph is looked at, and takes no history step.
|
||||
|
||||
<sub>`ui/dr-ui/ui/masks.slint:281`</sub>
|
||||
<sub>`ui/dr-ui/ui/masks.slint:280`</sub>
|
||||
|
||||
### Change how a part joins its mask
|
||||
|
||||
@@ -238,7 +246,7 @@ A mask is judged by seeing where it falls, and two are judged by seeing where th
|
||||
|
||||
A chip that cycles rather than a menu, because a photographer flips a join while looking at the picture, not at the panel: add, take away, keep only where both agree, and round.
|
||||
|
||||
<sub>`ui/dr-ui/ui/masks.slint:368`</sub>
|
||||
<sub>`ui/dr-ui/ui/masks.slint:367`</sub>
|
||||
|
||||
### Leave one part out of a mask, and put it back
|
||||
|
||||
@@ -248,7 +256,19 @@ A chip that cycles rather than a menu, because a photographer flips a join while
|
||||
|
||||
The question a correction raises is whether it did what it was for — whether the stroke filled the shoulder, whether the subtracted gradient took only the sky. Removing it answers that and loses it. The same ring the layer wears, one row down, because it is the same question about a smaller thing.
|
||||
|
||||
<sub>`ui/dr-ui/ui/masks.slint:408`</sub>
|
||||
<sub>`ui/dr-ui/ui/masks.slint:407`</sub>
|
||||
|
||||
## Everywhere
|
||||
|
||||
### Close what is open, or go back a step
|
||||
|
||||
- **Touch** — The system Back gesture, or the Back button
|
||||
- **Pointer** — The Close or Back button on whatever is open
|
||||
- **Keyboard** — `Escape`, or `Back` where the device has one
|
||||
|
||||
One key for "up one", innermost first: a question before the sheet under it, a sheet before the view, a view before the library. Nothing is left behind a dialogue that the key walked straight past.
|
||||
|
||||
<sub>`ui/dr-ui/ui/app.slint:916`</sub>
|
||||
|
||||
## Collections sidebar
|
||||
|
||||
@@ -260,7 +280,7 @@ The question a correction raises is whether it did what it was for — whether t
|
||||
|
||||
The tree is inside a Flickable, which claims any drag beginning inside it — so with a finger a drag on a row is a scroll until something says otherwise. The hold is that something, and it is what every mobile list already uses to pick a row up. The row lifts the moment it fires, so the gesture says it has been understood before anything moves.
|
||||
|
||||
<sub>`ui/dr-ui/ui/collections.slint:335`</sub>
|
||||
<sub>`ui/dr-ui/ui/collections.slint:337`</sub>
|
||||
|
||||
### Act on a collection — rename, nest, un-nest, delete
|
||||
|
||||
@@ -270,7 +290,7 @@ The tree is inside a Flickable, which claims any drag beginning inside it — so
|
||||
|
||||
The hold arms a drag and opens this menu, and which one you get is decided by whether you moved — the same fork the grid uses. One menu for everything done to a row, because there is one hold per row: while the hold opened the offline question by itself, nothing else the tree can do had a touch route.
|
||||
|
||||
<sub>`ui/dr-ui/ui/collections.slint:347`</sub>
|
||||
<sub>`ui/dr-ui/ui/collections.slint:349`</sub>
|
||||
|
||||
### Take a collection back out of the one it is nested in
|
||||
|
||||
@@ -280,17 +300,18 @@ The hold arms a drag and opens this menu, and which one you get is decided by wh
|
||||
|
||||
Nesting is a drag of one row onto another, and its inverse had no gesture at all: "All photographs" refused every drop, which is right for a photograph — it is already in the library — and wrong for a collection, which has a top level to be returned to. Without it a collection dragged into another was in there permanently.
|
||||
|
||||
<sub>`ui/dr-ui/ui/collections.slint:358`</sub>
|
||||
<sub>`ui/dr-ui/ui/collections.slint:360`</sub>
|
||||
|
||||
### Rename a collection
|
||||
|
||||
- **Touch** — Hold the collection, then "Rename"
|
||||
- **Pointer** — Double-click its name, or right-click it and choose "Rename"
|
||||
- **Keyboard** — `Escape` while typing abandons the new name
|
||||
- **See it** — [in the manual](manual/README.md#collections)
|
||||
|
||||
Double-click is what a file manager and a Lightroom panel use for the same thing, so it needs no discovering — but nothing on screen says so, which is what the menu item is for.
|
||||
|
||||
<sub>`ui/dr-ui/ui/collections.slint:372`</sub>
|
||||
<sub>`ui/dr-ui/ui/collections.slint:374`</sub>
|
||||
|
||||
## People
|
||||
|
||||
@@ -344,7 +365,7 @@ The right match confidence is a property of your library, not of the model. "Wha
|
||||
|
||||
Touch has no ctrl, so without a mode there is no way to 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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:1629`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:1630`</sub>
|
||||
|
||||
### Add or remove one photograph
|
||||
|
||||
@@ -354,16 +375,16 @@ Touch has no ctrl, so without a mode there is no way to select a second photogra
|
||||
|
||||
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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:1639`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:1640`</sub>
|
||||
|
||||
### Leave selecting
|
||||
|
||||
- **Touch** — Press Done in the header
|
||||
- **Pointer** — Press Done in the header
|
||||
- **Keyboard** — Escape
|
||||
- **Keyboard** — `Escape`, or `Back`; an open sheet closes first
|
||||
- **See it** — [in the manual](manual/README.md#selecting-several)
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:1648`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:1649`</sub>
|
||||
|
||||
### Pick a photograph up to drag it
|
||||
|
||||
@@ -373,17 +394,18 @@ While selecting, a tap never opens. That is the whole point of the mode: one mea
|
||||
|
||||
A finger on a photograph might be starting a scroll, and for the first half-second the grid assumes it is. Holding says otherwise, and the ring is the grid saying it heard — from 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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:1679`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:1680`</sub>
|
||||
|
||||
### Select a range
|
||||
|
||||
- **Touch** — While selecting, press "Select to…", then tap the last photograph of the run
|
||||
- **Pointer** — Shift-click the last photograph of the run
|
||||
- **Keyboard** — Shift with any key that walks the grid — `Shift+←`, `Shift+→`, `Shift+↑`, `Shift+↓`, `Shift+Page Up`, `Shift+Page Down`, `Shift+Home`, `Shift+End`
|
||||
- **See it** — [in the manual](manual/README.md#selecting-several)
|
||||
|
||||
This replaced a double tap, which had no visible state and could take forty photographs by accident. The run is resolved by the catalog rather than by what is on screen, so the grid 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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:1745`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:1746`</sub>
|
||||
|
||||
### Take the blinks out of a burst
|
||||
|
||||
@@ -393,7 +415,7 @@ This replaced a double tap, which had no visible state and could take forty phot
|
||||
|
||||
Face indexing reads each face's eyes. The chip drops frames where the chosen people are caught blinking, and leaves sunglasses and eyes it could not read alone.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:2459`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:2463`</sub>
|
||||
|
||||
### Find photographs with two people in them
|
||||
|
||||
@@ -403,7 +425,7 @@ Face indexing reads each face's eyes. The chip drops frames where the chosen peo
|
||||
|
||||
"Any of them" is a union and "all of them" is an intersection. The tray is where both terms and the choice between them live, because a filter belongs on the filter bar.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:2489`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:2493`</sub>
|
||||
|
||||
### Show only photographs with one colour label
|
||||
|
||||
@@ -413,49 +435,93 @@ Face indexing reads each face's eyes. The chip drops frames where the chosen peo
|
||||
|
||||
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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:2613`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:2617`</sub>
|
||||
|
||||
### Export the selection as the last export was
|
||||
|
||||
- **Touch** — Select them, then Export in the selection bar
|
||||
- **Pointer** — Select them, then Export in the selection bar
|
||||
- **Keyboard** — Ctrl+Shift+E, or Ctrl+E to see the export settings first
|
||||
- **Keyboard** — `Ctrl+Shift+E`, or `Ctrl+E` to see the export settings first
|
||||
- **See it** — [in the manual](manual/README.md#export)
|
||||
|
||||
Lightroom's and darktable's chords. Every export runs on the saved defaults, so the plain chord opens them beside an Export button and the shifted one skips straight to exporting.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3077`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3083`</sub>
|
||||
|
||||
### Paste copied settings onto the selection
|
||||
|
||||
- **Touch** — Select them, then "Paste to N" in the selection bar
|
||||
- **Pointer** — Select them, then "Paste to N"
|
||||
- **Keyboard** — Ctrl+V
|
||||
- **Keyboard** — `Ctrl+V`
|
||||
- **See it** — [in the manual](manual/README.md#copying-settings)
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3102`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3107`</sub>
|
||||
|
||||
### Show only photographs with some number of stars
|
||||
|
||||
- **Touch** — Tap a star chip in the filter bar
|
||||
- **Pointer** — Click a star chip in the filter bar
|
||||
- **Keyboard** — Hold F and tap a digit for exactly that many stars, or two digits for everything between them; tap F alone to show every rating again
|
||||
- **Keyboard** — Hold `F` and tap a digit, `0`–`5`, for exactly that many stars, or two digits for everything between them; tap `F` alone to show every rating again
|
||||
- **See it** — [in the manual](manual/README.md#rating-and-flagging)
|
||||
|
||||
The chips say "this many or more". A range 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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3125`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3128`</sub>
|
||||
|
||||
### Give photographs a colour label
|
||||
|
||||
- **Touch** — Select them, then Label in the selection bar and tap a colour
|
||||
- **Pointer** — Select them, then Label in the selection bar and click a colour
|
||||
- **Keyboard** — 6 red, 7 yellow, 8 green, 9 blue, with the pointer over it or on the selection; the same key again takes the label off
|
||||
- **Keyboard** — `6` red, `7` yellow, `8` green, `9` blue, with the pointer over it or on the selection; the same key again takes the label off
|
||||
- **See it** — [in the manual](manual/README.md#rating-and-flagging)
|
||||
|
||||
Lightroom's keys, so hands that learned them there need not learn them again. Purple has no key there either, and is on the bar. Every mark carries its label's initial, so the label is read without telling the colours apart.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3175`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3178`</sub>
|
||||
|
||||
### Pick or reject a photograph
|
||||
|
||||
- **Keyboard** — `P` picks, `X` rejects and `U` takes the flag off, with the pointer over it or on the selection
|
||||
|
||||
The keys every culling tool uses, so muscle memory built elsewhere works here.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3202`</sub>
|
||||
|
||||
### Move photographs to the trash
|
||||
|
||||
- **Touch** — Tap the bin at the start of a cell's stars
|
||||
- **Pointer** — Hover the cell and click the bin before its stars
|
||||
- **Keyboard** — `Delete` or `Backspace`, on the selection
|
||||
|
||||
The bin acts on one photograph, so a stray click cannot trash a selection; the key acts on the selection because that is what every file manager's Delete does. Both are undone from the trash view.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3225`</sub>
|
||||
|
||||
### Open this list
|
||||
|
||||
- **Touch** — Press Help in the header
|
||||
- **Pointer** — Press Help in the header
|
||||
- **Keyboard** — `F1`
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3250`</sub>
|
||||
|
||||
### Rename the collection the grid is showing
|
||||
|
||||
- **Touch** — Hold it in the sidebar, then "Rename"
|
||||
- **Pointer** — Double-click it in the sidebar
|
||||
- **Keyboard** — `F2`
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3256`</sub>
|
||||
|
||||
### Move through the grid
|
||||
|
||||
- **Touch** — Scroll, and tap a photograph
|
||||
- **Pointer** — Scroll, and click a photograph
|
||||
- **Keyboard** — `←`, `→`, `↑` and `↓` move one photograph; `Page Up` and `Page Down` a screenful; `Home` and `End` to the first and the last
|
||||
|
||||
The cursor selects what it lands on, so walking and judging are one hand's work.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3276`</sub>
|
||||
|
||||
### Resize the thumbnails
|
||||
|
||||
@@ -465,7 +531,7 @@ Lightroom's keys, so hands that learned them there need not learn them again. Pu
|
||||
|
||||
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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3356`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3403`</sub>
|
||||
|
||||
### File photographs in a collection
|
||||
|
||||
@@ -475,28 +541,29 @@ There is no wheel on a tablet, so without the pinch the cell size could only be
|
||||
|
||||
The selection is what the drag carries, which is why selecting several is worth the mode: forty photographs file in one gesture.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3554`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3601`</sub>
|
||||
|
||||
### Open a photograph
|
||||
|
||||
- **Touch** — Tap it — a single tap, any length
|
||||
- **Pointer** — Click it
|
||||
- **Keyboard** — `Enter`, on the photograph the arrow keys have walked to
|
||||
- **See it** — [in the manual](manual/README.md#developing-a-photograph)
|
||||
|
||||
A tap opens; a tap that *moved* does not. Travel is what separates a deliberate tap from a hand brushing past, and it is the only thing that does: the two are the same length. An earlier version required the finger to dwell 120 ms instead, and that rejected ordinary taps — a real tap is often quicker than a brush.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3851`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:3898`</sub>
|
||||
|
||||
### Rate a photograph without opening it
|
||||
|
||||
- **Touch** — Tap a star on the cell
|
||||
- **Pointer** — Hover the cell, then click a star
|
||||
- **Keyboard** — 0 to 5 with the pointer over it, or on the selection
|
||||
- **Keyboard** — `0`–`5` with the pointer over it, or on the selection
|
||||
- **See it** — [in the manual](manual/README.md#rating-and-flagging)
|
||||
|
||||
A star has to take the press without it also reaching the cell, or every rating throws the user into develop.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:3972`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:4021`</sub>
|
||||
|
||||
### Choose the frame a folded burst shows
|
||||
|
||||
@@ -506,7 +573,7 @@ A star has to take the press without it also reaching the cell, or every rating
|
||||
|
||||
A folded burst draws its earliest frame, which is a fact about the clock and not a judgement about the photograph — nothing in this application ranks a frame (FR-CULL-5). But the point of a burst is that one of the twelve is better than the other eleven, and the photographer is the only one who knows which. So the choice is offered on the frames themselves, while they are open and side by side, which is the one moment the alternatives are on screen to be compared.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:4105`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:4154`</sub>
|
||||
|
||||
### Drop the selection but keep selecting
|
||||
|
||||
@@ -516,18 +583,18 @@ A folded burst draws its earliest frame, which is a fact about the clock and not
|
||||
|
||||
Distinct from Done, which leaves the mode entirely. Clearing keeps it, so the next selection can start straight away.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:4782`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:4831`</sub>
|
||||
|
||||
### Select everything the grid is showing
|
||||
|
||||
- **Touch** — While selecting, press "Select all"
|
||||
- **Pointer** — While selecting, press "Select all"
|
||||
- **Keyboard** — Ctrl+A
|
||||
- **Keyboard** — `Ctrl+A`
|
||||
- **See it** — [in the manual](manual/README.md#selecting-several)
|
||||
|
||||
A scoped grid of two hundred frames is two hundred taps otherwise, and "all of them, except those three" is a far more common shape than the taps it took to say it.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:4800`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:4849`</sub>
|
||||
|
||||
### Take photographs out of a collection
|
||||
|
||||
@@ -537,4 +604,4 @@ A scoped grid of two hundred frames is two hundred taps otherwise, and "all of t
|
||||
|
||||
The badge on a cell says a photograph is filed in 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.
|
||||
|
||||
<sub>`ui/dr-ui/ui/library.slint:4942`</sub>
|
||||
<sub>`ui/dr-ui/ui/library.slint:4991`</sub>
|
||||
|
||||
Reference in New Issue
Block a user