Merge pull request #96721 from aXu-AP/tooltip-distance

Fix tooltip appearing in old place, on movement
This commit is contained in:
Rémi Verschelde 2024-11-20 17:03:08 +01:00
commit 285954659d
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -1931,21 +1931,19 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
} }
} }
// If the tooltip timer isn't running, start it. // Reset the timer if the mouse has moved more than 5 pixels or has entered a new control.
// Otherwise, only reset the timer if the mouse has moved more than 5 pixels. if (!is_tooltip_shown && over->can_process()) {
if (!is_tooltip_shown && over->can_process() && Vector2 new_tooltip_pos = over->get_screen_transform().xform(pos);
(gui.tooltip_timer.is_null() || if (over != gui.tooltip_control || gui.tooltip_pos.distance_squared_to(new_tooltip_pos) > 25) {
Math::is_zero_approx(gui.tooltip_timer->get_time_left()) || if (gui.tooltip_timer.is_valid()) {
mm->get_relative().length() > 5.0)) { gui.tooltip_timer->release_connections();
if (gui.tooltip_timer.is_valid()) { }
gui.tooltip_timer->release_connections(); gui.tooltip_control = over;
gui.tooltip_timer = Ref<SceneTreeTimer>(); gui.tooltip_pos = new_tooltip_pos;
gui.tooltip_timer = get_tree()->create_timer(gui.tooltip_delay);
gui.tooltip_timer->set_ignore_time_scale(true);
gui.tooltip_timer->connect("timeout", callable_mp(this, &Viewport::_gui_show_tooltip));
} }
gui.tooltip_control = over;
gui.tooltip_pos = over->get_screen_transform().xform(pos);
gui.tooltip_timer = get_tree()->create_timer(gui.tooltip_delay);
gui.tooltip_timer->set_ignore_time_scale(true);
gui.tooltip_timer->connect("timeout", callable_mp(this, &Viewport::_gui_show_tooltip));
} }
} }