Show a mask's tint only while masking
The eyes are per layer and outlive the mode, so a photographer coming back finds the layers they were looking at still lit. But the tint is a way of looking at a mask, and outside Local there is no mask being looked at: the sky stayed red through Repair and back in Photo, a mode that had been left leaving its overlay behind — the fault ui-navigation.md D-N1 exists to prevent.
This commit is contained in:
@@ -2552,6 +2552,15 @@ impl DevelopSession {
|
||||
/// or reordered.
|
||||
pub(crate) fn reveal(&self) -> Option<dr_pipeline::mask::Reveal> {
|
||||
use dr_pipeline::mask::{Reveal, RevealedLayer};
|
||||
// Only while masking. The eyes are per layer and outlive the mode,
|
||||
// so a photographer coming back finds the layers they were looking
|
||||
// at still lit — but a tint is a way of looking at a *mask*, and
|
||||
// outside Local there is no mask being looked at. Without this the
|
||||
// sky stayed red through Repair and back in Photo, a mode that had
|
||||
// been left leaving its overlay behind (ui-navigation.md D-N1).
|
||||
if !self.show_overlay {
|
||||
return None;
|
||||
}
|
||||
let layers: Vec<RevealedLayer> = self
|
||||
.graph
|
||||
.masks()
|
||||
@@ -6986,6 +6995,27 @@ mod tests {
|
||||
/// — that the coverage is present, that it round-trips as bytes — would
|
||||
/// still pass if the raster came back at the wrong scale, upside down, or
|
||||
/// a threshold out.
|
||||
#[test]
|
||||
fn a_shown_mask_is_only_shown_while_masking() {
|
||||
let Some(ctx) = headless() else { return };
|
||||
let mut s = session_with_a_left_half_subject(&ctx);
|
||||
let id = s.add_subject_mask(0).expect("a subject layer");
|
||||
s.set_overlay(true);
|
||||
s.set_mask_shown(&id, true);
|
||||
assert!(s.any_mask_shown(), "lit, in Local mode");
|
||||
|
||||
// Leaving the mode — what `on_mode_picked` does for Photo and Spots.
|
||||
s.set_overlay(false);
|
||||
assert!(
|
||||
!s.any_mask_shown(),
|
||||
"the tint belongs to the mode, not to the photograph"
|
||||
);
|
||||
assert!(s.mask_shown(&id), "the eye itself is remembered");
|
||||
|
||||
s.set_overlay(true);
|
||||
assert!(s.any_mask_shown(), "and is lit again on return");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn a_stored_mask_renders_exactly_what_the_model_rendered() {
|
||||
let Some(ctx) = headless() else { return };
|
||||
|
||||
Reference in New Issue
Block a user