diff --git a/crates/tools/src/text.rs b/crates/tools/src/text.rs index db0e6e3f3..ca84e0d23 100644 --- a/crates/tools/src/text.rs +++ b/crates/tools/src/text.rs @@ -826,7 +826,11 @@ impl Tool for TypeTool { fn overlays(&self, cx: &ToolContext) -> Vec { let mut o = self.snap.guides().to_vec(); if let (Some((_, s)), Some(d)) = (self.press, self.drag) { - o.push(Overlay::Marquee(Rect::from_points(s, d))); + let r = Rect::from_points(s, d); + o.push(Overlay::Marquee(r)); + if cx.measurement_labels { + o.push(Overlay::Measure { p: d, text: cx.size_label(r.width(), r.height()) }); + } } // Overflow markers on selected text. for id in &cx.selection.objects { diff --git a/crates/tools/src/text_tests.rs b/crates/tools/src/text_tests.rs index 2ca919654..7554851cd 100644 --- a/crates/tools/src/text_tests.rs +++ b/crates/tools/src/text_tests.rs @@ -559,6 +559,20 @@ fn new_type_snaps_to_smart_guides() { assert!(acts.iter().any(|a| matches!(a, Action::Exec(cmd, v) if cmd == "text.create" && v["x"] == 100.0 && v["area"] == area)), "{acts:?}"); } +#[test] +fn area_type_drag_measure_labels_honor_preference() { + let (d, _) = crate::testutil::doc_with_rect(); + let (sel, p) = (Selection::default(), paint()); + let on = ToolContext { measurement_labels: true, ..cx(&d, &sel, &p) }; + let off = ToolContext { measurement_labels: false, ..cx(&d, &sel, &p) }; + let mut tool = TypeTool::new("type"); + tool.pointer(&on, &PointerEvent::new(PointerKind::Down, 100.0, 100.0)); + tool.pointer(&on, &PointerEvent::new(PointerKind::Drag, 200.0, 150.0)); + let want = on.size_label(100.0, 50.0); + assert!(tool.overlays(&on).iter().any(|o| matches!(o, Overlay::Measure { text, .. } if text == &want))); + assert!(!tool.overlays(&off).iter().any(|o| matches!(o, Overlay::Measure { .. }))); +} + #[test] fn layout_cache_follows_fonts_added_later() { // Other tests can load system fonts; this assertion needs its own process-wide database.