diff options
| author | Juan Linietsky | 2016-06-27 09:59:43 -0300 |
|---|---|---|
| committer | Juan Linietsky | 2016-06-27 10:00:36 -0300 |
| commit | 47d6cc08bbd745d63829e02ae408c4ce09ce1299 (patch) | |
| tree | 3929118695e9f77356b916362bd2214d82d4cc80 /scene/main/viewport.cpp | |
| parent | 2c59f778850dc4450481680e859efd66660c9119 (diff) | |
| download | godot-47d6cc08bbd745d63829e02ae408c4ce09ce1299.tar.gz godot-47d6cc08bbd745d63829e02ae408c4ce09ce1299.tar.zst godot-47d6cc08bbd745d63829e02ae408c4ce09ce1299.zip | |
Properly deliver localized coordinates when passing gui events through parents, closes #4215
Diffstat (limited to 'scene/main/viewport.cpp')
| -rw-r--r-- | scene/main/viewport.cpp | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/scene/main/viewport.cpp b/scene/main/viewport.cpp index 3c52af1c1..76af81c32 100644 --- a/scene/main/viewport.cpp +++ b/scene/main/viewport.cpp @@ -1575,35 +1575,38 @@ void Viewport::_gui_call_input(Control *p_control,const InputEvent& p_input) { // _block(); + InputEvent ev = p_input; + //mouse wheel events can't be stopped - bool cant_stop_me_now = (p_input.type==InputEvent::MOUSE_BUTTON && - (p_input.mouse_button.button_index==BUTTON_WHEEL_DOWN || - p_input.mouse_button.button_index==BUTTON_WHEEL_UP || - p_input.mouse_button.button_index==BUTTON_WHEEL_LEFT || - p_input.mouse_button.button_index==BUTTON_WHEEL_RIGHT ) ); + bool cant_stop_me_now = (ev.type==InputEvent::MOUSE_BUTTON && + (ev.mouse_button.button_index==BUTTON_WHEEL_DOWN || + ev.mouse_button.button_index==BUTTON_WHEEL_UP || + ev.mouse_button.button_index==BUTTON_WHEEL_LEFT || + ev.mouse_button.button_index==BUTTON_WHEEL_RIGHT ) ); CanvasItem *ci=p_control; while(ci) { Control *control = ci->cast_to<Control>(); if (control) { - control->call_multilevel(SceneStringNames::get_singleton()->_input_event,p_input); + control->call_multilevel(SceneStringNames::get_singleton()->_input_event,ev); if (gui.key_event_accepted) break; if (!control->is_inside_tree()) break; - control->emit_signal(SceneStringNames::get_singleton()->input_event,p_input); + control->emit_signal(SceneStringNames::get_singleton()->input_event,ev); if (!control->is_inside_tree() || control->is_set_as_toplevel()) break; if (gui.key_event_accepted) break; - if (!cant_stop_me_now && control->data.stop_mouse && (p_input.type==InputEvent::MOUSE_BUTTON || p_input.type==InputEvent::MOUSE_MOTION)) + if (!cant_stop_me_now && control->data.stop_mouse && (ev.type==InputEvent::MOUSE_BUTTON || ev.type==InputEvent::MOUSE_MOTION)) break; } if (ci->is_set_as_toplevel()) break; + ev=ev.xform_by(ci->get_transform()); //transform event upwards ci=ci->get_parent_item(); } |
