summaryrefslogtreecommitdiffstats
path: root/scene/gui/tree.cpp
diff options
context:
space:
mode:
authorThaddeus Crews <repiteo@outlook.com>2024-11-10 12:12:17 -0600
committerThaddeus Crews <repiteo@outlook.com>2024-11-10 12:12:17 -0600
commit52ce3c7078d821c2e835495bb571bb5af5ab211d (patch)
tree4a0c8a2edcea17752257e6c4f59448b3f7866ee9 /scene/gui/tree.cpp
parent5bc5f066e22c1d19b8bf83e3815bec1207c3eedc (diff)
parent49f918e59612a18b8e2a58dfb7b43a851d2dfb45 (diff)
downloadredot-engine-52ce3c7078d821c2e835495bb571bb5af5ab211d.tar.gz
Merge pull request #98829 from adamscott/fix-tree-scroll-center-overflow
Fix issue where scrolling to item center would overflow on top
Diffstat (limited to 'scene/gui/tree.cpp')
-rw-r--r--scene/gui/tree.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index aab6f672f0..cfd93a5317 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -5362,14 +5362,16 @@ void Tree::scroll_to_item(TreeItem *p_item, bool p_center_on_item) {
int y_offset = get_item_offset(p_item);
if (y_offset != -1) {
- const int tbh = _get_title_button_height();
- y_offset -= tbh;
+ const int title_button_height = _get_title_button_height();
+ y_offset -= title_button_height;
const int cell_h = compute_item_height(p_item) + theme_cache.v_separation;
- int screen_h = area_size.height - tbh;
+ int screen_h = area_size.height - title_button_height;
if (p_center_on_item) {
- v_scroll->set_value(y_offset - (screen_h - cell_h) / 2.0f);
+ // This makes sure that centering the offset doesn't overflow.
+ const double v_scroll_value = y_offset - MAX((screen_h - cell_h) / 2.0, 0.0);
+ v_scroll->set_value(v_scroll_value);
} else {
if (cell_h > screen_h) { // Screen size is too small, maybe it was not resized yet.
v_scroll->set_value(y_offset);