Browse Source

Fixed vector layer previews

flabbet 10 months ago
parent
commit
c604aeb126

+ 18 - 12
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/VectorLayerNode.cs

@@ -53,7 +53,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
             return;
         }
         
-        Rasterize(workingSurface, ctx.ChunkResolution, paint);
+        Rasterize(workingSurface, paint);
     }
 
     protected override void DrawWithFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface, Paint paint)
@@ -63,7 +63,21 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
             return;
         }
         
-        Rasterize(workingSurface, ctx.ChunkResolution, paint);
+        Rasterize(workingSurface, paint);
+    }
+
+    public override RectD? GetPreviewBounds(int frame, string elementFor = "")
+    {
+        if (elementFor == nameof(EmbeddedMask))
+        {
+            base.GetPreviewBounds(frame, elementFor);
+        }
+        else
+        {
+            return ShapeData?.TransformedAABB;
+        }
+        
+        return null;
     }
 
     public override bool RenderPreview(DrawingSurface renderOn, ChunkResolution resolution, int frame,
@@ -89,16 +103,8 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
             return false;
         }
 
-        using Texture toRasterizeOn = new(size);
-
-        int save = toRasterizeOn.DrawingSurface.Canvas.Save();
-
         Matrix3X3 matrix = ShapeData.TransformationMatrix;
-        Rasterize(toRasterizeOn.DrawingSurface, resolution, paint);
-
-        renderOn.Canvas.DrawSurface(toRasterizeOn.DrawingSurface, 0, 0, paint);
-
-        toRasterizeOn.DrawingSurface.Canvas.RestoreToCount(save);
+        Rasterize(renderOn, paint);
         return true;
     }
 
@@ -140,7 +146,7 @@ public class VectorLayerNode : LayerNode, ITransformableObject, IReadOnlyVectorN
         return ShapeData?.TransformationCorners ?? new ShapeCorners();
     }
 
-    public void Rasterize(DrawingSurface surface, ChunkResolution resolution, Paint paint)
+    public void Rasterize(DrawingSurface surface, Paint paint)
     {
         int layer = surface.Canvas.SaveLayer(paint);
         ShapeData?.RasterizeTransformed(surface);

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changeables/Interfaces/IRasterizable.cs

@@ -5,5 +5,5 @@ namespace PixiEditor.ChangeableDocument.Changeables.Interfaces;
 
 public interface IRasterizable
 {
-    public void Rasterize(DrawingSurface surface, ChunkResolution resolution, Paint paint);
+    public void Rasterize(DrawingSurface surface, Paint paint);
 }

+ 1 - 1
src/PixiEditor.ChangeableDocument/Changes/Structure/RasterizeMember_Change.cs

@@ -50,7 +50,7 @@ internal class RasterizeMember_Change : Change
         target.NodeGraph.AddNode(imageLayer);
         
         using Surface surface = new Surface(target.Size);
-        rasterizable.Rasterize(surface.DrawingSurface, ChunkResolution.Full, null);
+        rasterizable.Rasterize(surface.DrawingSurface, null);
         
         var image = imageLayer.GetLayerImageAtFrame(0);
         image.EnqueueDrawImage(VecI.Zero, surface);

+ 1 - 1
src/PixiEditor/Models/DocumentModels/ActionAccumulator.cs

@@ -114,7 +114,7 @@ internal class ActionAccumulator
                     undoBoundaryPassed || viewportRefreshRequest);
             }
 
-            previewUpdater.UpdatePreviews(undoBoundaryPassed, affectedAreas.ImagePreviewAreas.Keys, affectedAreas.MaskPreviewAreas.Keys,
+            previewUpdater.UpdatePreviews(true, affectedAreas.ImagePreviewAreas.Keys, affectedAreas.MaskPreviewAreas.Keys,
                 affectedAreas.ChangedNodes);
 
             // force refresh viewports for better responsiveness

+ 3 - 3
src/PixiEditor/Models/DocumentModels/ChangeExecutionController.cs

@@ -55,7 +55,7 @@ internal class ChangeExecutionController
     public bool TryStartExecutor<T>(bool force = false)
         where T : UpdateableChangeExecutor, new()
     {
-        if (CanStartExecutor(force))
+        if (!CanStartExecutor(force))
             return false;
         if (force)
             currentSession?.ForceStop();
@@ -66,7 +66,7 @@ internal class ChangeExecutionController
 
     public bool TryStartExecutor(UpdateableChangeExecutor brandNewExecutor, bool force = false)
     {
-        if (CanStartExecutor(force))
+        if (!CanStartExecutor(force))
             return false;
         if (force)
             currentSession?.ForceStop();
@@ -76,7 +76,7 @@ internal class ChangeExecutionController
 
     private bool CanStartExecutor(bool force)
     {
-        return (currentSession is not null || _queuedExecutor is not null) && !force;
+        return (currentSession is null && _queuedExecutor is null) || force;
     }
 
     private bool TryStartExecutorInternal(UpdateableChangeExecutor executor)

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/LayersViewModel.cs

@@ -174,7 +174,7 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
     public void OpacitySliderSet(double value)
     {
         var document = Owner.DocumentManagerSubViewModel.ActiveDocument;
-
+        
         if (document?.SelectedStructureMember != null)
         {
             document.Operations.SetMemberOpacity(document.SelectedStructureMember.Id, (float)value);