From b8f9c403a7b03edaa0610587c2f7ee6d44856994 Mon Sep 17 00:00:00 2001 From: bflatastic Date: Tue, 20 Oct 2026 02:22:48 +0700 Subject: [PATCH] Measure: with Measurement Labels off the measured line still draws, only its readout goes (#3128) --- crates/tools/src/xform/measure.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/crates/tools/src/xform/measure.rs b/crates/tools/src/xform/measure.rs index c9b432853..55835c48c 100644 --- a/crates/tools/src/xform/measure.rs +++ b/crates/tools/src/xform/measure.rs @@ -53,21 +53,20 @@ impl Tool for MeasureTool { } fn overlays(&self, cx: &ToolContext) -> Vec { - if !cx.measurement_labels { - return vec![]; - } let Some((a, b)) = self.line else { return vec![] }; if a == b { return vec![]; } - let (dist, ang, dx, dy) = measure(a, b); - vec![ - Overlay::Line { a, b, color: CYAN, dashed: false }, - Overlay::Measure { + let mut out = vec![Overlay::Line { a, b, color: CYAN, dashed: false }]; + // Measurement Labels decides the readout; the line the tool draws stays. + if cx.measurement_labels { + let (dist, ang, dx, dy) = measure(a, b); + out.push(Overlay::Measure { p: b + Vec2::new(cx.tol(12.0), cx.tol(12.0)), text: format!("D: {}\nAngle: {ang:.1}°\n{}", cx.len(dist), cx.offset_label(dx, dy)), - }, - ] + }); + } + out } fn cursor(&self, _cx: &ToolContext, _p: Point, _m: Mods) -> Cursor { @@ -108,6 +107,8 @@ mod tests { let ov = t.overlays(&cx); assert!(matches!(&ov[1], Overlay::Measure { text, .. } if text.starts_with("D: 50.00 pt"))); let quiet = ToolContext { measurement_labels: false, ..cx }; - assert!(t.overlays(&quiet).is_empty(), "Measurement Labels off hides the readout"); + let ov = t.overlays(&quiet); + assert!(!ov.iter().any(|o| matches!(o, Overlay::Measure { .. })), "Measurement Labels off hides the readout"); + assert!(ov.iter().any(|o| matches!(o, Overlay::Line { .. })), "the measured line stays"); } }