Skip to content

Commit deb2717

Browse files
Tidy up number text alignment and decimal precision for quick measurement overlays
1 parent ad37b50 commit deb2717

File tree

1 file changed

+39
-148
lines changed
  • editor/src/messages/tool/common_functionality

1 file changed

+39
-148
lines changed

editor/src/messages/tool/common_functionality/measure.rs

Lines changed: 39 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ fn draw_line_with_length(
1919
transform: DAffine2,
2020
document_to_viewport: DAffine2,
2121
overlay_context: &mut OverlayContext,
22-
is_vertical_line: Option<bool>,
23-
text_on_left: Option<bool>,
24-
text_on_top: Option<bool>,
22+
is_vertical_line: bool,
23+
text_on_left: bool,
24+
text_on_top: bool,
2525
) {
2626
let transform_to_document = document_to_viewport.inverse() * transform;
2727
let min_viewport = transform.transform_point2(line_start);
@@ -37,11 +37,10 @@ fn draw_line_with_length(
3737
// Adjust text position based on line orientation and flags
3838
// Determine text position based on line orientation and flags
3939
let (pivot_x, pivot_y) = match (is_vertical_line, text_on_left, text_on_top) {
40-
(Some(true), Some(true), _) => (Pivot::End, Pivot::Middle), // Vertical line, text on the left
41-
(Some(true), Some(false), _) => (Pivot::Start, Pivot::Middle), // Vertical line, text on the right
42-
(Some(false), _, Some(true)) => (Pivot::Middle, Pivot::End), // Horizontal line, text on top
43-
(Some(false), _, Some(false)) => (Pivot::Middle, Pivot::Start), // Horizontal line, text on bottom
44-
_ => (Pivot::Middle, Pivot::Middle), // Handle the case where `is_vertical_line` or the others are None or not true
40+
(true, true, _) => (Pivot::End, Pivot::Middle), // Vertical line, text on the left
41+
(true, false, _) => (Pivot::Start, Pivot::Middle), // Vertical line, text on the right
42+
(false, _, true) => (Pivot::Middle, Pivot::End), // Horizontal line, text on top
43+
(false, _, false) => (Pivot::Middle, Pivot::Start), // Horizontal line, text on bottom
4544
};
4645
overlay_context.text(&length, COLOR_OVERLAY_BLUE, None, DAffine2::from_translation(midpoint), text_padding, [pivot_x, pivot_y]);
4746
}
@@ -72,16 +71,7 @@ fn draw_zero_axis_crossings(selected_bounds: Rect, hovered_bounds: Rect, transfo
7271
// Draw horizontal solid line with length
7372
let line_start = DVec2::new(selected_x, selected_y);
7473
let line_end = DVec2::new(hovered_x, selected_y);
75-
draw_line_with_length(
76-
line_start,
77-
line_end,
78-
transform,
79-
document_to_viewport,
80-
overlay_context,
81-
Some(false),
82-
Some(false),
83-
Some(!selected_on_bottom),
84-
);
74+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, false, false, !selected_on_bottom);
8575

8676
// Draw horizontal dashed line
8777
let line_start = DVec2::new(selected_x, hovered_y);
@@ -91,16 +81,7 @@ fn draw_zero_axis_crossings(selected_bounds: Rect, hovered_bounds: Rect, transfo
9181
// Draw vertical solid line with length
9282
let line_start = DVec2::new(selected_x, selected_y);
9383
let line_end = DVec2::new(selected_x, hovered_y);
94-
draw_line_with_length(
95-
line_start,
96-
line_end,
97-
transform,
98-
document_to_viewport,
99-
overlay_context,
100-
Some(true),
101-
Some(!selected_on_right),
102-
Some(false),
103-
);
84+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, true, !selected_on_right, false);
10485

10586
// Draw vertical dashed line
10687
let line_start = DVec2::new(hovered_x, selected_y);
@@ -127,30 +108,12 @@ fn draw_single_axis_zero_crossings(selected_bounds: Rect, hovered_bounds: Rect,
127108
// Draw horizontal solid line with length
128109
let line_start = DVec2::new(f64::min(hovered_max.x, selected_max.x), selected_facing_edge);
129110
let line_end = DVec2::new(f64::max(hovered_min.x, selected_min.x), selected_facing_edge);
130-
draw_line_with_length(
131-
line_start,
132-
line_end,
133-
transform,
134-
document_to_viewport,
135-
overlay_context,
136-
Some(false),
137-
Some(false),
138-
Some(selected_on_bottom),
139-
);
111+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, false, false, selected_on_bottom);
140112

141113
// Draw vertical solid line with length
142114
let line_start = DVec2::new(vertical_line_start_x, selected_facing_edge);
143115
let line_end = DVec2::new(vertical_line_start_x, hovered_facing_edge);
144-
draw_line_with_length(
145-
line_start,
146-
line_end,
147-
transform,
148-
document_to_viewport,
149-
overlay_context,
150-
Some(true),
151-
Some(!selected_on_right),
152-
Some(false),
153-
);
116+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, true, !selected_on_right, false);
154117

