Procházet zdrojové kódy

Deselect on click outside selection

Krzysztof Krysiński před 2 týdny
rodič
revize
211b2c8f5f

+ 6 - 2
src/PixiEditor/Models/DocumentModels/DocumentUpdater.cs

@@ -307,7 +307,7 @@ internal class DocumentUpdater
     private void ProcessSetSelectedMember(SetSelectedMember_PassthroughAction info)
     {
         IStructureMemberHandler? member = doc.StructureHelper.Find(info.Id);
-        if (member is null || member.Selection == StructureMemberSelectionType.Hard)
+        if (member is not null && member.Selection == StructureMemberSelectionType.Hard)
             return;
 
         if (doc.SelectedStructureMember is { } oldMember)
@@ -315,7 +315,11 @@ internal class DocumentUpdater
             oldMember.Selection = StructureMemberSelectionType.None;
         }
 
-        member.Selection = StructureMemberSelectionType.Hard;
+        if (member != null)
+        {
+            member.Selection = StructureMemberSelectionType.Hard;
+        }
+
         doc.SetSelectedMember(member);
     }
 

+ 1 - 2
src/PixiEditor/Models/DocumentModels/Public/DocumentOperationsModule.cs

@@ -661,8 +661,7 @@ internal class DocumentOperationsModule : IDocumentOperations
     /// <param name="toolLinked">Is this transform started by a tool</param>
     public void TransformSelectedArea(bool toolLinked)
     {
-        if (Document.SelectedStructureMember is null ||
-            Internals.ChangeController.IsBlockingChangeActive && !toolLinked)
+        if (Internals.ChangeController.IsBlockingChangeActive && !toolLinked)
             return;
 
         Internals.ChangeController.TryStopActiveExecutor();

+ 11 - 1
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/TransformSelectedExecutor.cs

@@ -46,9 +46,14 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
     public override ExecutionState Start()
     {
         tool = GetHandler<IMoveToolHandler>();
-        if (tool is null || document!.SelectedStructureMember is null)
+        if (tool is null)
             return ExecutionState.Error;
 
+        if (document!.SelectedStructureMember is null)
+        {
+            return ExecutionState.Success; // Listen for click events only
+        }
+
         tool.TransformingSelectedArea = true;
         List<IStructureMemberHandler> members = new();
         originalSelectedMembers = document.SelectedMembers.ToList();
@@ -191,6 +196,11 @@ internal class TransformSelectedExecutor : UpdateableChangeExecutor, ITransforma
                 Deselect(topMostList);
             }
         }
+        else if(!topMostWithinClick.Any())
+        {
+            document?.Operations.ClearSoftSelectedMembers();
+            document?.Operations.SetSelectedMember(Guid.Empty);
+        }
     }
 
     private bool SwitchToLayerTool()