summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorPedro J. Estébanez <pedrojrulez@gmail.com>2019-03-05 22:31:02 +0100
committerPedro J. Estébanez <pedrojrulez@gmail.com>2019-03-05 22:33:34 +0100
commit82902656ac6c60c40979e9cb513b65d96119f917 (patch)
treeea78cf3be02c52c9bd1819c8409cc2d2c9af65a7 /main
parentf43ee4aff8e5f72c24cfbd8f1ff90703714857e0 (diff)
Improve/fix picking
Acknowledge mouse button events as position tellers (to make picking more solid; for instance, the touch mouse is raised with a mouse unpressed event that may have a more current position) Forget mouse position for physics if touch mouse raised (because the position known as last is no longer meaningful) Remove needless check for mouse over/exit (now there's code to inject an spurious move for cases where camera/objects have moved) Restrict 2D mouse over/exit to mouse events (including emulated from touch; true touches shouldn't trigger the signals) Fixes #26460.
Diffstat (limited to 'main')
-rw-r--r--main/input_default.cpp3
1 files changed, 3 insertions, 0 deletions
diff --git a/main/input_default.cpp b/main/input_default.cpp
index e8133f9eba..65910b34bc 100644
--- a/main/input_default.cpp
+++ b/main/input_default.cpp
@@ -355,6 +355,7 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool
Ref<InputEventMouseButton> button_event;
button_event.instance();
+ button_event->set_device(-1);
button_event->set_position(st->get_position());
button_event->set_global_position(st->get_position());
button_event->set_pressed(st->is_pressed());
@@ -383,6 +384,7 @@ void InputDefault::_parse_input_event_impl(const Ref<InputEvent> &p_event, bool
Ref<InputEventMouseMotion> motion_event;
motion_event.instance();
+ motion_event->set_device(-1);
motion_event->set_position(sd->get_position());
motion_event->set_global_position(sd->get_position());
motion_event->set_relative(sd->get_relative());
@@ -600,6 +602,7 @@ void InputDefault::ensure_touch_mouse_raised() {
Ref<InputEventMouseButton> button_event;
button_event.instance();
+ button_event->set_device(-1);
button_event->set_position(mouse_pos);
button_event->set_global_position(mouse_pos);
button_event->set_pressed(false);