From db7f49183357c282e267c0743411505eb61f1c6f Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Tue, 8 Aug 2017 10:57:33 -0300 Subject: [PATCH] Fixes node selection, and properly ignore mouse on inner comment node body, closes #6298 --- scene/gui/graph_edit.cpp | 16 ++++++++-------- scene/gui/graph_node.cpp | 3 ++- scene/gui/graph_node.h | 4 ++-- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp index 11f750ea704..32725ebb8cf 100644 --- a/scene/gui/graph_edit.cpp +++ b/scene/gui/graph_edit.cpp @@ -207,9 +207,10 @@ void GraphEdit::_graph_node_raised(Node *p_gn) { GraphNode *gn = p_gn->cast_to(); ERR_FAIL_COND(!gn); - gn->raise(); if (gn->is_comment()) { move_child(gn, 0); + } else { + gn->raise(); } int first_not_comment = 0; for (int i = 0; i < get_child_count(); i++) { @@ -870,21 +871,19 @@ void GraphEdit::_gui_input(const Ref &p_ev) { if (b->get_button_index() == BUTTON_LEFT && b->is_pressed()) { GraphNode *gn = NULL; - GraphNode *gn_selected = NULL; + for (int i = get_child_count() - 1; i >= 0; i--) { - gn_selected = get_child(i)->cast_to(); + GraphNode *gn_selected = get_child(i)->cast_to(); if (gn_selected) { - if (gn_selected->is_resizing()) continue; - Rect2 r = gn_selected->get_rect(); - r.size *= zoom; - if (r.has_point(get_local_mouse_pos())) + if (gn_selected->has_point(gn_selected->get_local_mouse_pos())) { gn = gn_selected; - break; + break; + } } } @@ -1225,6 +1224,7 @@ GraphEdit::GraphEdit() { connections_layer->connect("draw", this, "_connections_layer_draw"); connections_layer->set_name("CLAYER"); connections_layer->set_disable_visibility_clip(true); // so it can draw freely and be offseted + connections_layer->set_mouse_filter(MOUSE_FILTER_IGNORE); h_scroll = memnew(HScrollBar); h_scroll->set_name("_h_scroll"); diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp index 538dd846e47..4f07d21f4dc 100644 --- a/scene/gui/graph_node.cpp +++ b/scene/gui/graph_node.cpp @@ -176,6 +176,7 @@ bool GraphNode::has_point(const Point2 &p_point) const { if (Rect2(get_size() - resizer->get_size(), resizer->get_size()).has_point(p_point)) { return true; } + if (Rect2(0, 0, get_size().width, comment->get_margin(MARGIN_TOP)).has_point(p_point)) { return true; } @@ -719,7 +720,7 @@ GraphNode::GraphNode() { overlay = OVERLAY_DISABLED; show_close = false; connpos_dirty = true; - set_mouse_filter(MOUSE_FILTER_PASS); + set_mouse_filter(MOUSE_FILTER_STOP); comment = false; resizeable = false; resizing = false; diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h index 056b699aa62..a7d9e8ddb02 100644 --- a/scene/gui/graph_node.h +++ b/scene/gui/graph_node.h @@ -99,8 +99,6 @@ private: Overlay overlay; - bool has_point(const Point2 &p_point) const; - protected: void _gui_input(const Ref &p_ev); void _notification(int p_what); @@ -111,6 +109,8 @@ protected: void _get_property_list(List *p_list) const; public: + bool has_point(const Point2 &p_point) const; + void set_slot(int p_idx, bool p_enable_left, int p_type_left, const Color &p_color_left, bool p_enable_right, int p_type_right, const Color &p_color_right, const Ref &p_custom_left = Ref(), const Ref &p_custom_right = Ref()); void clear_slot(int p_idx); void clear_all_slots();