LR-VIEW-PHOTOGRID: the checklist names the skeleton token

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Nathaniel Ledford
2026-10-28 09:18:32 -04:00
co-authored by Claude Opus 5.5
parent 58fac428ce
commit 58b091f3d6
3 changed files with 3 additions and 15 deletions
+1 -12
View File
@@ -47,7 +47,7 @@ pub struct Tokens {
/// A thumbnail's place while its picture is still being made: static, apart from the grid, the
/// cells and the canvas in every theme.
pub skeleton: Color32,
/// The ring round the active photo (outer line, 2 pt): 3:1 or more against the grid and the
/// The ring round the active photo (outer line, 3 pt): 3:1 or more against the grid and the
/// square grid's cells. The photo itself is parted from it by [`Tokens::ring_inner`].
pub ring_active: Color32,
/// The thin line (1 pt) between the active photo and its ring: the ring's opposite, so the ring
@@ -506,17 +506,6 @@ mod tests {
}
}
/// A photo still being drawn is a slab of its theme, not a dark one on a light grid.
#[test]
fn the_loading_placeholder_belongs_to_the_theme() {
for kind in ThemeKind::ALL {
let t = Tokens::for_kind(kind);
assert!(t.skeleton != t.grid_bg, "{kind:?}: the slab must show on the grid");
let dark_slab = contrast(t.skeleton, Color32::BLACK) < contrast(t.skeleton, Color32::WHITE);
assert_eq!(dark_slab, kind.is_dark(), "{kind:?}: a {} slab", if dark_slab { "dark" } else { "light" });
}
}
/// Every theme scrolls 100 points a wheel notch, and a zoom notch stays egui's stock ~1.22x
/// (`exp(40 / 200)`) instead of growing with the longer scroll.
#[test]
+1 -1
View File
@@ -123,7 +123,7 @@ differences and missing bindings are in [ui-parity.md](ui-parity.md#shortcuts).
| Id | Feature | Tier | Status | Evidence | Missing / notes |
|---|---|---|---|---|---|
| LR-VIEW-PHOTOGRID | Justified photo grid | P0 | ✅ | `cmd:view.photoGrid`, `cmd:library.groups`, `cmd:library.sort` (`group`), `crates/ui-egui/src/panels/grid.rs`, `crates/catalog/src/dates.rs` | grouped by capture / import / edit date (day headers “Wednesday, 30 September 2026 · 12 photos”, months or years when zoomed out, or a fixed day/month/year/none choice in the sort menu); sticky header; clicking a header selects its photos; stacks never split; scrolls to the active photo only when it changes (or the grid comes back on screen), never on its own; a mouse-wheel notch scrolls a third of the grid's height, in both grids, as in Lightroom Classic (`theme::WHEEL_STRIP_SHARE`; trackpads scroll the points they report); queued embedded thumbnail stand-ins follow viewport priority changes without another extraction (`crates/ui-egui/src/render.rs`, issue #348; full-app visual/timing verification pending); selected photos are ringed in the theme's colours (`Tokens::ring_active` / `ring_selected`, 3:1 or more against the grid in every theme): the active photo gets a 3 pt two-tone ring (a thin inner line against the photo, so it shows on a white photo too), the other selected photos a 1.5 pt ring; a photo still loading is a theme-coloured slab (`Tokens::placeholder`), not a dark one on a light grid |
| LR-VIEW-PHOTOGRID | Justified photo grid | P0 | ✅ | `cmd:view.photoGrid`, `cmd:library.groups`, `cmd:library.sort` (`group`), `crates/ui-egui/src/panels/grid.rs`, `crates/catalog/src/dates.rs` | grouped by capture / import / edit date (day headers “Wednesday, 30 September 2026 · 12 photos”, months or years when zoomed out, or a fixed day/month/year/none choice in the sort menu); sticky header; clicking a header selects its photos; stacks never split; scrolls to the active photo only when it changes (or the grid comes back on screen), never on its own; a mouse-wheel notch scrolls a third of the grid's height, in both grids, as in Lightroom Classic (`theme::WHEEL_STRIP_SHARE`; trackpads scroll the points they report); queued embedded thumbnail stand-ins follow viewport priority changes without another extraction (`crates/ui-egui/src/render.rs`, issue #348; full-app visual/timing verification pending); selected photos are ringed in the theme's colours (`Tokens::ring_active` / `ring_selected`, 3:1 or more against the grid in every theme): the active photo gets a 3 pt two-tone ring (a thin inner line against the photo, so it shows on a white photo too), the other selected photos a 1.5 pt ring |
| LR-VIEW-SQUAREGRID | Square grid | P0 | ✅ | `cmd:view.squareGrid` | same date headers and selection rings as the photo grid |
| LR-VIEW-DETAIL | Single-photo view | P0 | ✅ | `cmd:view.detail`, `crates/ui-egui/src/panels/detail.rs` | a “Rendering…” pill at the bottom of the photo (widget `loupe:rendering`; above the Navigator when that is in the way) once a render has been on its way for 0.5 s with nothing new on screen: over a stand-in (the raw's embedded JPEG, a thumbnail), the previous render after an edit, or, zoomed in, the magnified frame waiting for its window; Before views watch their own renders. Always on (Lightroom Classic makes it a View Options choice). When the render fails behind a stand-in, a caution pill says “This photo can't be opened” (“Original offline · no smart preview” when that is why) with the reason on hover and for screen readers (widget `loupe:renderFailed`; `ui.inspect` → `loupe.failed`) |
| LR-VIEW-EDIT | Edit view | P0 | ✅ | `cmd:panel.edit` | |
+1 -2
View File
@@ -162,8 +162,7 @@
selected ones by lightness alone. Now the active photo has a heavier ring (3 pt, with a thin line against the photo so
it also shows on a white one) and the other selected photos a lighter one (1.5 pt), in colours each theme picks to
stand out from its grid. The filmstrip rings its photos the same way, and so do Compare, Reference and Survey (where
the ring is the only sign of the active photo) and the People view's chosen person. A photo still loading is no
longer a dark slab on a light grid.
the ring is the only sign of the active photo) and the People view's chosen person.
### Sharper resampling in HDR and panorama merges
- Merged photos (HDR and panorama) are resampled with a sharper filter (Lanczos-3 instead of bilinear). Moving a