Ruben 3 ماه پیش
والد
کامیت
dc96918346

+ 2 - 2
src/PicView.Avalonia.MacOS/Views/MacOSTitlebar.axaml

@@ -32,7 +32,7 @@
             Foreground="{DynamicResource MainTextColor}"
             IconHeight="12"
             IconWidth="12"
-            IsEnabled="{CompiledBinding PicViewer.FileInfo,
+            IsEnabled="{CompiledBinding PicViewer.FileInfo.Value,
                                         Converter={x:Static ObjectConverters.IsNotNull}}"
             IsRepeatEnabled="False"
             IsTabStop="False"
@@ -42,7 +42,7 @@
             Width="30"
             x:Name="FlipButton">
             <Button.RenderTransform>
-                <ScaleTransform ScaleX="{CompiledBinding PicViewer.ScaleX}" />
+                <ScaleTransform ScaleX="{CompiledBinding PicViewer.ScaleX.Value}" />
             </Button.RenderTransform>
         </customControls:IconButton>
 

+ 2 - 2
src/PicView.Avalonia/ImageTransformations/Rotation/RotationNavigation.cs

@@ -122,6 +122,8 @@ public static class RotationNavigation
 
     public static void Flip(MainViewModel vm)
     {
+        Dispatcher.UIThread.Invoke(() => { vm.ImageViewer.Flip(true); });
+        
         if (vm.PicViewer.ScaleX.CurrentValue == 1)
         {
             vm.PicViewer.ScaleX.Value = -1;
@@ -132,8 +134,6 @@ public static class RotationNavigation
             vm.PicViewer.ScaleX.Value = 1;
             vm.Translation.IsFlipped = vm.Translation.Flip;
         }
-
-        Dispatcher.UIThread.Invoke(() => { vm.ImageViewer.Flip(true); });
     }
 
     /// <summary>

+ 16 - 12
src/PicView.Avalonia/ImageTransformations/Rotation/RotationTransformer.cs

@@ -64,32 +64,36 @@ public class RotationTransformer(
         }
     }
 
+    private ScaleTransform? _scaleTransform;
     public void Flip(bool animate)
     {
         if (getDataContext() is not MainViewModel vm || mainImage.Source is null)
         {
             return;
         }
+        
+        _scaleTransform ??= new ScaleTransform();
 
-        var prevScaleX = vm.PicViewer.ScaleX;
+        var prevScaleX = vm.PicViewer.ScaleX.CurrentValue;
+        var newScaleX = prevScaleX == -1 ? 1 : -1;
 
         if (animate)
         {
-            var flipTransform = new ScaleTransform(prevScaleX.CurrentValue, 1)
-            {
-                Transitions =
-                [
-                    new DoubleTransition
-                        { Property = ScaleTransform.ScaleXProperty, Duration = TimeSpan.FromSeconds(.2) }
-                ]
-            };
-            imageLayoutTransformControl.RenderTransform = flipTransform;
-            flipTransform.ScaleX = vm.PicViewer.ScaleX.CurrentValue;
+            _scaleTransform.Transitions ??=
+            [
+                new DoubleTransition
+                {
+                    Property = ScaleTransform.ScaleXProperty,
+                    Duration = TimeSpan.FromSeconds(.2)
+                }
+            ];
         }
         else
         {
-            imageLayoutTransformControl.RenderTransform = new ScaleTransform(vm.PicViewer.ScaleX.CurrentValue, 1);
+            _scaleTransform.Transitions = null;
         }
+        imageLayoutTransformControl.RenderTransform = _scaleTransform;
+        _scaleTransform.ScaleX = newScaleX;
     }
 
     public void SetTransform(int scaleX, int rotationAngle)