@@ -175,7 +175,6 @@ class VisualShaderGraphPlugin : public RefCounted {
175175 Ref<Script> get_node_script (int p_node_id) const ;
176176 void update_theme ();
177177 bool is_node_has_parameter_instances_relatively (VisualShader::Type p_type, int p_node) const ;
178- VisualShader::Type get_shader_type () const ;
179178
180179 VisualShaderGraphPlugin ();
181180};
@@ -198,6 +197,8 @@ class VisualShaderEditor : public ShaderEditor {
198197 GDCLASS (VisualShaderEditor, ShaderEditor);
199198 friend class VisualShaderGraphPlugin ;
200199
200+ Ref<ConfigFile> vs_editor_cache; // Keeps the graph offsets and zoom levels for each VisualShader that has been edited.
201+
201202 PopupPanel *property_editor_popup = nullptr ;
202203 EditorProperty *property_editor = nullptr ;
203204 int editing_node = -1 ;
@@ -295,6 +296,7 @@ class VisualShaderEditor : public ShaderEditor {
295296 };
296297
297298 int mode = MODE_FLAGS_SPATIAL_CANVASITEM;
299+ VisualShader::Type current_type = VisualShader::Type::TYPE_VERTEX; // The type of the currently edited VisualShader.
298300
299301 enum TypeFlags {
300302 TYPE_FLAGS_VERTEX = 1 ,
@@ -381,6 +383,11 @@ class VisualShaderEditor : public ShaderEditor {
381383 void _update_nodes ();
382384 void _update_graph ();
383385
386+ void _restore_editor_state ();
387+
388+ String _get_cache_id_string () const ;
389+ String _get_cache_key (const String &p_prop_name) const ;
390+
384391 struct AddOption {
385392 String name;
386393 String category;
@@ -459,15 +466,17 @@ class VisualShaderEditor : public ShaderEditor {
459466 };
460467 List<DragOp> drag_buffer;
461468
469+ Timer *panning_debounce_timer = nullptr ;
470+ bool shader_fully_loaded = false ;
471+
462472 bool drag_dirty = false ;
463473 void _node_dragged (const Vector2 &p_from, const Vector2 &p_to, int p_node);
464474 void _nodes_dragged ();
465- bool updating = false ;
466475
467476 void _connection_request (const String &p_from, int p_from_index, const String &p_to, int p_to_index);
468477 void _disconnection_request (const String &p_from, int p_from_index, const String &p_to, int p_to_index);
469478
470- void _scroll_changed (const Vector2 &p_scroll);
479+ void _scroll_offset_changed (const Vector2 &p_scroll);
471480 void _node_selected (Object *p_node);
472481
473482 void _delete_nodes (int p_type, const List<int > &p_nodes);
@@ -556,7 +565,7 @@ class VisualShaderEditor : public ShaderEditor {
556565 Vector<Ref<VisualShaderNodePlugin>> plugins;
557566 Ref<VisualShaderGraphPlugin> graph_plugin;
558567
559- void _mode_selected (int p_id);
568+ void _type_selected (int p_id);
560569 void _custom_mode_toggled (bool p_enabled);
561570
562571 void _input_select_item (Ref<VisualShaderNodeInput> p_input, const String &p_name);
@@ -565,8 +574,6 @@ class VisualShaderEditor : public ShaderEditor {
565574
566575 void _float_constant_selected (int p_which);
567576
568- VisualShader::Type get_current_shader_type () const ;
569-
570577 void _add_input_port (int p_node, int p_port, int p_port_type, const String &p_name);
571578 void _remove_input_port (int p_node, int p_port);
572579 void _change_input_port_type (int p_type, int p_node, int p_port);
@@ -647,6 +654,12 @@ class VisualShaderEditor : public ShaderEditor {
647654 virtual bool is_unsaved () const override ;
648655 virtual void save_external_data (const String &p_str = " " ) override ;
649656 virtual void validate_script () override ;
657+
658+ void save_editor_layout ();
659+
660+ void set_current_shader_type (VisualShader::Type p_type);
661+ VisualShader::Type get_current_shader_type () const ;
662+
650663 virtual Control *get_top_bar () override ;
651664
652665 void add_plugin (const Ref<VisualShaderNodePlugin> &p_plugin);
0 commit comments