diff options
author | Markus Sauermann <6299227+Sauermann@users.noreply.github.com> | 2022-03-10 18:44:28 +0100 |
---|---|---|
committer | Markus Sauermann <6299227+Sauermann@users.noreply.github.com> | 2022-09-18 17:15:38 +0200 |
commit | 52da6f1a44ff407fcb852a7e7124b7e652885d87 (patch) | |
tree | ed55ca4520c6eb372e432837e8d243bba6968e79 /scene/main | |
parent | e5594c26b14e75d8b75d1f697cf2bfbd6254a50c (diff) |
Update mouse cursor shape after changes
This fixes some cases where the mouse cursor shape did not change automatically, but instead required a MouseMove to update.
Diffstat (limited to 'scene/main')
-rw-r--r-- | scene/main/scene_tree.cpp | 1 | ||||
-rw-r--r-- | scene/main/viewport.cpp | 4 | ||||
-rw-r--r-- | scene/main/window.cpp | 12 | ||||
-rw-r--r-- | scene/main/window.h | 2 |
4 files changed, 17 insertions, 2 deletions
diff --git a/scene/main/scene_tree.cpp b/scene/main/scene_tree.cpp index c18aa5aaa2..a591c9dca2 100644 --- a/scene/main/scene_tree.cpp +++ b/scene/main/scene_tree.cpp @@ -1085,6 +1085,7 @@ void SceneTree::_change_scene(Node *p_to) { if (p_to) { current_scene = p_to; root->add_child(p_to); + root->update_mouse_cursor_shape(); } } diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 879d494909..b963607e80 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1576,7 +1576,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.drag_preview_id = ObjectID(); } _propagate_viewport_notification(this, NOTIFICATION_DRAG_END); - // Change mouse accordingly. + get_base_window()->update_mouse_cursor_shape(); } _gui_cancel_tooltip(); @@ -1597,7 +1597,7 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) { gui.dragging = false; gui.drag_mouse_over = nullptr; _propagate_viewport_notification(this, NOTIFICATION_DRAG_END); - // Change mouse accordingly. + get_base_window()->update_mouse_cursor_shape(); } gui.mouse_focus_mask &= ~mouse_button_to_mask(mb->get_button_index()); // Remove from mask. diff --git a/scene/main/window.cpp b/scene/main/window.cpp index ebe9587b31..e6993e6522 100644 --- a/scene/main/window.cpp +++ b/scene/main/window.cpp @@ -392,6 +392,18 @@ void Window::_event_callback(DisplayServer::WindowEvent p_event) { } } +void Window::update_mouse_cursor_shape() { + // The default shape is set in Viewport::_gui_input_event. To instantly + // see the shape in the viewport we need to trigger a mouse motion event. + Ref<InputEventMouseMotion> mm; + Vector2 pos = get_mouse_position(); + Transform2D xform = get_global_canvas_transform().affine_inverse(); + mm.instantiate(); + mm->set_position(pos); + mm->set_global_position(xform.xform(pos)); + push_input(mm); +} + void Window::show() { set_visible(true); } diff --git a/scene/main/window.h b/scene/main/window.h index 8c6ca65436..786f0ada38 100644 --- a/scene/main/window.h +++ b/scene/main/window.h @@ -220,6 +220,8 @@ public: void set_visible(bool p_visible); bool is_visible() const; + void update_mouse_cursor_shape(); + void show(); void hide(); |