From 58b091f3d6726fda457671c57f01e3c40aba85ed Mon Sep 17 00:00:00 2001 From: Nathaniel Ledford Date: Sun, 18 Oct 2026 14:00:05 -0400 Subject: [PATCH] LR-VIEW-PHOTOGRID: the checklist names the skeleton token Co-Authored-By: Claude Opus 5.5 --- crates/ui-egui/src/theme.rs | 13 +------------ docs/parity-checklist.md | 2 +- docs/whats-new.md | 3 +-- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/crates/ui-egui/src/theme.rs b/crates/ui-egui/src/theme.rs index d57258a4a..0c562f451 100644 --- a/crates/ui-egui/src/theme.rs +++ b/crates/ui-egui/src/theme.rs @@ -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] diff --git a/docs/parity-checklist.md b/docs/parity-checklist.md index ea7aa3f19..0e9f78aa2 100644 --- a/docs/parity-checklist.md +++ b/docs/parity-checklist.md @@ -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` | | diff --git a/docs/whats-new.md b/docs/whats-new.md index 8ad9ffa9b..86bc6d4a0 100644 --- a/docs/whats-new.md +++ b/docs/whats-new.md @@ -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