From bb813ba7bc1e0358ade36034ba81f88deacdbb5e Mon Sep 17 00:00:00 2001 From: Hugo Locurcio Date: Sat, 2 Nov 2024 18:45:28 +0100 Subject: [PATCH] Fix Tree drag-and-drop scrolling having low FPS at low Physics Ticks per Second Scrolling is now performed in process instead of physics process. This makes scrolling much smoother if Physics Ticks per Second is lower than the rendered FPS. --- scene/gui/tree.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp index aab6f672f0e..307b0caef43 100644 --- a/scene/gui/tree.cpp +++ b/scene/gui/tree.cpp @@ -3879,7 +3879,7 @@ void Tree::gui_input(const Ref &p_event) { if (drag_speed == 0) { drag_touching_deaccel = false; drag_touching = false; - set_physics_process_internal(false); + set_process_internal(false); } else { drag_touching_deaccel = true; } @@ -3966,7 +3966,7 @@ void Tree::gui_input(const Ref &p_event) { } if (drag_touching) { - set_physics_process_internal(false); + set_process_internal(false); drag_touching_deaccel = false; drag_touching = false; drag_speed = 0; @@ -3981,7 +3981,7 @@ void Tree::gui_input(const Ref &p_event) { drag_touching = DisplayServer::get_singleton()->is_touchscreen_available(); drag_touching_deaccel = false; if (drag_touching) { - set_physics_process_internal(true); + set_process_internal(true); } if (mb->get_button_index() == MouseButton::LEFT) { @@ -4461,7 +4461,7 @@ void Tree::_notification(int p_what) { case NOTIFICATION_DRAG_END: { drop_mode_flags = 0; scrolling = false; - set_physics_process_internal(false); + set_process_internal(false); queue_redraw(); } break; @@ -4469,21 +4469,21 @@ void Tree::_notification(int p_what) { single_select_defer = nullptr; if (theme_cache.scroll_speed > 0) { scrolling = true; - set_physics_process_internal(true); + set_process_internal(true); } } break; - case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: { + case NOTIFICATION_INTERNAL_PROCESS: { if (drag_touching) { if (drag_touching_deaccel) { float pos = v_scroll->get_value(); - pos += drag_speed * get_physics_process_delta_time(); + pos += drag_speed * get_process_delta_time(); bool turnoff = false; if (pos < 0) { pos = 0; turnoff = true; - set_physics_process_internal(false); + set_process_internal(false); drag_touching = false; drag_touching_deaccel = false; } @@ -4495,7 +4495,7 @@ void Tree::_notification(int p_what) { v_scroll->set_value(pos); float sgn = drag_speed < 0 ? -1 : 1; float val = Math::abs(drag_speed); - val -= 1000 * get_physics_process_delta_time(); + val -= 1000 * get_process_delta_time(); if (val < 0) { turnoff = true; @@ -4503,7 +4503,7 @@ void Tree::_notification(int p_what) { drag_speed = sgn * val; if (turnoff) { - set_physics_process_internal(false); + set_process_internal(false); drag_touching = false; drag_touching_deaccel = false; } @@ -4526,7 +4526,7 @@ void Tree::_notification(int p_what) { point.y = mouse_position.y - (get_size().height - theme_cache.scroll_border); } - point *= theme_cache.scroll_speed * get_physics_process_delta_time(); + point *= theme_cache.scroll_speed * get_process_delta_time(); point += get_scroll(); h_scroll->set_value(point.x); v_scroll->set_value(point.y);