diff options
Diffstat (limited to 'scene/gui/graph_edit.h')
| -rw-r--r-- | scene/gui/graph_edit.h | 145 |
1 files changed, 102 insertions, 43 deletions
diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h index 614e9b9695..a7be9ac0b3 100644 --- a/scene/gui/graph_edit.h +++ b/scene/gui/graph_edit.h @@ -32,21 +32,24 @@ #define GRAPH_EDIT_H #include "scene/gui/box_container.h" -#include "scene/gui/button.h" #include "scene/gui/graph_node.h" -#include "scene/gui/label.h" -#include "scene/gui/scroll_bar.h" -#include "scene/gui/spin_box.h" +class Button; class GraphEdit; class GraphEditArranger; +class HScrollBar; +class Label; +class PanelContainer; +class SpinBox; class ViewPanner; +class VScrollBar; class GraphEditFilter : public Control { GDCLASS(GraphEditFilter, Control); friend class GraphEdit; friend class GraphEditMinimap; + GraphEdit *ge = nullptr; virtual bool has_point(const Point2 &p_point) const override; @@ -63,24 +66,24 @@ class GraphEditMinimap : public Control { GraphEdit *ge = nullptr; -public: - GraphEditMinimap(GraphEdit *p_edit); - - virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const override; - - void update_minimap(); - Rect2 get_camera_rect(); - -private: Vector2 minimap_padding; Vector2 minimap_offset; - Vector2 graph_proportions; - Vector2 graph_padding; - Vector2 camera_position; - Vector2 camera_size; + Vector2 graph_proportions = Vector2(1, 1); + Vector2 graph_padding = Vector2(0, 0); + Vector2 camera_position = Vector2(100, 50); + Vector2 camera_size = Vector2(200, 200); - bool is_pressing; - bool is_resizing; + bool is_pressing = false; + bool is_resizing = false; + + struct ThemeCache { + Ref<StyleBox> panel; + Ref<StyleBox> node_style; + Ref<StyleBox> camera_style; + + Ref<Texture2D> resizer; + Color resizer_color; + } theme_cache; Vector2 _get_render_size(); Vector2 _get_graph_offset(); @@ -92,6 +95,17 @@ private: virtual void gui_input(const Ref<InputEvent> &p_ev) override; void _adjust_graph_scroll(const Vector2 &p_offset); + +protected: + static void _bind_methods(); + +public: + virtual CursorShape get_cursor_shape(const Point2 &p_pos = Point2i()) const override; + + void update_minimap(); + Rect2 get_camera_rect(); + + GraphEditMinimap(GraphEdit *p_edit); }; class GraphEdit : public Control { @@ -142,21 +156,22 @@ private: Button *toggle_snapping_button = nullptr; SpinBox *snapping_distance_spinbox = nullptr; - Button *show_grid_button = nullptr; + Button *toggle_grid_button = nullptr; Button *minimap_button = nullptr; - - Button *layout_button = nullptr; + Button *arrange_button = nullptr; HScrollBar *h_scrollbar = nullptr; VScrollBar *v_scrollbar = nullptr; - float port_hotzone_inner_extent = 0.0; - float port_hotzone_outer_extent = 0.0; - Ref<ViewPanner> panner; bool warped_panning = true; - bool arrange_nodes_button_hidden = false; + bool show_menu = true; + bool show_zoom_label = false; + bool show_grid_buttons = true; + bool show_zoom_buttons = true; + bool show_minimap_button = true; + bool show_arrange_button = true; bool snapping_enabled = true; int snapping_distance = 20; @@ -195,7 +210,7 @@ private: Point2 box_selecting_from; Point2 box_selecting_to; Rect2 box_selecting_rect; - List<GraphNode *> prev_selected; + List<GraphElement *> prev_selected; bool setting_scroll_offset = false; bool right_disconnects = false; @@ -207,6 +222,7 @@ private: float lines_curvature = 0.5f; bool lines_antialiased = true; + PanelContainer *menu_panel = nullptr; HBoxContainer *menu_hbox = nullptr; Control *connections_layer = nullptr; GraphEditFilter *top_layer = nullptr; @@ -218,7 +234,32 @@ private: HashSet<int> valid_left_disconnect_types; HashSet<int> valid_right_disconnect_types; - void _scroll_callback(Vector2 p_scroll_vec, bool p_alt); + struct ThemeCache { + float base_scale = 1.0; + + Ref<StyleBox> panel; + Color grid_major; + Color grid_minor; + + Color activity_color; + Color selection_fill; + Color selection_stroke; + + Ref<StyleBox> menu_panel; + + Ref<Texture2D> zoom_in; + Ref<Texture2D> zoom_out; + Ref<Texture2D> zoom_reset; + + Ref<Texture2D> snapping_toggle; + Ref<Texture2D> grid_toggle; + Ref<Texture2D> minimap_toggle; + Ref<Texture2D> layout; + + float port_hotzone_inner_extent = 0.0; + float port_hotzone_outer_extent = 0.0; + } theme_cache; + void _pan_callback(Vector2 p_scroll_vec, Ref<InputEvent> p_event); void _zoom_callback(float p_zoom_factor, Vector2 p_origin, Ref<InputEvent> p_event); @@ -227,15 +268,14 @@ private: void _zoom_plus(); void _update_zoom_label(); - PackedVector2Array get_connection_line(const Vector2 &p_from, const Vector2 &p_to); void _draw_connection_line(CanvasItem *p_where, const Vector2 &p_from, const Vector2 &p_to, const Color &p_color, const Color &p_to_color, float p_width, float p_zoom); - void _graph_node_selected(Node *p_gn); - void _graph_node_deselected(Node *p_gn); - void _graph_node_moved_to_front(Node *p_gn); - void _graph_node_resized(Vector2 p_new_minsize, Node *p_gn); - void _graph_node_moved(Node *p_gn); - void _graph_node_slot_updated(int p_index, Node *p_gn); + void _graph_element_selected(Node *p_node); + void _graph_element_deselected(Node *p_node); + void _graph_element_moved_to_front(Node *p_node); + void _graph_element_resized(Vector2 p_new_minsize, Node *p_node); + void _graph_element_moved(Node *p_node); + void _graph_node_slot_updated(int p_index, Node *p_node); void _update_scroll(); void _update_scroll_offset(); @@ -243,8 +283,6 @@ private: virtual void gui_input(const Ref<InputEvent> &p_ev) override; void _top_layer_input(const Ref<InputEvent> &p_ev); - bool is_in_input_hotzone(GraphNode *p_graph_node, int p_port, const Vector2 &p_mouse_pos, const Vector2i &p_port_size); - bool is_in_output_hotzone(GraphNode *p_graph_node, int p_port, const Vector2 &p_mouse_pos, const Vector2i &p_port_size); bool is_in_port_hotzone(const Vector2 &p_pos, const Vector2 &p_mouse_pos, const Vector2i &p_port_size, bool p_left); void _top_layer_draw(); @@ -264,13 +302,25 @@ private: bool _check_clickable_control(Control *p_control, const Vector2 &r_mouse_pos, const Vector2 &p_offset); +#ifndef DISABLE_DEPRECATED + bool _is_arrange_nodes_button_hidden_bind_compat_81582() const; + void _set_arrange_nodes_button_hidden_bind_compat_81582(bool p_enable); +#endif + protected: - static void _bind_methods(); + virtual void _update_theme_item_cache() override; virtual void add_child_notify(Node *p_child) override; virtual void remove_child_notify(Node *p_child) override; void _notification(int p_what); + static void _bind_methods(); +#ifndef DISABLE_DEPRECATED + static void _bind_compatibility_methods(); +#endif + + virtual bool is_in_input_hotzone(GraphNode *p_graph_node, int p_port_idx, const Vector2 &p_mouse_pos, const Vector2i &p_port_size); + virtual bool is_in_output_hotzone(GraphNode *p_graph_node, int p_port_idx, const Vector2 &p_mouse_pos, const Vector2i &p_port_size); GDVIRTUAL2RC(Vector<Vector2>, _get_connection_line, Vector2, Vector2) GDVIRTUAL3R(bool, _is_in_input_hotzone, Object *, int, Vector2) @@ -287,6 +337,8 @@ public: void disconnect_node(const StringName &p_from, int p_from_port, const StringName &p_to, int p_to_port); void clear_connections(); void force_connection_drag_end(); + + virtual PackedVector2Array get_connection_line(const Vector2 &p_from, const Vector2 &p_to); virtual bool is_node_hover_valid(const StringName &p_from, int p_from_port, const StringName &p_to, int p_to_port); void set_connection_activity(const StringName &p_from, int p_from_port, const StringName &p_to, int p_to_port, float p_activity); @@ -311,9 +363,6 @@ public: void set_zoom_step(float p_zoom_step); float get_zoom_step() const; - void set_show_zoom_label(bool p_enable); - bool is_showing_zoom_label() const; - void set_minimap_size(Vector2 p_size); Vector2 get_minimap_size() const; void set_minimap_opacity(float p_opacity); @@ -322,8 +371,18 @@ public: void set_minimap_enabled(bool p_enable); bool is_minimap_enabled() const; - void set_arrange_nodes_button_hidden(bool p_enable); - bool is_arrange_nodes_button_hidden() const; + void set_show_menu(bool p_hidden); + bool is_showing_menu() const; + void set_show_zoom_label(bool p_hidden); + bool is_showing_zoom_label() const; + void set_show_grid_buttons(bool p_hidden); + bool is_showing_grid_buttons() const; + void set_show_zoom_buttons(bool p_hidden); + bool is_showing_zoom_buttons() const; + void set_show_minimap_button(bool p_hidden); + bool is_showing_minimap_button() const; + void set_show_arrange_button(bool p_hidden); + bool is_showing_arrange_button() const; GraphEditFilter *get_top_layer() const { return top_layer; } GraphEditMinimap *get_minimap() const { return minimap; } |
