Sfoglia il codice sorgente

Added mini doc preview

Krzysztof Krysiński 1 settimana fa
parent
commit
87c8bfca69

+ 0 - 60
src/PixiEditor.ChangeableDocument/Changeables/Graph/Nodes/LayerNode.cs

@@ -226,66 +226,6 @@ public abstract class LayerNode : StructureNode, IReadOnlyLayerNode, IClipSource
     protected abstract void DrawWithFilters(SceneObjectRenderContext ctx, DrawingSurface workingSurface,
         Paint paint);
 
-    /*
-    private void RenderPreviews(RenderContext ctx)
-    {
-        var previewTexture = ctx.GetPreviewTexturesForNode(Id);
-
-        if (previewTexture == null || previewTexture.Count == 0)
-            return;
-
-        foreach (var request in previewTexture)
-        {
-            RenderPreviewFor(ctx, request.Texture, request.ElementToRender);
-        }
-    }*/
-
-    /*private void RenderPreviewFor(RenderContext ctx, Texture texture, string elementToRender)
-    {
-        if (texture == null || texture.IsDisposed)
-            return;
-
-        int saved = texture.DrawingSurface.Canvas.Save();
-
-        RenderContext previewCtx = ctx.Clone();
-
-        var approxBounds = GetPreviewBounds(ctx, elementToRender);
-
-        VecD size = approxBounds?.Size ?? ctx.DocumentSize;
-
-        previewCtx.ChunkResolution = PreviewUtility.CalculateResolution(size, texture.Size);
-
-        if (approxBounds.HasValue)
-        {
-            var bounds = approxBounds.Value;
-
-            var targetW = texture.Size.X;
-            var targetH = texture.Size.Y;
-
-            double uniformScale = PreviewUtility.CalculateUniformScaling(bounds.Size, texture.Size).X;
-
-            // scaled content size
-            double scaledW = bounds.Width * uniformScale;
-            double scaledH = bounds.Height * uniformScale;
-
-            // offset so it’s centered
-            double offsetX = (targetW - scaledW) / 2.0 - bounds.Left * uniformScale;
-            double offsetY = (targetH - scaledH) / 2.0 - bounds.Top * uniformScale;
-
-            var canvas = texture.DrawingSurface.Canvas;
-            canvas.Translate((float)offsetX, (float)offsetY);
-            uniformScale *= previewCtx.ChunkResolution.InvertedMultiplier();
-            canvas.Scale((float)uniformScale, (float)uniformScale);
-
-            previewCtx.DesiredSamplingOptions = uniformScale < 1.0 ? SamplingOptions.Bilinear : SamplingOptions.Default;
-        }
-
-        texture.DrawingSurface.Canvas.Clear();
-        RenderPreview(texture.DrawingSurface, previewCtx, elementToRender);
-
-        texture.DrawingSurface.Canvas.RestoreToCount(saved);
-    }*/
-
     protected Texture TryInitWorkingSurface(VecI imageSize, ChunkResolution resolution, ColorSpace processingCs, int id)
     {
         ChunkResolution targetResolution = resolution;

+ 0 - 1
src/PixiEditor/Models/Handlers/IDocument.cs

@@ -50,7 +50,6 @@ internal interface IDocument : IHandler, Extensions.CommonApi.Documents.IDocumen
     public ISnappingHandler SnappingHandler { get; }
     public IReadOnlyCollection<Guid> SelectedMembers { get; }
     public Dictionary<Guid, Texture> SceneTextures { get; }
-    public Texture DocumentTexture { get; }
     public SceneRenderer SceneRenderer { get; }
     public void RemoveSoftSelectedMember(IStructureMemberHandler member);
     public void ClearSoftSelectedMembers();

+ 4 - 6
src/PixiEditor/Models/Rendering/MemberPreviewUpdater.cs

@@ -1,12 +1,8 @@
 #nullable enable
 
 using Drawie.Backend.Core;
-using Drawie.Backend.Core.Numerics;
 using PixiEditor.ChangeableDocument.Changeables.Animations;
 using PixiEditor.ChangeableDocument.Changeables.Graph.Interfaces;
-using PixiEditor.ChangeableDocument.Changeables.Graph.Nodes;
-using Drawie.Backend.Core.Surfaces.ImageData;
-using PixiEditor.Helpers;
 using PixiEditor.Models.DocumentModels;
 using PixiEditor.Models.Handlers;
 using Drawie.Numerics;
@@ -96,14 +92,16 @@ internal class MemberPreviewUpdater
             doc.SizeBindable, internals.Tracker.Document.ProcessingColorSpace);
 
         UpdateDocPreviewPainter(doc.MiniPreviewPainter);
