Commit Graph
3502 Commits
Author SHA1 Message Date
aiongg b2632e1d10 Merge PR #2722: LR-VIEW-FILMSTRIP: photos drag from the filmstrip like from the grid
Conflicts in docs/parity-checklist.md docs/whats-new.md: kept both sides (union).
2026-10-31 02:07:01 +00:00
aiongg fbe1225202 Merge PR #2707: LR-BEHAV-MULTISELECT: the model for choosing several sidebar rows with Cmd/Ctrl+click and Shift+click 2026-10-31 02:07:01 +00:00
aiongg 3ec0d2de68 Merge PR #2696: LRC-LIB-LIBFOLDERS: a count never covers a name in a narrow sidebar
Conflicts in docs/parity-checklist.md docs/whats-new.md: kept both sides (union).
2026-10-31 02:07:00 +00:00
aiongg 07c3154191 Merge PR #2651: LR-FILT-FLAG: the filter bar's flag buttons combine, Picked + Unflagged hides only the rejects
Conflicts in docs/parity-checklist.md: kept both sides (union).
2026-10-31 02:07:00 +00:00
aiongg 634c518866 Merge PR #2647: LR-LIB-SMARTALBUM: editing a smart album made from an album view keeps the album 2026-10-31 02:06:59 +00:00
aiongg 8e9af13a2c Merge PR #2521: LR-VIEW-ZOOM: test pinch display fitting with controlled completions 2026-10-31 02:06:59 +00:00
aiongg bc60bc521f Merge PR #2423: PERF-SMART: test a smart album's rules cheapest first
docs/whats-new.md: kept both entries under the same date.
2026-10-31 02:06:59 +00:00
aiongg 3ad179c82c Merge PR #2162: LR-VIEW-PHOTOGRID: the active photo's selection ring shows on light themes and differs from the other selected photos by weight
docs/parity-checklist.md: kept the newer header date and both sides' change clauses; revision rows are the union.
2026-10-31 02:06:46 +00:00
aiongg a67f1249b8 Merge PR #2065: KEY-TOGGLEZOOM: hold Space over a tool to pan and click-zoom, as in reference app (#1895) 2026-10-31 02:06:36 +00:00
Brandon Thomas c7d7d3c0fd Merge PR #2540 (maintainer follow-up) 2026-10-30 15:26:31 -04:00
Brandon ThomasandClaude Opus 5.5 831d724b87 Reject .cube data lines that start with nan or inf
A data line such as `nan 0 0` starts with a letter and was skipped as an
unknown keyword, so a file with enough other entries still parsed.
(CodeRabbit review on #2540.)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-30 15:26:29 -04:00
Brandon Thomas b854bbb94e Merge PR #2835 2026-10-30 15:24:59 -04:00
Brandon Thomas ac4a98bc2d Merge PR #3147 2026-10-30 15:24:59 -04:00
Brandon Thomas cfdf63c6e4 Merge PR #2917
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-30 15:24:59 -04:00
Brandon Thomas 13711ace2b Merge PR #2155 2026-10-30 15:24:41 -04:00
Brandon Thomas c1fb95dfc0 Merge PR #3225 2026-10-30 15:24:30 -04:00
Brandon Thomas 273e9078de Merge PR #2969 2026-10-30 15:24:30 -04:00
Brandon Thomas 5693a3aeaa Merge PR #2540 2026-10-30 15:24:30 -04:00
Brandon Thomas bdb146be43 Merge PR #2833 2026-10-30 15:24:30 -04:00
Brandon Thomas ef83f30327 Merge PR #2834 2026-10-30 15:24:30 -04:00
Brandon Thomas 19eb08dc25 Merge PR #2909 2026-10-30 15:24:30 -04:00
Brandon Thomas b7c52c5032 Merge PR #2918 2026-10-30 15:24:30 -04:00
Brandon Thomas 181a580579 Merge PR #3366 2026-10-30 15:24:30 -04:00
Brandon Thomas 9140e8cd38 Merge PR #3267 2026-10-30 15:24:30 -04:00
Max MittelstädtandGPT-6-Luna b25808686d Reject mismatched XML closing tags
Found while testing crates/lensdb/src/xml.rs:77

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-30 06:10:13 +00:00
Dylan M. Taylor 445dd3106e Update prompt shows the app icon and accent color instead of a letter (#3362)
UPDATE_APP (native builds; craft-update is a native-only dependency) carries our 128 px icon and accent (#f2a516, its colour in ArtCraft Launcher). The updater, the self-update
helper and craft-update's startup prompt all get them through crate::UPDATE_APP; the
prompt draws the icon, the accent and "by ArtCraft" (craft-update's default developer).

craft-update is pinned to storytold/craft-libs main at 1065653e7 (#434).
Clippy fixes for Rust 1.99 in untouched code (same logic):
- crates/engine/src/cmd/export.rs
- crates/ui-egui/src/dialogs/rules_editor/rules_move.rs
- crates/ui-egui/src/panels/detail.rs
2026-10-30 01:27:49 -04:00
Marco Arnulfo 74b6f70f57 LR-FILT-FLAG: the flag chip test builds the expected text from the catalog's values (#2729) 2026-10-30 02:26:41 +01:00
Marco Arnulfo cdc1505bb3 LR-FILT-FLAG: group the plural flags in the chip when flag and flags exclude each other 2026-10-30 02:26:41 +01:00
Marco Arnulfo e7fa046d11 Flag chip and filter bar show what flag and flags let through together
With both set (only via library.filter) they AND, but the chip and the
bar's buttons showed their union. Filter::flags_shown gives the flags
that pass both; the chip names both constraints when none does.
2026-10-30 02:26:41 +01:00
Marco Arnulfo 1ee9991b41 LR-FILT-FLAG: the filter bar's flag buttons combine, Picked + Unflagged hides only the rejects (fixes #2588) 2026-10-30 02:26:41 +01:00
Nathaniel Ledford 9673a69bec PERF-SMART: test that adding or removing an album forgets the reorder guard; fix comment wording and What's New figure 2026-10-29 13:40:02 -04:00
Nathaniel Ledford f4f2348fc1 PERF-SMART: the depth-limit test states the expected answers 2026-10-29 09:14:26 -04:00
Nathaniel LedfordandClaude Opus 5.5 e331229740 PERF-SMART: a repair forgets what was worked out from the albums
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 09:14:26 -04:00
Nathaniel LedfordandClaude Opus 5.5 fec89459e0 PERF-SMART: test a smart album's rules cheapest first
A rule set is now tested cheapest rule first (numbers, choices and yes/no, then lists and
dates, then text and paths, then smart albums), worked out once per prepared filter and per
smart album, not per photo. Photos matched are the same; the editor still shows the user's order.
While a smart album tests itself, or a chain of smart albums reaches the depth limit, rules are
tested as written, since there an answer can depend on which album is asked first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-29 09:14:26 -04:00
helgehelge123 db406c021f Merge branch 'main' of https://github.com/storytold/lightcraft into space-hold-pan
# Conflicts:
#	crates/ui-egui/src/panels/detail.rs
#	crates/ui-egui/src/shortcuts.rs
2026-10-29 00:14:51 +01:00
radialmonsterandClaude Opus 5.5 20c1f3c057 raw: test the grey JPEG XL restore through decode
The existing synthetic lossy RGB fixture tiles are re-declared grey by a
header edit (colour space RGB to Grey, dropping the 6-bit primaries field
a grey encoding does not carry, per the ColourEncoding bundle). Their XYB
frame data is unchanged, so they decode as one grey plane whose rendered
channels differ. The test checks decode against the gradient's BT.2100
luminance in the linear and sRGB curves.

Refs #275

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
2026-10-28 13:44:42 -04:00
radialmonsterandClaude Opus 5.5 953c4ee5fc raw: decode lossy single-plane (grey) JPEG XL tiles in LinearRaw DNGs
Lightroom Classic's HDR and panorama merges of monochrome raws store a
one-plane LinearRaw image as lossy (XYB) JPEG XL tiles whose codestream
declares a grey colour encoding (16-bit float with a linear curve, or
16-bit integer with the sRGB curve). Those were refused as "lossy JPEG XL
tile with a single colour plane", so the files opened preview-only.

A lossy grey tile is still coded as three XYB channels. It is now
restored like the RGB case: jxl-oxide renders linear sRGB (never the
declared encoding, which would clip), the single plane is the luminance
(CIE Y, D65) of that, then the declared transfer curve is applied.
One plane must be declared grey and three RGB; HDR curves, other white
points and intensity targets above 255 stay unsupported.

RENDER_CACHE_VERSION 70 -> 71: files that showed their embedded preview
before render from raw data now, under the same content key.

Refs #275

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
2026-10-28 13:44:42 -04:00
Max MittelstädtandGPT-6-Luna 7ab2575505 Reject ZIP entries with inconsistent decoded sizes
Found while testing crates/geocode/src/unzip.rs:64

Co-Authored-By: GPT-6-Luna <noreply@openai.com>
2026-10-28 16:41:59 +00:00
Nathaniel Ledford a521f0c591 LRC-LIB-LIBFOLDERS: a count that gives way stays past the panel's edge when its row reaches past it 2026-10-28 11:44:38 -04:00
Nathaniel Ledford 93d6058372 LRC-LIB-LIBFOLDERS: the count test waits for each folder toggle to be drawn before clicking it 2026-10-28 11:44:38 -04:00
Nathaniel Ledford 232ce705c2 LRC-LIB-LIBFOLDERS: the count test also covers a panel that grows by many points in one frame 2026-10-28 11:44:38 -04:00
Nathaniel Ledford 02e1a8b020 LRC-LIB-LIBFOLDERS: the count test also covers the color dot, and the frames where the panel or its scroll changes 2026-10-28 11:44:38 -04:00
Nathaniel Ledford 4b4487c4e1 LRC-LIB-LIBFOLDERS: the width sweep also checks that the deepest row's count follows its name 2026-10-28 11:44:38 -04:00
Nathaniel LedfordandClaude Opus 5.5 e2043f44df LRC-LIB-LIBFOLDERS: a count never covers a name in a narrow panel
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 11:44:38 -04:00
Nathaniel LedfordandClaude Opus 5.5 58b091f3d6 LR-VIEW-PHOTOGRID: the checklist names the skeleton token
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:18:32 -04:00
Nathaniel LedfordandClaude Opus 5.5 58fac428ce LR-VIEW-PHOTOGRID: the loading slab uses the skeleton token #2077 adds
whose picture is still being made; this PR had added `placeholder` for
the same slab. Both now add the same token, with the same name, doc and
colours, so the two merge into one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 09:18:32 -04:00
Nathaniel LedfordandClaude 4f31cc5c3c LR-VIEW-PHOTOGRID: the docs name Compare, Survey and People's rings too
- docs/whats-new.md, docs/parity-checklist.md (LR-VIEW-SURVEY row and the
  revision-history line): the active-photo ring in Compare, Reference,
  Survey and the People view.
- tests_grid.rs: the ring comment matches the paint order.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-28 09:18:31 -04:00
Nathaniel LedfordandClaude b2e6657b95 LR-VIEW-PHOTOGRID: the active ring shows in Compare, Survey and the face tiles too, with no seam at fractional scales
Review of the selection rings found the grid test never checked the active
(top-left) photo, a selected ring that fell under 3:1 on label-tinted cells,
and other places still framing the selection in fixed white.

- tests_grid.rs: the active photo is now checked (it was skipped by a leftover
  x filter): a 3 pt `ring_active` stroke over a 1 pt `ring_inner` one, and not
  white in a light theme
- theme.rs: `ring_selected` is also tested at 3:1 against the selected cell and
  its label-tinted forms; Silver and Paper's goes darker (0x4a) and Charcoal
  and Midnight's lighter (0xc0) to pass
- panels/grid.rs: the active ring is one 3 pt stroke with the 1 pt inner line
  on top, both on the same rect, so two separately snapped strokes cannot
  leave a half-pixel seam at 1.25x, 1.5x or 1.75x
- panels/compare.rs: Compare, Reference and Survey frame the active tile with
  `selection_ring` instead of a white 2 pt stroke; the placeholder uses the
  tile's own tokens
- panels/settings.rs: the theme preview's mini filmstrip rings its selected
  cell with the theme's `ring_active`
- panels/people.rs: a selected face tile uses the same ring
- tests_compare.rs, tests_filmstrip.rs: a Survey test in a light theme and the
  filmstrip test adjusted to the new widths

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-28 09:18:31 -04:00
Nathaniel LedfordandClaude ecba8045bf LR-VIEW-PHOTOGRID: the active photo's selection ring shows on light themes and differs from the others by weight
The active photo had a 2 px pure white outline and the other selected photos
grey 170, so on Silver and Paper's light grid the active ring vanished and the
two differed by lightness alone. The loading placeholder was a fixed dark grey
slab in every theme.

- theme.rs: new tokens `ring_active`, `ring_inner`, `ring_selected` and
  `placeholder`, per theme; tests that every theme's rings stand 3:1 against
  the grid and the square grid's cells, and that the placeholder follows the
  theme's family
- panels/grid.rs: `selection_ring` draws the active ring as 3 pt (1 pt inner
  line against the photo, 2 pt theme line) and the others as 1.5 pt; the grid
  uses it for loaded and unloaded thumbnails, and the placeholder token
- panels/detail.rs: the filmstrip uses the same ring and rule
- panels/compare.rs: the compare placeholder uses the token
- tests_grid.rs, tests_filmstrip.rs: painted ring widths and colours in a
  light theme, active versus selected versus unselected
- docs/parity-checklist.md, docs/whats-new.md: rows and entry

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-28 09:18:31 -04:00
9c6b016449 LR-VIEW-ZOOM: test pinch display fitting with controlled completions
Merge current main and retain #2499's production fix exactly. Keep the five
controlled headless regressions and adapt the exact-deadline unit test to
SizeHold::apply and display_fit. The base-relative diff adds tests only.

Co-Authored-By: GPT-6 Astra <noreply@openai.com>

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-28 12:21:51 +01:00