155118
// Draw vertical dashed line
156119
let dashed_line_start = DVec2::new(dashed_vertical_line_start_x, selected_facing_edge);
@@ -165,30 +128,12 @@ fn draw_single_axis_zero_crossings(selected_bounds: Rect, hovered_bounds: Rect,
165128
// Draw vertical solid line with length
166129
let line_start = DVec2::new(selected_facing_edge, f64::min(hovered_max.y, selected_max.y));
167130
let line_end = DVec2::new(selected_facing_edge, f64::max(hovered_min.y, selected_min.y));
168-
draw_line_with_length(
169-
line_start,
170-
line_end,
171-
transform,
172-
document_to_viewport,
173-
overlay_context,
174-
Some(false),
175-
Some(false),
176-
Some(selected_on_bottom),
177-
);
131+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, false, false, selected_on_bottom);
178132

179133
// Draw horizontal solid line with length
180134
let line_start = DVec2::new(selected_facing_edge, horizontal_line_start_y);
181135
let line_end = DVec2::new(hovered_facing_edge, horizontal_line_start_y);
182-
draw_line_with_length(
183-
line_start,
184-
line_end,
185-
transform,
186-
document_to_viewport,
187-
overlay_context,
188-
Some(true),
189-
Some(!selected_on_right),
190-
Some(false),
191-
);
136+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, true, !selected_on_right, false);
192137

193138
// Draw horizontal dashed line
194139
let dashed_line_start = DVec2::new(selected_facing_edge, dashed_horizontal_line_start_y);
@@ -220,7 +165,7 @@ fn draw_single_axis_one_crossings(selected_bounds: Rect, hovered_bounds: Rect, t
220165
// Draw vertical solid line with length
221166
let line_start = DVec2::new(vertical_line_start, selected_facing_edge);
222167
let line_end = DVec2::new(vertical_line_start, hovered_facing_edge);
223-
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, Some(true), Some(true), Some(false));
168+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, true, true, false);
224169
} else if overlap_x {
225170
let selected_facing_edge = if hovered_max.x < selected_min.x { selected_min.x } else { selected_max.x };
226171
let hovered_facing_edge = if hovered_max.x < selected_min.x { hovered_max.x } else { hovered_min.x };
@@ -233,7 +178,7 @@ fn draw_single_axis_one_crossings(selected_bounds: Rect, hovered_bounds: Rect, t
233178
// Draw horizontal solid line with length
234179
let line_start = DVec2::new(selected_facing_edge, horizontal_line_start_y);
235180
let line_end = DVec2::new(hovered_facing_edge, horizontal_line_start_y);
236-
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
181+
draw_line_with_length(line_start, line_end, transform, document_to_viewport, overlay_context, false, false, true);
237182
}
238183
}
239184

