Browse Source

ViewportContainer was not passing unhandled input. Pass it, fixes #17326

Juan Linietsky 6 years ago
parent
commit
26d33d1c6e
2 changed files with 27 additions and 0 deletions
  1. 26 0
      scene/gui/viewport_container.cpp
  2. 1 0
      scene/gui/viewport_container.h

+ 26 - 0
scene/gui/viewport_container.cpp

@@ -167,8 +167,34 @@ void ViewportContainer::_input(const Ref<InputEvent> &p_event) {
 	}
 	}
 }
 }
 
 
+void ViewportContainer::_unhandled_input(const Ref<InputEvent> &p_event) {
+
+	if (Engine::get_singleton()->is_editor_hint())
+		return;
+
+	Transform2D xform = get_global_transform();
+
+	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++) {
+
+		Viewport *c = Object::cast_to<Viewport>(get_child(i));
+		if (!c || c->is_input_disabled())
+			continue;
+
+		c->unhandled_input(ev);
+	}
+}
+
 void ViewportContainer::_bind_methods() {
 void ViewportContainer::_bind_methods() {
 
 
+	ClassDB::bind_method(D_METHOD("_unhandled_input", "event"), &ViewportContainer::_unhandled_input);
 	ClassDB::bind_method(D_METHOD("_input", "event"), &ViewportContainer::_input);
 	ClassDB::bind_method(D_METHOD("_input", "event"), &ViewportContainer::_input);
 	ClassDB::bind_method(D_METHOD("set_stretch", "enable"), &ViewportContainer::set_stretch);
 	ClassDB::bind_method(D_METHOD("set_stretch", "enable"), &ViewportContainer::set_stretch);
 	ClassDB::bind_method(D_METHOD("is_stretch_enabled"), &ViewportContainer::is_stretch_enabled);
 	ClassDB::bind_method(D_METHOD("is_stretch_enabled"), &ViewportContainer::is_stretch_enabled);

+ 1 - 0
scene/gui/viewport_container.h

@@ -49,6 +49,7 @@ public:
 	bool is_stretch_enabled() const;
 	bool is_stretch_enabled() const;
 
 
 	void _input(const Ref<InputEvent> &p_event);
 	void _input(const Ref<InputEvent> &p_event);
+	void _unhandled_input(const Ref<InputEvent> &p_event);
 	void set_stretch_shrink(int p_shrink);
 	void set_stretch_shrink(int p_shrink);
 	int get_stretch_shrink() const;
 	int get_stretch_shrink() const;