-    }*/
-    /*private void UpdateDocPreviewPainter(PreviewPainter painter)
+    }
+
+    private void UpdateDocPreviewPainter(PreviewPainter painter)
     {
         painter.DocumentSize = doc.SizeBindable;
         painter.ProcessingColorSpace = internals.Tracker.Document.ProcessingColorSpace;
         painter.FrameTime = doc.AnimationHandler.ActiveFrameTime;
         painter.Repaint();
     }*/
+
     private void RenderLayersPreview(HashSet<Guid> memberGuids,
         Dictionary<Guid, List<PreviewRenderRequest>> previewTextures)
     {

+ 0 - 13
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -185,20 +185,7 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
 
     public IStructureMemberHandler? SelectedStructureMember { get; private set; } = null;
 
-    private Texture? miniPreviewTexture;
-
-    public Texture MiniPreviewTexture
-    {
-        get => miniPreviewTexture;
-        set
-        {
-            SetProperty(ref miniPreviewTexture, value);
-        }
-    }
-
     public Dictionary<Guid, Texture> SceneTextures { get; } = new();
-    public Texture DocumentTexture { get; set; }
-
 
     private VectorPath selectionPath = new VectorPath();
     public VectorPath SelectionPathBindable => selectionPath;

+ 24 - 4
src/PixiEditor/ViewModels/SubViewModels/ViewportWindowViewModel.cs

@@ -176,7 +176,17 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
         PixiEditorSettings.Scene.SecondaryBackgroundColor.ValueChanged += UpdateBackgroundBitmap;
 
         previewPainterControl = new TextureControl();
-        previewPainterControl.Texture = Document.MiniPreviewTexture;
+        var nonZoomed = Document.SceneTextures.Where(x =>
+            x.Value is { DrawingSurface.Canvas.TotalMatrix: { TransX: 0, TransY: 0, SkewX: 0, SkewY: 0 } }).ToArray();
+        if (nonZoomed.Length > 0)
+        {
+            var minSize = nonZoomed.MinBy(x => x.Value.Size);
+            if (minSize.Value != null)
+            {
+                previewPainterControl.Texture = minSize.Value;
+            }
+        }
+
         TabCustomizationSettings.Icon = previewPainterControl;
     }
 
@@ -187,9 +197,19 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
         {
             OnPropertyChanged(nameof(Title));
         }
-        else if (e.PropertyName == nameof(DocumentViewModel.MiniPreviewTexture))
+        else if (e.PropertyName == nameof(DocumentViewModel.AllChangesSaved))
         {
-            previewPainterControl.Texture = Document.MiniPreviewTexture;
+            var nonZoomed = Document.SceneTextures.Where(x =>
+                    x.Value is { DrawingSurface.Canvas.TotalMatrix: { TransX: 0, TransY: 0, SkewX: 0, SkewY: 0 } })
+                .ToArray();
+            if (nonZoomed.Length > 0)
+            {
+                var minSize = nonZoomed.MinBy(x => x.Value.Size);
+                if (minSize.Value != null)
+                {
+                    previewPainterControl.Texture = minSize.Value;
+                }
+            }
         }
         else if (e.PropertyName == nameof(DocumentViewModel.AllChangesSaved))
         {
@@ -252,7 +272,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
 
     public VecI GetRenderOutputSize()
     {
-       return Document.GetRenderOutputSize(RenderOutputName);
+        return Document.GetRenderOutputSize(RenderOutputName);
     }
 
     private void UpdateBackgroundBitmap(Setting<string> setting, string newValue)