From 01af9d9fb8bec102c26e3d107da9c55ae79885b7 Mon Sep 17 00:00:00 2001 From: Marcel Date: Fri, 11 Sep 2026 21:11:46 +0200 Subject: [PATCH] Position rectangle dimension labels away from geometry --- src/app/view/mod.rs | 22 +++++++++++++++++++++- src/ui/overlay.rs | 12 ++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/app/view/mod.rs b/src/app/view/mod.rs index 751e72d11..42dd3c81e 100644 --- a/src/app/view/mod.rs +++ b/src/app/view/mod.rs @@ -1024,6 +1024,9 @@ bg={bg_ms:.1}ms n={view_count}" let height_center = opposite + width_axis * width + height_axis * (height * 0.5); + let rectangle_center = opposite + + width_axis * (width * 0.5) + + height_axis * (height * 0.5); let (vw, vh) = tab.scene.selection.borrow().vp_size; let (camera, bounds) = tab .scene @@ -1040,7 +1043,24 @@ bg={bg_ms:.1}ms n={view_count}" bounds.y + screen.y, )) }; - Some((project(width_center)?, project(height_center)?)) + let center = project(rectangle_center)?; + let offset_from_center = |side: iced::Point, pixels: f32| { + let dx = side.x - center.x; + let dy = side.y - center.y; + let length = dx.hypot(dy); + if length > 1.0e-3 { + iced::Point::new( + side.x + dx / length * pixels, + side.y + dy / length * pixels, + ) + } else { + side + } + }; + Some(( + offset_from_center(project(width_center)?, 14.0), + offset_from_center(project(height_center)?, 18.0), + )) }); let boxes: Vec = tab .dyn_fields diff --git a/src/ui/overlay.rs b/src/ui/overlay.rs index b05381b2c..05e88b46a 100644 --- a/src/ui/overlay.rs +++ b/src/ui/overlay.rs @@ -3051,10 +3051,18 @@ impl DynInputCanvas { }), DynRole::X | DynRole::Width => Point { x: (base.x + cursor.x) * 0.5, - y: base.y + 14.0, + y: if self.guide == DynGuide::RectSides { + base.y - (cursor.y - base.y).signum() * 14.0 + } else { + base.y + 14.0 + }, }, DynRole::Y | DynRole::Height => Point { - x: corner.x + 18.0, + x: if self.guide == DynGuide::RectSides { + corner.x + (cursor.x - base.x).signum() * 18.0 + } else { + corner.x + 18.0 + }, y: (base.y + cursor.y) * 0.5, }, // Perpendicular measure: on the measured segment / dim line.