Merge pull request #57894 from Sauermann/fix-subviewport-1
Fix unrestricted mouse-event propagation to SubViewports for Physics-Picking
This commit is contained in:
commit
72323a57d0
|
@ -159,7 +159,11 @@
|
||||||
Calling this method will propagate calls to child nodes for following methods in the given order:
|
Calling this method will propagate calls to child nodes for following methods in the given order:
|
||||||
- [method Node._input]
|
- [method Node._input]
|
||||||
- [method Control._gui_input] for [Control] nodes
|
- [method Control._gui_input] for [Control] nodes
|
||||||
|
- [method Node._shortcut_input]
|
||||||
|
- [method Node._unhandled_input]
|
||||||
|
- [method Node._unhandled_key_input]
|
||||||
If an earlier method marks the input as handled via [method set_input_as_handled], any later method in this list will not be called.
|
If an earlier method marks the input as handled via [method set_input_as_handled], any later method in this list will not be called.
|
||||||
|
If none of the methods handle the event and [member physics_object_picking] is [code]true[/code], the event is used for physics object picking.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
<method name="push_text_input">
|
<method name="push_text_input">
|
||||||
|
|
|
@ -262,7 +262,7 @@ void EditorCommandPalette::register_shortcuts_as_command() {
|
||||||
ev.instantiate();
|
ev.instantiate();
|
||||||
ev->set_shortcut(shortcut);
|
ev->set_shortcut(shortcut);
|
||||||
String shortcut_text = String(shortcut->get_as_text());
|
String shortcut_text = String(shortcut->get_as_text());
|
||||||
add_command(command_name, E.key, callable_mp(EditorNode::get_singleton()->get_viewport(), &Viewport::push_unhandled_input), varray(ev, false), shortcut_text);
|
add_command(command_name, E.key, callable_mp(EditorNode::get_singleton()->get_viewport(), &Viewport::push_input), varray(ev, false), shortcut_text);
|
||||||
}
|
}
|
||||||
unregistered_shortcuts.clear();
|
unregistered_shortcuts.clear();
|
||||||
|
|
||||||
|
@ -283,7 +283,7 @@ Ref<Shortcut> EditorCommandPalette::add_shortcut_command(const String &p_command
|
||||||
ev.instantiate();
|
ev.instantiate();
|
||||||
ev->set_shortcut(p_shortcut);
|
ev->set_shortcut(p_shortcut);
|
||||||
String shortcut_text = String(p_shortcut->get_as_text());
|
String shortcut_text = String(p_shortcut->get_as_text());
|
||||||
add_command(p_command, p_key, callable_mp(EditorNode::get_singleton()->get_viewport(), &Viewport::push_unhandled_input), varray(ev, false), shortcut_text);
|
add_command(p_command, p_key, callable_mp(EditorNode::get_singleton()->get_viewport(), &Viewport::push_input), varray(ev, false), shortcut_text);
|
||||||
} else {
|
} else {
|
||||||
const String key_name = String(p_key);
|
const String key_name = String(p_key);
|
||||||
const String command_name = String(p_command);
|
const String command_name = String(p_command);
|
||||||
|
|
|
@ -221,33 +221,6 @@ bool SubViewportContainer::_is_propagated_in_gui_input(const Ref<InputEvent> &p_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SubViewportContainer::unhandled_input(const Ref<InputEvent> &p_event) {
|
|
||||||
ERR_FAIL_COND(p_event.is_null());
|
|
||||||
|
|
||||||
if (Engine::get_singleton()->is_editor_hint()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Transform2D xform = get_global_transform_with_canvas();
|
|
||||||
|
|
||||||
if (stretch) {
|
|
||||||
Transform2D scale_xf;
|
|
||||||
scale_xf.scale(Vector2(shrink, shrink));
|
|
||||||
xform *= scale_xf;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ref<InputEvent> ev = p_event->xformed_by(xform.affine_inverse());
|
|
||||||
|
|
||||||
for (int i = 0; i < get_child_count(); i++) {
|
|
||||||
SubViewport *c = Object::cast_to<SubViewport>(get_child(i));
|
|
||||||
if (!c || c->is_input_disabled()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
c->push_unhandled_input(ev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void SubViewportContainer::add_child_notify(Node *p_child) {
|
void SubViewportContainer::add_child_notify(Node *p_child) {
|
||||||
if (Object::cast_to<SubViewport>(p_child)) {
|
if (Object::cast_to<SubViewport>(p_child)) {
|
||||||
queue_redraw();
|
queue_redraw();
|
||||||
|
@ -290,5 +263,4 @@ void SubViewportContainer::_bind_methods() {
|
||||||
|
|
||||||
SubViewportContainer::SubViewportContainer() {
|
SubViewportContainer::SubViewportContainer() {
|
||||||
set_process_input(true);
|
set_process_input(true);
|
||||||
set_process_unhandled_input(true);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@ public:
|
||||||
|
|
||||||
virtual void input(const Ref<InputEvent> &p_event) override;
|
virtual void input(const Ref<InputEvent> &p_event) override;
|
||||||
virtual void gui_input(const Ref<InputEvent> &p_event) override;
|
virtual void gui_input(const Ref<InputEvent> &p_event) override;
|
||||||
virtual void unhandled_input(const Ref<InputEvent> &p_event) override;
|
|
||||||
void set_stretch_shrink(int p_shrink);
|
void set_stretch_shrink(int p_shrink);
|
||||||
int get_stretch_shrink() const;
|
int get_stretch_shrink() const;
|
||||||
void recalc_force_viewport_sizes();
|
void recalc_force_viewport_sizes();
|
||||||
|
|
|
@ -2907,6 +2907,10 @@ void Viewport::push_input(const Ref<InputEvent> &p_event, bool p_local_coords) {
|
||||||
_gui_cleanup_internal_state(ev);
|
_gui_cleanup_internal_state(ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!is_input_handled()) {
|
||||||
|
push_unhandled_input(ev, true);
|
||||||
|
}
|
||||||
|
|
||||||
event_count++;
|
event_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1384,10 +1384,6 @@ void Window::_window_input(const Ref<InputEvent> &p_ev) {
|
||||||
if (is_inside_tree()) {
|
if (is_inside_tree()) {
|
||||||
push_input(p_ev);
|
push_input(p_ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!is_input_handled() && is_inside_tree()) {
|
|
||||||
push_unhandled_input(p_ev);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Window::_window_input_text(const String &p_text) {
|
void Window::_window_input_text(const String &p_text) {
|
||||||
|
|
Loading…
Reference in New Issue