From d3b96b194a17dd7ecc36011d0592096019b7b68c Mon Sep 17 00:00:00 2001 From: nekonimous <103307276+nekonimous@users.noreply.github.com> Date: Mon, 4 Aug 2025 07:05:56 +0900 Subject: [PATCH 1/3] Fix full_ui example overflowing scroll position --- examples/testbed/full_ui.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/examples/testbed/full_ui.rs b/examples/testbed/full_ui.rs index b76d24b5cd2cd..9afea98efaa88 100644 --- a/examples/testbed/full_ui.rs +++ b/examples/testbed/full_ui.rs @@ -9,6 +9,7 @@ use bevy::{ basic::LIME, css::{DARK_GRAY, NAVY}, }, + core_widgets::CoreScrollbar, input::mouse::{MouseScrollUnit, MouseWheel}, picking::hover::HoverMap, prelude::*, @@ -437,7 +438,7 @@ fn toggle_debug_overlay( pub fn update_scroll_position( mut mouse_wheel_events: EventReader, hover_map: Res, - mut scrolled_node_query: Query<&mut ScrollPosition>, + mut scrolled_node_query: Query<(&mut ScrollPosition, &ComputedNode), Without>, keyboard_input: Res>, ) { for mouse_wheel_event in mouse_wheel_events.read() { @@ -453,9 +454,17 @@ pub fn update_scroll_position( for (_pointer, pointer_map) in hover_map.iter() { for (entity, _hit) in pointer_map.iter() { - if let Ok(mut scroll_position) = scrolled_node_query.get_mut(*entity) { + if let Ok((mut scroll_position, scroll_content)) = + scrolled_node_query.get_mut(*entity) + { + let visible_size = scroll_content.size() * scroll_content.inverse_scale_factor; + let content_size = + scroll_content.content_size() * scroll_content.inverse_scale_factor; + + let range = (content_size.y - visible_size.y).max(0.); + scroll_position.x -= dx; - scroll_position.y -= dy; + scroll_position.y = (scroll_position.y - dy).clamp(0., range); } } } From 65f2f8d43e94a8bbb58e7786eac0ef8c2c86594a Mon Sep 17 00:00:00 2001 From: Alice Cecile Date: Sun, 3 Aug 2025 21:42:39 -0400 Subject: [PATCH 2/3] Clearer math Co-authored-by: ickshonpe --- examples/testbed/full_ui.rs | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/examples/testbed/full_ui.rs b/examples/testbed/full_ui.rs index 9afea98efaa88..e4ff4a5ab8824 100644 --- a/examples/testbed/full_ui.rs +++ b/examples/testbed/full_ui.rs @@ -457,11 +457,10 @@ pub fn update_scroll_position( if let Ok((mut scroll_position, scroll_content)) = scrolled_node_query.get_mut(*entity) { - let visible_size = scroll_content.size() * scroll_content.inverse_scale_factor; - let content_size = - scroll_content.content_size() * scroll_content.inverse_scale_factor; - - let range = (content_size.y - visible_size.y).max(0.); + let visible_size = scroll_content.size(); + let content_size = scroll_content.content_size(); + + let range = (content_size.y - visible_size.y).max(0.) * scroll_content.inverse_scale_factor; scroll_position.x -= dx; scroll_position.y = (scroll_position.y - dy).clamp(0., range); From 9f2a3384f3c33b3375ed6679b24ae512b1f1ccb1 Mon Sep 17 00:00:00 2001 From: nekonimous <103307276+nekonimous@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:28:37 +0900 Subject: [PATCH 3/3] fmt --- examples/testbed/full_ui.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/testbed/full_ui.rs b/examples/testbed/full_ui.rs index e4ff4a5ab8824..04ad731e9bb83 100644 --- a/examples/testbed/full_ui.rs +++ b/examples/testbed/full_ui.rs @@ -459,8 +459,9 @@ pub fn update_scroll_position( { let visible_size = scroll_content.size(); let content_size = scroll_content.content_size(); - - let range = (content_size.y - visible_size.y).max(0.) * scroll_content.inverse_scale_factor; + + let range = (content_size.y - visible_size.y).max(0.) + * scroll_content.inverse_scale_factor; scroll_position.x -= dx; scroll_position.y = (scroll_position.y - dy).clamp(0., range);