Pārlūkot izejas kodu

Fixed FloodFillChunkCache

flabbet 11 mēneši atpakaļ
vecāks
revīzija
6cc438e958

+ 2 - 0
src/PixiEditor.ChangeableDocument/Changeables/Document.cs

@@ -30,6 +30,7 @@ internal class Document : IChangeable, IReadOnlyDocument
         FindChildAndParentOrThrow(guid);
         FindChildAndParentOrThrow(guid);
 
 
     IReadOnlyReferenceLayer? IReadOnlyDocument.ReferenceLayer => ReferenceLayer;
     IReadOnlyReferenceLayer? IReadOnlyDocument.ReferenceLayer => ReferenceLayer;
+    public DocumentRenderer Renderer { get; }
 
 
     /// <summary>
     /// <summary>
     /// The default size for a new document
     /// The default size for a new document
@@ -49,6 +50,7 @@ internal class Document : IChangeable, IReadOnlyDocument
     public Document()
     public Document()
     {
     {
         AnimationData = new AnimationData(this);
         AnimationData = new AnimationData(this);
+        Renderer = new DocumentRenderer(this);
     }
     }
 
 
     public void Dispose()
     public void Dispose()

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

@@ -100,4 +100,5 @@ public interface IReadOnlyDocument : IDisposable
     /// <param name="guid">The <see cref="IReadOnlyStructureNode.GuidValue"/> of the member</param>
     /// <param name="guid">The <see cref="IReadOnlyStructureNode.GuidValue"/> of the member</param>
     IReadOnlyList<IReadOnlyStructureNode> FindMemberPath(Guid guid);
     IReadOnlyList<IReadOnlyStructureNode> FindMemberPath(Guid guid);
     IReadOnlyReferenceLayer? ReferenceLayer { get; }
     IReadOnlyReferenceLayer? ReferenceLayer { get; }
+    public DocumentRenderer Renderer { get; }
 }
 }

+ 7 - 8
src/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillChunkCache.cs

@@ -13,7 +13,7 @@ internal class FloodFillChunkCache : IDisposable
     private Paint ReplacingPaint { get; } = new Paint() { BlendMode = BlendMode.Src };
     private Paint ReplacingPaint { get; } = new Paint() { BlendMode = BlendMode.Src };
 
 
     private readonly HashSet<Guid>? membersToRender;
     private readonly HashSet<Guid>? membersToRender;
-    private readonly IReadOnlyNodeGraph? graph;
+    private readonly IReadOnlyDocument? document;
     private readonly IReadOnlyChunkyImage? image;
     private readonly IReadOnlyChunkyImage? image;
     private readonly int frame;
     private readonly int frame;
 
 
@@ -24,10 +24,10 @@ internal class FloodFillChunkCache : IDisposable
         this.image = image;
         this.image = image;
     }
     }
 
 
-    public FloodFillChunkCache(HashSet<Guid> membersToRender, IReadOnlyNodeGraph graph, int frame)
+    public FloodFillChunkCache(HashSet<Guid> membersToRender, IReadOnlyDocument document, int frame)
     {
     {
         this.membersToRender = membersToRender;
         this.membersToRender = membersToRender;
-        this.graph = graph;
+        this.document = document;
         this.frame = frame;
         this.frame = frame;
     }
     }
 
 
@@ -45,15 +45,14 @@ internal class FloodFillChunkCache : IDisposable
             return foundChunk;
             return foundChunk;
 
 
         // need to get the chunk by merging multiple members
         // need to get the chunk by merging multiple members
-        //TODO: Implement
-        /*if (image is null)
+        if (image is null)
         {
         {
-            if (graph is null || membersToRender is null)
+            if (document is null || membersToRender is null)
                 throw new InvalidOperationException();
                 throw new InvalidOperationException();
-            var chunk = ChunkRenderer.MergeChosenMembers(pos, ChunkResolution.Full, graph, frame, membersToRender);
+            var chunk = document.Renderer.RenderLayersChunk(pos, ChunkResolution.Full, frame, membersToRender);
             acquiredChunks[pos] = chunk;
             acquiredChunks[pos] = chunk;
             return chunk;
             return chunk;
-        }*/
+        }
 
 
         // there is only a single image, just get the chunk from it
         // there is only a single image, just get the chunk from it
         if (!image.LatestOrCommittedChunkExists(pos))
         if (!image.LatestOrCommittedChunkExists(pos))

+ 2 - 2
src/PixiEditor.ChangeableDocument/Changes/Drawing/FloodFill/FloodFillHelper.cs

@@ -28,12 +28,12 @@ public static class FloodFillHelper
             Guid guid = membersToFloodFill.First();
             Guid guid = membersToFloodFill.First();
             var member = document.FindMemberOrThrow(guid);
             var member = document.FindMemberOrThrow(guid);
             if (member is IReadOnlyFolderNode)
             if (member is IReadOnlyFolderNode)
-                return new FloodFillChunkCache(membersToFloodFill, document.NodeGraph, frame);
+                return new FloodFillChunkCache(membersToFloodFill, document, frame);
             if (member is not IReadOnlyImageNode rasterLayer)
             if (member is not IReadOnlyImageNode rasterLayer)
                 throw new InvalidOperationException("Member is not a raster layer");
                 throw new InvalidOperationException("Member is not a raster layer");
             return new FloodFillChunkCache(rasterLayer.GetLayerImageAtFrame(frame));
             return new FloodFillChunkCache(rasterLayer.GetLayerImageAtFrame(frame));
         }
         }
-        return new FloodFillChunkCache(membersToFloodFill, document.NodeGraph, frame);
+        return new FloodFillChunkCache(membersToFloodFill, document, frame);
     }
     }
 
 
     public static Dictionary<VecI, Chunk> FloodFill(
     public static Dictionary<VecI, Chunk> FloodFill(