diff options
Diffstat (limited to 'scene/gui/graph_node.h')
-rw-r--r-- | scene/gui/graph_node.h | 181 |
1 files changed, 58 insertions, 123 deletions
diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h index 873683bc62..1178421819 100644 --- a/scene/gui/graph_node.h +++ b/scene/gui/graph_node.h @@ -31,170 +31,111 @@ #ifndef GRAPH_NODE_H #define GRAPH_NODE_H -#include "scene/gui/container.h" -#include "scene/resources/text_line.h" +#include "scene/gui/graph_element.h" -class GraphNode : public Container { - GDCLASS(GraphNode, Container); +class HBoxContainer; - struct _MinSizeCache { - int min_size; - bool will_stretch; - int final_size; - }; +class GraphNode : public GraphElement { + GDCLASS(GraphNode, GraphElement); -public: - enum Overlay { - OVERLAY_DISABLED, - OVERLAY_BREAKPOINT, - OVERLAY_POSITION - }; - -private: struct Slot { bool enable_left = false; int type_left = 0; Color color_left = Color(1, 1, 1, 1); + Ref<Texture2D> custom_port_icon_left; + bool enable_right = false; int type_right = 0; Color color_right = Color(1, 1, 1, 1); - Ref<Texture2D> custom_slot_left; - Ref<Texture2D> custom_slot_right; + Ref<Texture2D> custom_port_icon_right; + bool draw_stylebox = true; }; - String title; - Ref<TextLine> title_buf; - - String language; - TextDirection text_direction = TEXT_DIRECTION_AUTO; - - bool show_close = false; - Vector2 position_offset; - bool comment = false; - bool resizable = false; - bool draggable = true; - bool selectable = true; - - bool resizing = false; - Vector2 resizing_from; - Vector2 resizing_from_size; - - Rect2 close_rect; - - Vector<int> cache_y; - struct PortCache { - Vector2 position; - int height; - - int slot_idx; + Vector2 pos; + int slot_index; int type = 0; Color color; }; - Vector<PortCache> left_port_cache; - Vector<PortCache> right_port_cache; + struct _MinSizeCache { + int min_size; + bool will_stretch; + int final_size; + }; - HashMap<int, Slot> slot_info; + HBoxContainer *titlebar_hbox = nullptr; + Label *title_label = nullptr; - bool connpos_dirty = true; + String title; - void _connpos_update(); - void _resort(); - void _shape(); + Vector<PortCache> left_port_cache; + Vector<PortCache> right_port_cache; - Vector2 drag_from; - bool selected = false; + HashMap<int, Slot> slot_table; - Overlay overlay = OVERLAY_DISABLED; + Vector<int> slot_y_cache; -#ifdef TOOLS_ENABLED - void _edit_set_position(const Point2 &p_position) override; -#endif + bool port_pos_dirty = true; + + void _port_pos_update(); protected: - virtual void gui_input(const Ref<InputEvent> &p_ev) override; void _notification(int p_what); static void _bind_methods(); + virtual void _resort() override; + + virtual void draw_port(int p_slot_index, Point2i p_pos, bool p_left, const Color &p_color); + GDVIRTUAL4(_draw_port, int, Point2i, bool, const Color &); + bool _set(const StringName &p_name, const Variant &p_value); bool _get(const StringName &p_name, Variant &r_ret) const; void _get_property_list(List<PropertyInfo> *p_list) const; - void _validate_property(PropertyInfo &p_property) const; public: - 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<Texture2D> &p_custom_left = Ref<Texture2D>(), const Ref<Texture2D> &p_custom_right = Ref<Texture2D>(), bool p_draw_stylebox = true); - void clear_slot(int p_idx); - void clear_all_slots(); - - bool is_slot_enabled_left(int p_idx) const; - void set_slot_enabled_left(int p_idx, bool p_enable_left); - - void set_slot_type_left(int p_idx, int p_type_left); - int get_slot_type_left(int p_idx) const; - - void set_slot_color_left(int p_idx, const Color &p_color_left); - Color get_slot_color_left(int p_idx) const; - - bool is_slot_enabled_right(int p_idx) const; - void set_slot_enabled_right(int p_idx, bool p_enable_right); - - void set_slot_type_right(int p_idx, int p_type_right); - int get_slot_type_right(int p_idx) const; - - void set_slot_color_right(int p_idx, const Color &p_color_right); - Color get_slot_color_right(int p_idx) const; - - bool is_slot_draw_stylebox(int p_idx) const; - void set_slot_draw_stylebox(int p_idx, bool p_enable); - void set_title(const String &p_title); String get_title() const; - void set_text_direction(TextDirection p_text_direction); - TextDirection get_text_direction() const; - - void set_language(const String &p_language); - String get_language() const; + HBoxContainer *get_titlebar_hbox(); - void set_position_offset(const Vector2 &p_offset); - Vector2 get_position_offset() const; + void set_slot(int p_slot_index, 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<Texture2D> &p_custom_left = Ref<Texture2D>(), const Ref<Texture2D> &p_custom_right = Ref<Texture2D>(), bool p_draw_stylebox = true); + void clear_slot(int p_slot_index); + void clear_all_slots(); - void set_selected(bool p_selected); - bool is_selected(); + bool is_slot_enabled_left(int p_slot_index) const; + void set_slot_enabled_left(int p_slot_index, bool p_enable); - void set_drag(bool p_drag); - Vector2 get_drag_from(); + void set_slot_type_left(int p_slot_index, int p_type); + int get_slot_type_left(int p_slot_index) const; - void set_show_close_button(bool p_enable); - bool is_close_button_visible() const; + void set_slot_color_left(int p_slot_index, const Color &p_color); + Color get_slot_color_left(int p_slot_index) const; - int get_connection_input_count(); - int get_connection_input_height(int p_port); - Vector2 get_connection_input_position(int p_port); - int get_connection_input_type(int p_port); - Color get_connection_input_color(int p_port); - int get_connection_input_slot(int p_port); + bool is_slot_enabled_right(int p_slot_index) const; + void set_slot_enabled_right(int p_slot_index, bool p_enable); - int get_connection_output_count(); - int get_connection_output_height(int p_port); - Vector2 get_connection_output_position(int p_port); - int get_connection_output_type(int p_port); - Color get_connection_output_color(int p_port); - int get_connection_output_slot(int p_port); + void set_slot_type_right(int p_slot_index, int p_type); + int get_slot_type_right(int p_slot_index) const; - void set_overlay(Overlay p_overlay); - Overlay get_overlay() const; + void set_slot_color_right(int p_slot_index, const Color &p_color); + Color get_slot_color_right(int p_slot_index) const; - void set_resizable(bool p_enable); - bool is_resizable() const; + bool is_slot_draw_stylebox(int p_slot_index) const; + void set_slot_draw_stylebox(int p_slot_index, bool p_enable); - void set_draggable(bool p_draggable); - bool is_draggable(); + int get_input_port_count(); + Vector2 get_input_port_position(int p_port_idx); + int get_input_port_type(int p_port_idx); + Color get_input_port_color(int p_port_idx); + int get_input_port_slot(int p_port_idx); - void set_selectable(bool p_selectable); - bool is_selectable(); + int get_output_port_count(); + Vector2 get_output_port_position(int p_port_idx); + int get_output_port_type(int p_port_idx); + Color get_output_port_color(int p_port_idx); + int get_output_port_slot(int p_port_idx); virtual Size2 get_minimum_size() const override; @@ -203,13 +144,7 @@ public: virtual Vector<int> get_allowed_size_flags_horizontal() const override; virtual Vector<int> get_allowed_size_flags_vertical() const override; - bool is_resizing() const { - return resizing; - } - GraphNode(); }; -VARIANT_ENUM_CAST(GraphNode::Overlay) - #endif // GRAPH_NODE_H |