Browse Source

Merge pull request #1164 from PixiEditor/fix/graph-connecting

Fixed connecting to same node output connection dissapear + crash fix
Krzysztof Krysiński 3 days ago
parent
commit
78810a3ea3

+ 8 - 8
src/PixiEditor/ViewModels/Document/NodeGraphViewModel.cs

@@ -20,7 +20,7 @@ namespace PixiEditor.ViewModels.Document;
 internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposable
 internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposable
 {
 {
     private bool isFullyCreated;
     private bool isFullyCreated;
-    
+
     public DocumentViewModel DocumentViewModel { get; }
     public DocumentViewModel DocumentViewModel { get; }
     public ObservableCollection<INodeHandler> AllNodes { get; } = new();
     public ObservableCollection<INodeHandler> AllNodes { get; } = new();
     public ObservableCollection<NodeConnectionViewModel> Connections { get; } = new();
     public ObservableCollection<NodeConnectionViewModel> Connections { get; } = new();
@@ -110,7 +110,7 @@ internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposabl
         connection.OutputProperty.ConnectedInputs.Add(connection.InputProperty);
         connection.OutputProperty.ConnectedInputs.Add(connection.InputProperty);
 
 
         Connections.Add(connection);
         Connections.Add(connection);
-        
+
         UpdatesFramesPartOf(connection.InputNode);
         UpdatesFramesPartOf(connection.InputNode);
         UpdatesFramesPartOf(connection.OutputNode);
         UpdatesFramesPartOf(connection.OutputNode);
 
 
@@ -126,11 +126,11 @@ internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposabl
             connection.InputProperty.ConnectedOutput = null;
             connection.InputProperty.ConnectedOutput = null;
             connection.OutputProperty.ConnectedInputs.Remove(connection.InputProperty);
             connection.OutputProperty.ConnectedInputs.Remove(connection.InputProperty);
             Connections.Remove(connection);
             Connections.Remove(connection);
+
+            UpdatesFramesPartOf(connection.InputNode);
+            UpdatesFramesPartOf(connection.OutputNode);
         }
         }
 
 
-        UpdatesFramesPartOf(connection.InputNode);
-        UpdatesFramesPartOf(connection.OutputNode);
-        
         var node = AllNodes.FirstOrDefault(x => x.Id == nodeId);
         var node = AllNodes.FirstOrDefault(x => x.Id == nodeId);
         if (node != null)
         if (node != null)
         {
         {
@@ -152,7 +152,7 @@ internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposabl
         var lastKnownFramesPartOf = node.Frames.OfType<NodeZoneViewModel>().ToHashSet();
         var lastKnownFramesPartOf = node.Frames.OfType<NodeZoneViewModel>().ToHashSet();
         var startLookup = Frames.OfType<NodeZoneViewModel>().ToDictionary(x => x.Start);
         var startLookup = Frames.OfType<NodeZoneViewModel>().ToDictionary(x => x.Start);
         var currentlyPartOf = new HashSet<NodeZoneViewModel>();
         var currentlyPartOf = new HashSet<NodeZoneViewModel>();
-        
+
         node.TraverseBackwards(x =>
         node.TraverseBackwards(x =>
         {
         {
             if (x is IPairNodeEndViewModel)
             if (x is IPairNodeEndViewModel)
@@ -185,9 +185,9 @@ internal class NodeGraphViewModel : ViewModelBase, INodeGraphHandler, IDisposabl
     {
     {
         if (isFullyCreated)
         if (isFullyCreated)
             return;
             return;
-        
+
         isFullyCreated = true;
         isFullyCreated = true;
-        
+
         foreach (var nodeZoneViewModel in Frames.OfType<NodeZoneViewModel>())
         foreach (var nodeZoneViewModel in Frames.OfType<NodeZoneViewModel>())
         {
         {
             UpdateNodesPartOf(nodeZoneViewModel);
             UpdateNodesPartOf(nodeZoneViewModel);

+ 0 - 4
src/PixiEditor/Views/Nodes/NodeGraphView.cs

@@ -773,10 +773,6 @@ internal class NodeGraphView : Zoombox.Zoombox
                 {
                 {
                     connection = (endConnectionProperty, startConnectionProperty, null);
                     connection = (endConnectionProperty, startConnectionProperty, null);
                 }
                 }
-                else
-                {
-                    return;
-                }
             }
             }
         }
         }