mirror of
https://github.com/storytold/lightcraft.git
synced 2026-11-01 14:07:34 -06:00
crates/ui-egui/src/panels/edit/histogram.rs: live_hdr_histogram added above main's histogram() (now in edit/histogram.rs, pub(crate)) docs/parity-checklist.md: main's Histogram row with this PR's HDR-off clause
This commit is contained in:
@@ -33,6 +33,13 @@ fn steady_hdr_histogram(ctx: &egui::Context, id: PhotoId, hdr_edit: bool, hist:
|
||||
}
|
||||
}
|
||||
|
||||
/// The histogram of the last drag's small HDR render, while an HDR edit of `id` is being dragged. It stays in
|
||||
/// `Renderer` after the drag, so an edit with HDR switched off must not read it: its drags would show the old HDR
|
||||
/// histogram (`dragging`: a drag of an HDR edit is on).
|
||||
fn live_hdr_histogram(live: Option<&(PhotoId, u64, Histogram)>, id: PhotoId, dragging: bool) -> Option<Histogram> {
|
||||
live.filter(|l| dragging && l.0 == id).map(|l| l.2.clone())
|
||||
}
|
||||
|
||||
/// The histogram, its clipping buttons and the EXIF strip, drawn above the Edit panel's scrolling sliders
|
||||
/// ([`crate::panels::right::show`]).
|
||||
pub(crate) fn histogram(app: &mut LightcraftApp, ui: &mut egui::Ui, id: PhotoId) {
|
||||
@@ -50,7 +57,7 @@ pub(crate) fn histogram(app: &mut LightcraftApp, ui: &mut egui::Ui, id: PhotoId)
|
||||
app.renderer.request(Slot::HdrHistogram, job, 95);
|
||||
}
|
||||
}
|
||||
let live = app.renderer.live_hdr_histogram.as_ref().filter(|l| interacting && l.0 == id).map(|l| l.2.clone());
|
||||
let live = live_hdr_histogram(app.renderer.live_hdr_histogram.as_ref(), id, interacting && hdr_edit);
|
||||
// else the loupe render of this photo, else its thumbnail (grid view before the loupe has
|
||||
// rendered it)
|
||||
let hist = live.or_else(|| preview_histogram(app, id));
|
||||
@@ -344,6 +351,21 @@ mod tests {
|
||||
assert_eq!(steady_hdr_histogram(&ctx, PhotoId(8), true, Some(sdr.clone())), Some(sdr));
|
||||
}
|
||||
|
||||
/// Issue #2819: the last HDR drag's histogram is kept in `Renderer`; with HDR switched off, a drag must not read it.
|
||||
#[test]
|
||||
fn a_drag_with_hdr_off_does_not_read_the_last_hdr_drags_histogram() {
|
||||
let id = PhotoId(7);
|
||||
let kept = (id, 3, Histogram::of_hdr(&[[2.0, 2.0, 2.0]], 5.0));
|
||||
assert!(kept.2.hdr.is_some());
|
||||
// a drag of an HDR edit: the small HDR render's histogram
|
||||
assert_eq!(live_hdr_histogram(Some(&kept), id, true), Some(kept.2.clone()));
|
||||
// HDR switched off, a drag of the SDR edit: the panel's own (SDR) histogram
|
||||
assert_eq!(live_hdr_histogram(Some(&kept), id, false), None);
|
||||
// another photo, or nothing rendered yet
|
||||
assert_eq!(live_hdr_histogram(Some(&kept), PhotoId(8), true), None);
|
||||
assert_eq!(live_hdr_histogram(None, id, true), None);
|
||||
}
|
||||
|
||||
/// Issue #1751: Windows and Linux read Ctrl where macOS reads Cmd, and a rebound shortcut shows.
|
||||
#[test]
|
||||
fn reset_tooltip_names_the_shortcut_of_this_platform() {
|
||||
|
||||
@@ -139,7 +139,7 @@ differences and missing bindings are in [ui-parity.md](ui-parity.md#shortcuts).
|
||||
| LR-VIEW-SLIDESHOW | Slideshow | P2 | ✅ | `cmd:view.slideshow` | View ▸ Slideshow (⌥⌘↩): the photos in view full screen from the selected one, played with the library's playback settings (see LRC-SS-PLAYBACK: fades, random order, repeat, previews prepared ahead; `interval` / any setting overrides one run); Space pauses, ←/→ step (a cut), Esc ends; playback controls on pointer movement |
|
||||
| LR-VIEW-SECONDWINDOW | Second display window [Classic] | P2 | ✅ | `cmd:view.secondWindow`, `crates/ui-egui/src/panels/second.rs` | Window ▸ Second Window (⌘F11): the active photo fitted in its own native window with its own render (a floating panel where there are no native windows); loupe view only (no grid / compare / survey there) |
|
||||
| LR-VIEW-CLIPPING | Clipping indicators | P0 | ✅ | `cmd:view.clipping` | |
|
||||
| LR-VIEW-HISTOGRAM | Histogram | P0 | ✅ | `cmd:view.histogram`, `crates/ui-egui/src/panels/edit/histogram.rs`, `crates/ui-egui/src/panels/right.rs`, `crates/pipeline/src/lib.rs` (`hdr_histogram`) | stays at the top of the Edit panel while its sliders scroll under it (issue #2679, `the_histogram_stays_in_view_while_the_sliders_scroll`); HDR edits: SDR on the left half, the HDR range (0 to 5 stops above SDR white, a fixed scale) on the right with the headroom limit marked; colour bar (white, or Visualize HDR range's colours when that is on) and SDR / HDR labels; the plot's five tonal zones also drag to adjust their Basic control (LRC-DEV-HISTOGRAM-DRAG); it follows slider drags live (a small render beside the drafts, `Slot::HdrHistogram`) and never drops to the SDR layout mid-drag |
|
||||
| LR-VIEW-HISTOGRAM | Histogram | P0 | ✅ | `cmd:view.histogram`, `crates/ui-egui/src/panels/edit/histogram.rs`, `crates/ui-egui/src/panels/right.rs`, `crates/pipeline/src/lib.rs` (`hdr_histogram`) | stays at the top of the Edit panel while its sliders scroll under it (issue #2679, `the_histogram_stays_in_view_while_the_sliders_scroll`); HDR edits: SDR on the left half, the HDR range (0 to 5 stops above SDR white, a fixed scale) on the right with the headroom limit marked; colour bar (white, or Visualize HDR range's colours when that is on) and SDR / HDR labels; the plot's five tonal zones also drag to adjust their Basic control (LRC-DEV-HISTOGRAM-DRAG); it follows slider drags of an HDR edit live (a small render beside the drafts, `Slot::HdrHistogram`) and never drops to the SDR layout mid-drag; an edit with HDR switched off keeps its SDR histogram while it is dragged (#2819) |
|
||||
| LR-VIEW-HDR-DISPLAY | HDR display output | P2 | ⬜ | |, `apps/lightcraft/src/hdr_display.rs` (`choose`, `preferred_hdr_format`) | SDR/HDR decision (platform, surface format, OS headroom, `LIGHTCRAFT_HDR_DISPLAY=0`) is unit-tested and logged at start; always SDR today because eframe configures an 8-bit surface; no OS headroom query yet; |
|
||||
|
||||
## D. Search & filter (FILT)
|
||||
@@ -799,6 +799,7 @@ Latin stays upright. Advanced Japanese composition remains open. Regression cove
|
||||
|
||||
| Date | Change | Summary |
|
||||
|---|---|---|
|
||||
| 2026-10-27 | patch | LR-VIEW-HISTOGRAM: an edit with HDR switched off no longer shows the last HDR drag's histogram while it is dragged (#2819); status unchanged |
|
||||
| 2026-10-25 | patch | LR-BEHAV-TITLEBAR: the top bar's title-bar gestures come from craft-window's `title_bar`: a double-click follows the system setting, and a press on a button, the search field or a panel floating over the bar never moves the window; status counts unchanged |
|
||||
| 2026-10-24 | minor | KEYC-METADATA, LRC-LIB-KEYWORDS: ⌥0 / ⌥⇧0 (`keyword.nextSet`, `keyword.previousSet`) go to the next / previous keyword set; status counts unchanged (KEYC-METADATA stays 🟡) |
|
||||
| 2026-10-24 | minor | KEYC-METADATA: ⌘K / Ctrl+K (`panel.addKeywords`, Add Keywords) shows the Keywords panel, opens Keywording and puts the cursor in the Add keyword box; status counts unchanged (KEYC-METADATA stays 🟡) |
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
# What's new in LightCraft
|
||||
|
||||
## 2026-10-30
|
||||
|
||||
### The histogram stays SDR when HDR is switched off
|
||||
- After an HDR edit was dragged and HDR was then switched off, dragging a slider showed the old HDR histogram (with its
|
||||
SDR / HDR colour bar) again until the drag ended. The histogram now follows the edit: an SDR edit shows the SDR
|
||||
histogram while you drag, too.
|
||||
|
||||
## 2026-10-27
|
||||
|
||||
### The Edit menu groups Select Only Active Photo and Paste Settings from Previous with their kin
|
||||
|
||||
Reference in New Issue
Block a user