Browse Source

Fixed reset viewport for custom sizes

Krzysztof Krysiński 3 months ago
parent
commit
6796db0cdf

+ 16 - 1
src/PixiEditor/ViewModels/Document/DocumentViewModel.cs

@@ -1253,7 +1253,8 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
         }
     }
 
-    public bool RenderFrames(List<Image> frames, Func<Surface, Surface> processFrameAction = null, string? renderOutput = null)
+    public bool RenderFrames(List<Image> frames, Func<Surface, Surface> processFrameAction = null,
+        string? renderOutput = null)
     {
         var firstFrame = AnimationDataViewModel.GetFirstVisibleFrame();
         var lastFrame = AnimationDataViewModel.GetLastVisibleFrame();
@@ -1300,4 +1301,18 @@ internal partial class DocumentViewModel : PixiObservableObject, IDocument
         Internals.Tracker.Dispose();
         Internals.Tracker.Document.Dispose();
     }
+
+    public VecI GetRenderOutputSize(string renderOutputName)
+    {
+        var exportOutputs = GetAvailableExportOutputs();
+        var exportOutput = exportOutputs.FirstOrDefault(x => x.name == renderOutputName);
+
+        VecI size = SizeBindable;
+        if (exportOutput != default)
+        {
+            size = exportOutput.originalSize;
+        }
+
+        return size;
+    }
 }

+ 10 - 6
src/PixiEditor/ViewModels/SubViewModels/ViewportWindowViewModel.cs

@@ -98,6 +98,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
     }
 
     private bool autoScaleBackground = true;
+
     public bool AutoScaleBackground
     {
         get => autoScaleBackground;
@@ -109,6 +110,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
     }
 
     private double customBackgroundScaleX = 16;
+
     public double CustomBackgroundScaleX
     {
         get => customBackgroundScaleX;
@@ -120,6 +122,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
     }
 
     private double customBackgroundScaleY = 16;
+
     public double CustomBackgroundScaleY
     {
         get => customBackgroundScaleY;
@@ -131,6 +134,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
     }
 
     private Bitmap backgroundBitmap;
+
     public Bitmap BackgroundBitmap
     {
         get => backgroundBitmap;
@@ -245,6 +249,11 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
         CustomBackgroundScaleY = newValue;
     }
 
+    public VecI GetRenderOutputSize()
+    {
+       return Document.GetRenderOutputSize(RenderOutputName);
+    }
+
     private void UpdateBackgroundBitmap(Setting<string> setting, string newValue)
     {
         BackgroundBitmap?.Dispose();
@@ -260,11 +269,7 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
 
         Surface surface = Surface.ForDisplay(new VecI(2, 2));
         surface.DrawingSurface.Canvas.Clear(primary);
-        using Paint secondaryPaint = new Paint
-        {
-            Color = secondary,
-            Style = PaintStyle.Fill
-        };
+        using Paint secondaryPaint = new Paint { Color = secondary, Style = PaintStyle.Fill };
         surface.DrawingSurface.Canvas.DrawRect(1, 0, 1, 1, secondaryPaint);
         surface.DrawingSurface.Canvas.DrawRect(0, 1, 1, 1, secondaryPaint);
 
@@ -297,5 +302,4 @@ internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>, IDockabl
     {
         Owner.Owner.ShortcutController.ClearContext(GetType());
     }
-
 }

+ 4 - 1
src/PixiEditor/ViewModels/SubViewModels/WindowViewModel.cs

@@ -4,6 +4,7 @@ using System.Linq;
 using System.Threading.Tasks;
 using Avalonia.Input;
 using CommunityToolkit.Mvvm.Input;
+using Drawie.Numerics;
 using PixiDocks.Core.Docking;
 using PixiEditor.Models.AnalyticsAPI;
 using PixiEditor.Models.Commands;
@@ -79,7 +80,9 @@ internal class WindowViewModel : SubViewModel<ViewModelMain>, IWindowHandler
     public void CenterCurrentViewport()
     {
         if (ActiveWindow is ViewportWindowViewModel viewport)
-            viewport.CenterViewportTrigger.Execute(this, viewport.Document.SizeBindable);
+        {
+            viewport.CenterViewportTrigger.Execute(this, viewport.GetRenderOutputSize());
+        }
     }
 
 

+ 1 - 1
src/PixiEditor/ViewModels/ViewModelMain.cs

@@ -367,7 +367,7 @@ internal partial class ViewModelMain : ViewModelBase, ICommandsHandler
     {
         foreach (var viewport in WindowSubViewModel.Viewports.Where(viewport => viewport.Document == e.Document))
         {
-            viewport.CenterViewportTrigger.Execute(this, e.NewSize);
+            viewport.CenterViewportTrigger.Execute(this, viewport.GetRenderOutputSize());
         }
     }
 }

+ 2 - 2
src/PixiEditor/Views/Main/ViewportControls/Viewport.axaml.cs

@@ -485,7 +485,7 @@ internal partial class Viewport : UserControl, INotifyPropertyChanged
 
     private void OnDocumentSizeChanged(object? sender, DocumentSizeChangedEventArgs documentSizeChangedEventArgs)
     {
-        scene.CenterContent(documentSizeChangedEventArgs.NewSize);
+        scene.CenterContent(Document.GetRenderOutputSize(ViewportRenderOutput));
     }
 
     private ChunkResolution CalculateResolution()
@@ -599,7 +599,7 @@ internal partial class Viewport : UserControl, INotifyPropertyChanged
     private void ResetViewportClicked(object sender, RoutedEventArgs e)
     {
         scene.AngleRadians = 0;
-        scene.CenterContent(Document.SizeBindable);
+        scene.CenterContent(Document.GetRenderOutputSize(ViewportRenderOutput));
     }
 
     private static void CenterViewportTriggerChanged(AvaloniaPropertyChangedEventArgs<ExecutionTrigger<VecI>> e)