@@ -258,20 +203,20 @@ fn draw_two_axis_one_one_crossing(selected_bounds: Rect, hovered_bounds: Rect, t
258203
// Draw horizontal solid lines with length
259204
let top_x_start = DVec2::new(f64::min(selected_max.x, hovered_max.x), top_y_bound);
260205
let top_x_end = DVec2::new(f64::max(selected_max.x, hovered_max.x), top_y_bound);
261-
draw_line_with_length(top_x_start, top_x_end, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
206+
draw_line_with_length(top_x_start, top_x_end, transform, document_to_viewport, overlay_context, false, false, true);
262207

263208
let bottom_x_start = DVec2::new(f64::min(selected_min.x, hovered_min.x), bottom_y_bound);
264209
let bottom_x_end = DVec2::new(f64::max(selected_min.x, hovered_min.x), bottom_y_bound);
265-
draw_line_with_length(bottom_x_start, bottom_x_end, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(false));
210+
draw_line_with_length(bottom_x_start, bottom_x_end, transform, document_to_viewport, overlay_context, false, false, false);
266211

267212
// Draw vertical solid lines with length
268213
let top_y_start = DVec2::new(top_x_bound, f64::min(selected_min.y, hovered_min.y));
269214
let top_y_end = DVec2::new(top_x_bound, f64::max(selected_min.y, hovered_min.y));
270-
draw_line_with_length(top_y_start, top_y_end, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
215+
draw_line_with_length(top_y_start, top_y_end, transform, document_to_viewport, overlay_context, true, false, false);
271216

272217
let bottom_y_start = DVec2::new(bottom_x_bound, f64::min(selected_max.y, hovered_max.y));
273218
let bottom_y_end = DVec2::new(bottom_x_bound, f64::max(selected_max.y, hovered_max.y));
274-
draw_line_with_length(bottom_y_start, bottom_y_end, transform, document_to_viewport, overlay_context, Some(true), Some(true), Some(false));
219+
draw_line_with_length(bottom_y_start, bottom_y_end, transform, document_to_viewport, overlay_context, true, true, false);
275220
}
276221

277222
/// Draws measurements for partial overlaps with two vertical or horizontal edge intersections.
@@ -297,11 +242,11 @@ fn draw_two_axis_one_one_two_zero_crossing(
297242
// Draw vertical solid lines with length
298243
let y_start_left = DVec2::new(hovered_min.x, f64::min(selected_bound_edge, hovered_bound_edge));
299244
let y_end_left = DVec2::new(hovered_min.x, f64::max(selected_bound_edge, hovered_bound_edge));
300-
draw_line_with_length(y_start_left, y_end_left, transform, document_to_viewport, overlay_context, Some(true), Some(true), Some(false));
245+
draw_line_with_length(y_start_left, y_end_left, transform, document_to_viewport, overlay_context, true, true, false);
301246

302247
let y_start_right = DVec2::new(hovered_max.x, f64::min(selected_bound_edge, hovered_bound_edge));
303248
let y_end_right = DVec2::new(hovered_max.x, f64::max(selected_bound_edge, hovered_bound_edge));
304-
draw_line_with_length(y_start_right, y_end_right, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
249+
draw_line_with_length(y_start_right, y_end_right, transform, document_to_viewport, overlay_context, true, false, false);
305250

306251
// Draw horizontal solid lines with length
307252
let horizontal_line_y_bound = if selected_bounds.center().y >= hovered_bounds.center().y {
@@ -312,11 +257,11 @@ fn draw_two_axis_one_one_two_zero_crossing(
312257

313258
let x_start_left = DVec2::new(hovered_min.x, horizontal_line_y_bound);
314259
let x_end_left = DVec2::new(selected_min.x, horizontal_line_y_bound);
315-
draw_line_with_length(x_start_left, x_end_left, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(false));
260+
draw_line_with_length(x_start_left, x_end_left, transform, document_to_viewport, overlay_context, false, false, false);
316261

317262
let x_start_right = DVec2::new(hovered_max.x, horizontal_line_y_bound);
318263
let x_end_right = DVec2::new(selected_max.x, horizontal_line_y_bound);
319-
draw_line_with_length(x_start_right, x_end_right, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(false));
264+
draw_line_with_length(x_start_right, x_end_right, transform, document_to_viewport, overlay_context, false, false, false);
320265
} else {
321266
let selected_bound_edge = if selected_bounds.center().x >= hovered_bounds.center().x {
322267
selected_max.x
@@ -335,11 +280,11 @@ fn draw_two_axis_one_one_two_zero_crossing(
335280
// Draw vertical solid lines with length
336281
let y_start_up = DVec2::new(vertical_line_x, selected_min.y);
337282
let y_end_up = DVec2::new(vertical_line_x, hovered_min.y);
338-
draw_line_with_length(y_start_up, y_end_up, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
283+
draw_line_with_length(y_start_up, y_end_up, transform, document_to_viewport, overlay_context, true, false, false);
339284

340285
let y_start_down = DVec2::new(vertical_line_x, selected_max.y);
341286
let y_end_down = DVec2::new(vertical_line_x, hovered_max.y);
342-
draw_line_with_length(y_start_down, y_end_down, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
287+
draw_line_with_length(y_start_down, y_end_down, transform, document_to_viewport, overlay_context, true, false, false);
343288

344289
// Draw horizontal solid lines with length
345290
let horizontal_line_inner_x = if selected_bounds.center().x >= hovered_bounds.center().x {
@@ -349,11 +294,11 @@ fn draw_two_axis_one_one_two_zero_crossing(
349294
};
350295
let x_start_up = DVec2::new(vertical_line_x, f64::min(selected_min.y, hovered_min.y));
351296
let x_end_up = DVec2::new(horizontal_line_inner_x, f64::min(selected_min.y, hovered_min.y));
352-
draw_line_with_length(x_start_up, x_end_up, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
297+
draw_line_with_length(x_start_up, x_end_up, transform, document_to_viewport, overlay_context, false, false, true);
353298

354299
let x_start_down = DVec2::new(vertical_line_x, f64::max(selected_max.y, hovered_max.y));
355300
let x_end_down = DVec2::new(horizontal_line_inner_x, f64::max(selected_max.y, hovered_max.y));
356-
draw_line_with_length(x_start_down, x_end_down, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(false));
301+
draw_line_with_length(x_start_down, x_end_down, transform, document_to_viewport, overlay_context, false, false, false);
357302
}
358303
}
359304

@@ -365,90 +310,36 @@ fn draw_two_axis_two_zero_zero_two(selected_bounds: Rect, hovered_bounds: Rect,
365310
// Draw vertical solid lines with length
366311
let y_start_left_top = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::min(hovered_min.y, selected_min.y));
367312
let y_end_left_top = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::max(hovered_min.y, selected_min.y));
368-
draw_line_with_length(y_start_left_top, y_end_left_top, transform, document_to_viewport, overlay_context, Some(true), Some(true), Some(false));
313+
draw_line_with_length(y_start_left_top, y_end_left_top, transform, document_to_viewport, overlay_context, true, true, false);
369314

370315
let y_start_left_bottom = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::min(hovered_max.y, selected_max.y));
371316
let y_end_left_bottom = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::max(hovered_max.y, selected_max.y));
372-
draw_line_with_length(
373-
y_start_left_bottom,
374-
y_end_left_bottom,
375-
transform,
376-
document_to_viewport,
377-
overlay_context,
378-
Some(true),
379-
Some(true),
380-
Some(false),
381-
);
317+
draw_line_with_length(y_start_left_bottom, y_end_left_bottom, transform, document_to_viewport, overlay_context, true, true, false);
382318

383319
let y_start_right_top = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::min(hovered_min.y, selected_min.y));
384320
let y_end_right_top = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::max(hovered_min.y, selected_min.y));
385-
draw_line_with_length(
386-
y_start_right_top,
387-
y_end_right_top,
388-
transform,
389-
document_to_viewport,
390-
overlay_context,
391-
Some(true),
392-
Some(false),
393-
Some(false),
394-
);
321+
draw_line_with_length(y_start_right_top, y_end_right_top, transform, document_to_viewport, overlay_context, true, false, false);
395322

396323
let y_start_right_bottom = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::min(hovered_max.y, selected_max.y));
397324
let y_end_right_bottom = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::max(hovered_max.y, selected_max.y));
398-
draw_line_with_length(
399-
y_start_right_bottom,
400-
y_end_right_bottom,
401-
transform,
402-
document_to_viewport,
403-
overlay_context,
404-
Some(true),
405-
Some(false),
406-
Some(false),
407-
);
325+
draw_line_with_length(y_start_right_bottom, y_end_right_bottom, transform, document_to_viewport, overlay_context, true, false, false);
408326

409327
// Draw horizontal solid lines with length
410328
let x_start_left_top = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::min(hovered_min.y, selected_min.y));
411329
let x_end_left_top = DVec2::new(f64::max(hovered_min.x, selected_min.x), f64::min(hovered_min.y, selected_min.y));
412-
draw_line_with_length(x_start_left_top, x_end_left_top, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
330+
draw_line_with_length(x_start_left_top, x_end_left_top, transform, document_to_viewport, overlay_context, false, false, true);
413331

414332
let x_start_right_top = DVec2::new(f64::min(hovered_max.x, selected_max.x), f64::min(hovered_min.y, selected_min.y));
415333
let x_end_right_top = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::min(hovered_min.y, selected_min.y));
416-
draw_line_with_length(
417-
x_start_right_top,
418-
x_end_right_top,
419-
transform,
420-
document_to_viewport,
421-
overlay_context,
422-
Some(false),
423-
Some(false),
424-
Some(true),
425-
);
334+
draw_line_with_length(x_start_right_top, x_end_right_top, transform, document_to_viewport, overlay_context, false, false, true);
426335

427336
let x_start_left_bottom = DVec2::new(f64::min(hovered_min.x, selected_min.x), f64::max(hovered_max.y, selected_max.y));
428337
let x_end_left_bottom = DVec2::new(f64::max(hovered_min.x, selected_min.x), f64::max(hovered_max.y, selected_max.y));
429-
draw_line_with_length(
430-
x_start_left_bottom,
431-
x_end_left_bottom,
432-
transform,
433-
document_to_viewport,
434-
overlay_context,
435-
Some(false),
436-
Some(false),
437-
Some(false),
438-
);
338+
draw_line_with_length(x_start_left_bottom, x_end_left_bottom, transform, document_to_viewport, overlay_context, false, false, false);
439339

440340
let x_start_right_bottom = DVec2::new(f64::min(hovered_max.x, selected_max.x), f64::max(hovered_max.y, selected_max.y));
441341
let x_end_right_bottom = DVec2::new(f64::max(hovered_max.x, selected_max.x), f64::max(hovered_max.y, selected_max.y));
442-
draw_line_with_length(
443-
x_start_right_bottom,
444-
x_end_right_bottom,
445-
transform,
446-
document_to_viewport,
447-
overlay_context,
448-
Some(false),
449-
Some(false),
450-
Some(false),
451-
);
342+
draw_line_with_length(x_start_right_bottom, x_end_right_bottom, transform, document_to_viewport, overlay_context, false, false, false);
452343
}
453344

454345
/// Draws measurements where selected and hovered bounds have two vertical edges crossing each other.
@@ -459,20 +350,20 @@ fn draw_two_axis_two_zero_two_zero(selected_bounds: Rect, hovered_bounds: Rect,
459350
// Draw horizontal solid lines with length
460351
let x_start_left = DVec2::new(f64::max(hovered_min.x, selected_min.x), selected_bounds.center().y);
461352
let x_end_left = DVec2::new(f64::min(hovered_min.x, selected_min.x), selected_bounds.center().y);
462-
draw_line_with_length(x_start_left, x_end_left, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
353+
draw_line_with_length(x_start_left, x_end_left, transform, document_to_viewport, overlay_context, false, false, true);
463354

464355
let x_start_right = DVec2::new(f64::min(hovered_max.x, selected_max.x), selected_bounds.center().y);
465356
let x_end_right = DVec2::new(f64::max(hovered_max.x, selected_max.x), selected_bounds.center().y);
466-
draw_line_with_length(x_start_right, x_end_right, transform, document_to_viewport, overlay_context, Some(false), Some(false), Some(true));
357+
draw_line_with_length(x_start_right, x_end_right, transform, document_to_viewport, overlay_context, false, false, true);
467358

468359
// Draw vertical solid lines with length
469360
let y_start_top = DVec2::new(selected_bounds.center().x, f64::max(hovered_min.y, selected_min.y));
470361
let y_end_top = DVec2::new(selected_bounds.center().x, f64::min(hovered_min.y, selected_min.y));
471-
draw_line_with_length(y_start_top, y_end_top, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
362+
draw_line_with_length(y_start_top, y_end_top, transform, document_to_viewport, overlay_context, true, false, false);
472363

473364
let y_start_bottom = DVec2::new(selected_bounds.center().x, f64::min(hovered_max.y, selected_max.y));
474365
let y_end_bottom = DVec2::new(selected_bounds.center().x, f64::max(hovered_max.y, selected_max.y));
475-
draw_line_with_length(y_start_bottom, y_end_bottom, transform, document_to_viewport, overlay_context, Some(true), Some(false), Some(false));
366+
draw_line_with_length(y_start_bottom, y_end_bottom, transform, document_to_viewport, overlay_context, true, false, false);
476367
}
477368

478369
/// Handles overlapping scenarios involving two axes between selected and hovered bounds.

0 commit comments

Comments
 (0)