summaryrefslogtreecommitdiffstats
path: root/editor/plugins/visual_shader_editor_plugin.h
diff options
context:
space:
mode:
Diffstat (limited to 'editor/plugins/visual_shader_editor_plugin.h')
-rw-r--r--editor/plugins/visual_shader_editor_plugin.h62
1 files changed, 44 insertions, 18 deletions
diff --git a/editor/plugins/visual_shader_editor_plugin.h b/editor/plugins/visual_shader_editor_plugin.h
index 683a6bc883..e499bbde1e 100644
--- a/editor/plugins/visual_shader_editor_plugin.h
+++ b/editor/plugins/visual_shader_editor_plugin.h
@@ -42,6 +42,7 @@ class CodeEdit;
class ColorPicker;
class CurveEditor;
class GraphElement;
+class GraphFrame;
class MenuButton;
class PopupPanel;
class RichTextLabel;
@@ -120,11 +121,12 @@ public:
bool is_preview_visible(int p_id) const;
void update_node(VisualShader::Type p_type, int p_id);
void update_node_deferred(VisualShader::Type p_type, int p_node_id);
- void add_node(VisualShader::Type p_type, int p_id, bool p_just_update);
+ void add_node(VisualShader::Type p_type, int p_id, bool p_just_update, bool p_update_frames);
void remove_node(VisualShader::Type p_type, int p_id, bool p_just_update);
void connect_nodes(VisualShader::Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
void disconnect_nodes(VisualShader::Type p_type, int p_from_node, int p_from_port, int p_to_node, int p_to_port);
void show_port_preview(VisualShader::Type p_type, int p_node_id, int p_port_id, bool p_is_valid);
+ void update_frames(VisualShader::Type p_type, int p_node);
void set_node_position(VisualShader::Type p_type, int p_id, const Vector2 &p_position);
void refresh_node_ports(VisualShader::Type p_type, int p_node);
void set_input_port_default_value(VisualShader::Type p_type, int p_node_id, int p_port_id, const Variant &p_value);
@@ -133,9 +135,13 @@ public:
void update_curve(int p_node_id);
void update_curve_xyz(int p_node_id);
void set_expression(VisualShader::Type p_type, int p_node_id, const String &p_expression);
+ void attach_node_to_frame(VisualShader::Type p_type, int p_node_id, int p_frame_id);
+ void detach_node_from_frame(VisualShader::Type p_type, int p_node_id);
+ void set_frame_color_enabled(VisualShader::Type p_type, int p_node_id, bool p_enable);
+ void set_frame_color(VisualShader::Type p_type, int p_node_id, const Color &p_color);
+ void set_frame_autoshrink_enabled(VisualShader::Type p_type, int p_node_id, bool p_enable);
int get_constant_index(float p_constant) const;
Ref<Script> get_node_script(int p_node_id) const;
- void update_node_size(int p_node_id);
void update_theme();
bool is_node_has_parameter_instances_relatively(VisualShader::Type p_type, int p_node) const;
VisualShader::Type get_shader_type() const;
@@ -219,11 +225,11 @@ class VisualShaderEditor : public VBoxContainer {
ConfirmationDialog *remove_varying_dialog = nullptr;
Tree *varyings = nullptr;
- PopupPanel *comment_title_change_popup = nullptr;
- LineEdit *comment_title_change_edit = nullptr;
+ PopupPanel *frame_title_change_popup = nullptr;
+ LineEdit *frame_title_change_edit = nullptr;
- PopupPanel *comment_desc_change_popup = nullptr;
- TextEdit *comment_desc_change_edit = nullptr;
+ PopupPanel *frame_tint_color_pick_popup = nullptr;
+ ColorPicker *frame_tint_color_picker = nullptr;
bool preview_first = true;
bool preview_showed = false;
@@ -281,9 +287,12 @@ class VisualShaderEditor : public VBoxContainer {
FLOAT_CONSTANTS,
CONVERT_CONSTANTS_TO_PARAMETERS,
CONVERT_PARAMETERS_TO_CONSTANTS,
+ UNLINK_FROM_PARENT_FRAME,
SEPARATOR3, // ignore
- SET_COMMENT_TITLE,
- SET_COMMENT_DESCRIPTION,
+ SET_FRAME_TITLE,
+ ENABLE_FRAME_COLOR,
+ SET_FRAME_COLOR,
+ ENABLE_FRAME_AUTOSHRINK,
};
enum ConnectionMenuOptions {
@@ -374,6 +383,9 @@ class VisualShaderEditor : public VBoxContainer {
void _get_next_nodes_recursively(VisualShader::Type p_type, int p_node_id, LocalVector<int> &r_nodes) const;
String _get_description(int p_idx);
+ Vector<int> nodes_link_to_frame_buffer; // Contains the nodes that are requested to be linked to a frame. This is used to perform one Undo/Redo operation for dragging nodes.
+ int frame_node_id_to_link_to = -1;
+
struct DragOp {
VisualShader::Type type = VisualShader::Type::TYPE_MAX;
int node = 0;
@@ -381,6 +393,7 @@ class VisualShaderEditor : public VBoxContainer {
Vector2 to;
};
List<DragOp> drag_buffer;
+
bool drag_dirty = false;
void _node_dragged(const Vector2 &p_from, const Vector2 &p_to, int p_node);
void _nodes_dragged();
@@ -398,6 +411,9 @@ class VisualShaderEditor : public VBoxContainer {
void _node_changed(int p_id);
+ void _nodes_linked_to_frame_request(const TypedArray<StringName> &p_nodes, const StringName &p_frame);
+ void _frame_rect_changed(const GraphFrame *p_frame, const Rect2 &p_new_rect);
+
void _edit_port_default_input(Object *p_button, int p_node, int p_port);
void _port_edited(const StringName &p_property, const Variant &p_value, const String &p_field, bool p_changing);
@@ -411,29 +427,36 @@ class VisualShaderEditor : public VBoxContainer {
HashSet<int> selected_constants;
HashSet<int> selected_parameters;
- int selected_comment = -1;
+ int selected_frame = -1;
int selected_float_constant = -1;
void _convert_constants_to_parameters(bool p_vice_versa);
+ void _detach_nodes_from_frame_request();
+ void _detach_nodes_from_frame(int p_type, const List<int> &p_nodes);
void _replace_node(VisualShader::Type p_type_id, int p_node_id, const StringName &p_from, const StringName &p_to);
void _update_constant(VisualShader::Type p_type_id, int p_node_id, const Variant &p_var, int p_preview_port);
void _update_parameter(VisualShader::Type p_type_id, int p_node_id, const Variant &p_var, int p_preview_port);
+ void _unlink_node_from_parent_frame(int p_node_id);
+
void _connection_to_empty(const String &p_from, int p_from_slot, const Vector2 &p_release_position);
void _connection_from_empty(const String &p_to, int p_to_slot, const Vector2 &p_release_position);
bool _check_node_drop_on_connection(const Vector2 &p_position, Ref<GraphEdit::Connection> *r_closest_connection, int *r_node_id = nullptr, int *r_to_port = nullptr);
void _handle_node_drop_on_connection();
- void _comment_title_popup_show(const Point2 &p_position, int p_node_id);
- void _comment_title_popup_hide();
- void _comment_title_popup_focus_out();
- void _comment_title_text_changed(const String &p_new_text);
- void _comment_title_text_submitted(const String &p_new_text);
+ void _frame_title_popup_show(const Point2 &p_position, int p_node_id);
+ void _frame_title_popup_hide();
+ void _frame_title_popup_focus_out();
+ void _frame_title_text_changed(const String &p_new_text);
+ void _frame_title_text_submitted(const String &p_new_text);
- void _comment_desc_popup_show(const Point2 &p_position, int p_node_id);
- void _comment_desc_popup_hide();
- void _comment_desc_confirm();
- void _comment_desc_text_changed();
+ void _frame_color_enabled_changed(int p_node_id);
+ void _frame_color_popup_show(const Point2 &p_position, int p_node_id);
+ void _frame_color_popup_hide();
+ void _frame_color_confirm();
+ void _frame_color_changed(const Color &p_color);
+
+ void _frame_autoshrink_enabled_changed(int p_node_id);
void _parameter_line_edit_changed(const String &p_text, int p_node_id);
void _parameter_line_edit_focus_out(Object *p_line_edit, int p_node_id);
@@ -555,7 +578,10 @@ public:
void update_custom_type(const Ref<Resource> &p_resource);
virtual Size2 get_minimum_size() const override;
+
void edit(VisualShader *p_visual_shader);
+ Ref<VisualShader> get_visual_shader() const { return visual_shader; }
+
VisualShaderEditor();
};