Browse Source

Fixed editing existing rectangles and ellipses

flabbet 8 months ago
parent
commit
c03492608d

+ 1 - 0
src/PixiEditor.ChangeableDocument/Changeables/Graph/Interfaces/IReadOnlyShapeVectorData.cs

@@ -12,4 +12,5 @@ public interface IReadOnlyShapeVectorData
     public int StrokeWidth { get; }
     public RectD GeometryAABB { get; }
     public RectD TransformedAABB { get; }
+    public ShapeCorners TransformationCorners { get; }
 }

+ 14 - 2
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/DrawableShapeToolExecutor.cs

@@ -28,7 +28,8 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
     protected T? toolViewModel;
     protected RectI lastRect;
     protected double lastRadians;
-
+    
+    private ShapeCorners initialCorners;
     private bool noMovement = true;
     protected IBasicShapeToolbar toolbar;
     private IColorsHandler? colorsVM;
@@ -81,6 +82,8 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
             toolbar.FillColor = shapeData.FillColor.ToColor();
             toolbar.ToolSize = shapeData.StrokeWidth;
             toolbar.Fill = shapeData.FillColor != Colors.Transparent;
+            initialCorners = shapeData.TransformationCorners;
+            
             ActiveMode = ShapeToolMode.Transform;
         }
         else
@@ -281,13 +284,22 @@ internal abstract class DrawableShapeToolExecutor<T> : SimpleShapeToolExecutor w
         base.OnLeftMouseButtonUp(argsPositionOnCanvas);
     }
 
+    protected override void StopMode(ShapeToolMode mode)
+    {
+        base.StopMode(mode);
+        if (mode == ShapeToolMode.Drawing)
+        {
+            initialCorners = new ShapeCorners((RectD)lastRect);
+        }
+    }
+
     protected override void StartMode(ShapeToolMode mode)
     {
         base.StartMode(mode);
         if (mode == ShapeToolMode.Transform)
         {
             document.TransformHandler.HideTransform();
-            document!.TransformHandler.ShowTransform(TransformMode, false, new ShapeCorners((RectD)lastRect), true);
+            document!.TransformHandler.ShowTransform(TransformMode, false, initialCorners, true);
         }
     }
 

+ 0 - 1
src/PixiEditor/Models/DocumentModels/UpdateableChangeExecutors/VectorRectangleToolExecutor.cs

@@ -29,7 +29,6 @@ internal class VectorRectangleToolExecutor : DrawableShapeToolExecutor<IVectorRe
         firstCenter = rectData.Center;
         firstSize = rectData.Size;
         lastMatrix = rectData.TransformationMatrix;
-        
         return true;
     }
 

+ 1 - 0
src/PixiEditor/Views/Main/ViewportControls/ViewportOverlays.cs

@@ -60,6 +60,7 @@ internal class ViewportOverlays
         BindMouseOverlayPointer();
         
         vectorPathOverlay = new VectorPathOverlay();
+        vectorPathOverlay.IsVisible = false;
         BindVectorPathOverlay();
 
         Viewport.ActiveOverlays.Add(gridLinesOverlay);