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.
This commit is contained in:
parent
c6c464cf9a
commit
bb813ba7bc
1 changed files with 11 additions and 11 deletions
|
|
@ -3879,7 +3879,7 @@ void Tree::gui_input(const Ref<InputEvent> &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<InputEvent> &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<InputEvent> &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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue