From 07acf9fd30708c6d70b6fda41785a2ccb7e630b7 Mon Sep 17 00:00:00 2001 From: Emil Ernerfeldt Date: Tue, 2 Jul 2024 10:27:19 +0200 Subject: [PATCH] Make it easier to grab the handle of a floating scroll bar --- crates/egui/src/containers/scroll_area.rs | 9 +++++++-- crates/egui/src/style.rs | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/crates/egui/src/containers/scroll_area.rs b/crates/egui/src/containers/scroll_area.rs index 536b3c33a94..e564fbe1e4a 100644 --- a/crates/egui/src/containers/scroll_area.rs +++ b/crates/egui/src/containers/scroll_area.rs @@ -966,17 +966,22 @@ impl Prepared { // top/bottom of a horizontal scroll (d==0). // left/rigth of a vertical scroll (d==1). let mut cross = if scroll_style.floating { + // The bounding rect of a fully visible bar. + // When we hover this area, we should show the full bar: let max_bar_rect = if d == 0 { - outer_rect.with_min_y(outer_rect.max.y - scroll_style.allocated_width()) + outer_rect.with_min_y(outer_rect.max.y - outer_margin - scroll_style.bar_width) } else { - outer_rect.with_min_x(outer_rect.max.x - scroll_style.allocated_width()) + outer_rect.with_min_x(outer_rect.max.x - outer_margin - scroll_style.bar_width) }; + let is_hovering_bar_area = is_hovering_outer_rect && ui.rect_contains_pointer(max_bar_rect) || state.scroll_bar_interaction[d]; + let is_hovering_bar_area_t = ui .ctx() .animate_bool_responsive(id.with((d, "bar_hover")), is_hovering_bar_area); + let width = show_factor * lerp( scroll_style.floating_width..=scroll_style.bar_width, diff --git a/crates/egui/src/style.rs b/crates/egui/src/style.rs index dc366ceee91..6009a6b6376 100644 --- a/crates/egui/src/style.rs +++ b/crates/egui/src/style.rs @@ -1163,9 +1163,9 @@ impl Default for Spacing { impl Default for Interaction { fn default() -> Self { Self { + interact_radius: 5.0, resize_grab_radius_side: 5.0, resize_grab_radius_corner: 10.0, - interact_radius: 5.0, show_tooltips_only_when_still: true, tooltip_delay: 0.5, tooltip_grace_time: 0.2,