فهرست منبع

Improved fixed viewport measure calculation

flabbet 10 ماه پیش
والد
کامیت
6ee7d39812

+ 0 - 2
src/PixiEditor/Views/Main/ViewportControls/FixedViewport.axaml

@@ -16,8 +16,6 @@
     
         <visuals:PreviewPainterControl
             x:Name="mainImage"
-            VerticalAlignment="Stretch"
-            HorizontalAlignment="Stretch"
             Focusable="True"
             PreviewPainter="{Binding Document.PreviewPainter, ElementName=uc}"
             FrameToRender="{Binding Document.AnimationDataViewModel.ActiveFrameBindable, ElementName=uc}"

+ 16 - 0
src/PixiEditor/Views/Main/ViewportControls/FixedViewport.axaml.cs

@@ -51,6 +51,20 @@ internal partial class FixedViewport : UserControl, INotifyPropertyChanged
         Unloaded += OnUnload;
     }
 
+    protected override Size MeasureOverride(Size availableSize)
+    {
+        double aspectRatio = Document?.Width / (double)Document?.Height ?? 1;
+        double width = availableSize.Width;
+        double height = width / aspectRatio;
+        if (height > availableSize.Height)
+        {
+            height = availableSize.Height;
+            width = height * aspectRatio;
+        }
+        
+        return new Size(width, height);
+    }
+
     private void OnUnload(object sender, RoutedEventArgs e)
     {
         Document?.Operations.RemoveViewport(GuidValue);
@@ -104,6 +118,7 @@ internal partial class FixedViewport : UserControl, INotifyPropertyChanged
         FixedViewport? viewport = (FixedViewport)args.Sender;
         oldDoc?.Operations.RemoveViewport(viewport.GuidValue);
         newDoc?.Operations.AddOrUpdateViewport(viewport.GetLocation());
+        viewport.InvalidateMeasure();
 
         if (oldDoc != null)
         {
@@ -118,6 +133,7 @@ internal partial class FixedViewport : UserControl, INotifyPropertyChanged
     private void DocSizeChanged(object? sender, DocumentSizeChangedEventArgs e)
     {
         Document?.Operations.AddOrUpdateViewport(GetLocation());
+        InvalidateMeasure();
     }
 
     private void OnImageSizeChanged(object sender, SizeChangedEventArgs e)

+ 1 - 10
src/PixiEditor/Views/Visuals/PreviewPainterControl.cs

@@ -37,16 +37,6 @@ public class PreviewPainterControl : DrawieControl
         PreviewPainterProperty.Changed.Subscribe(PainterChanged);
     }
 
-    protected override Size MeasureOverride(Size availableSize)
-    {
-        return availableSize;
-    }
-
-    protected override Size ArrangeOverride(Size finalSize)
-    {
-        return finalSize;
-    }
-
     public PreviewPainterControl(PreviewPainter previewPainter, int frameToRender)
     {
         PreviewPainter = previewPainter;
@@ -54,6 +44,7 @@ public class PreviewPainterControl : DrawieControl
         PreviewPainterProperty.Changed.Subscribe(PainterChanged);
     }
 
+
     private void PainterChanged(AvaloniaPropertyChangedEventArgs<PreviewPainter> args)
     {
         if (args.OldValue.Value != null)