Browse Source

Refactor rotation logic: rename `ImageTransformer` to `RotationTransformer`, move `Rotation` functionality to `RotationNavigation`, and introduce `RotationButton` enum for improved organization and clarity.

Ruben 4 months ago
parent
commit
f14c6564a9

+ 13 - 19
src/PicView.Avalonia/Functions/FunctionsMapper.cs

@@ -7,7 +7,7 @@ using PicView.Avalonia.Crop;
 using PicView.Avalonia.FileSystem;
 using PicView.Avalonia.Gallery;
 using PicView.Avalonia.ImageHandling;
-using PicView.Avalonia.ImageTransformations;
+using PicView.Avalonia.ImageTransformations.Rotation;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.SettingsManagement;
 using PicView.Avalonia.UI;
@@ -256,21 +256,21 @@ public static class FunctionsMapper
         await NavigationManager.Prev100(Vm).ConfigureAwait(false);
     
 
-    /// <inheritdoc cref="Rotation.NavigateUp(MainViewModel)" />
+    /// <inheritdoc cref="RotationNaRotationNavigationp(MainViewModel)" />
     public static async Task Up() =>
-        await Rotation.NavigateUp(Vm).ConfigureAwait(false);
+        await RotationNavigation.NavigateUp(Vm).ConfigureAwait(false);
 
-    /// <inheritdoc cref="Rotation.RotateRight(MainViewModel)" />
+    /// <inheritdoc cref="RotationNavigation.RotateRight(MainViewModel)" />
     public static async Task RotateRight() =>
-        await Rotation.RotateRight(Vm).ConfigureAwait(false);
+        await RotationNavigation.RotateRight(Vm).ConfigureAwait(false);
 
-    /// <inheritdoc cref="Rotation.RotateLeft(MainViewModel)" />
+    /// <inheritdoc cref="RotationNavigation.RotateLeft(MainViewModel)" />
     public static async Task RotateLeft() =>
-        await Rotation.RotateLeft(Vm).ConfigureAwait(false);
+        await RotationNavigation.RotateLeft(Vm).ConfigureAwait(false);
 
-    /// <inheritdoc cref="Rotation.NavigateDown(MainViewModel)" />
+    /// <inheritdoc cref="RotationNavigation.NavigateDown(MainViewModel)" />
     public static async Task Down() =>
-        await Rotation.NavigateDown(Vm).ConfigureAwait(false);
+        await RotationNavigation.NavigateDown(Vm).ConfigureAwait(false);
     
     public static async Task ScrollDown()
     {
@@ -410,15 +410,9 @@ public static class FunctionsMapper
     /// <inheritdoc cref="DialogManager.Close(MainViewModel)" />
     public static async Task Close() =>
         await DialogManager.Close(Vm).ConfigureAwait(false);
-    
-    public static async Task Center()
-    {
-        // TODO: Needs refactor, add async overload for Center
-        await Dispatcher.UIThread.InvokeAsync(() =>
-        {
-            Rotation.Center(Vm);
-        });
-    }
+
+    public static async Task Center() =>
+        await UIHelper.CenterAsync(Vm).ConfigureAwait(false);
 
     /// <inheritdoc cref="Interfaces.IPlatformWindowService.MaximizeRestore" />
     public static Task Maximize()
@@ -634,7 +628,7 @@ public static class FunctionsMapper
 
     public static Task Flip()
     {
-        Rotation.Flip(Vm);
+        RotationNavigation.Flip(Vm);
         return Task.CompletedTask;
     }
 

+ 8 - 0
src/PicView.Avalonia/ImageTransformations/Rotation/RotationButton.cs

@@ -0,0 +1,8 @@
+namespace PicView.Avalonia.ImageTransformations.Rotation;
+
+public enum RotationButton
+{
+    WindowBorderButton,
+    RotateRightButton,
+    RotateLeftButton
+}

+ 14 - 39
src/PicView.Avalonia/ImageTransformations/Rotation.cs → src/PicView.Avalonia/ImageTransformations/Rotation/RotationNavigation.cs

@@ -5,20 +5,13 @@ using PicView.Avalonia.Gallery;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.Views.UC.Menus;
-using PicView.Avalonia.WindowBehavior;
 using PicView.Core.DebugTools;
 using PicView.Core.Gallery;
 
-namespace PicView.Avalonia.ImageTransformations;
-public static class Rotation
-{
-    public enum RotationButton
-    {
-        WindowBorderButton,
-        RotateRightButton,
-        RotateLeftButton
-    }
+namespace PicView.Avalonia.ImageTransformations.Rotation;
 
+public static class RotationNavigation
+{
     public static async Task RotateRight(MainViewModel? vm)
     {
         if (vm is null)
@@ -33,11 +26,11 @@ public static class Rotation
 
         await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(false); });
     }
-    
+
     public static async Task RotateRight(MainViewModel? vm, RotationButton rotationButton)
     {
         await RotateRight(vm);
-        
+
         // Check if it should move the cursor
         if (!Settings.WindowProperties.AutoFit)
         {
@@ -87,7 +80,7 @@ public static class Rotation
             }
         });
     }
-            
+
     public static async Task RotateLeft(MainViewModel? vm)
     {
         if (vm is null)
@@ -99,21 +92,23 @@ public static class Rotation
         {
             return;
         }
+
         await Dispatcher.UIThread.InvokeAsync(() => { vm.ImageViewer.Rotate(true); });
     }
 
     public static async Task RotateLeft(MainViewModel vm, RotationButton rotationButton)
     {
         await RotateLeft(vm);
-        
+
         // Check if it should move the cursor
         if (!Settings.WindowProperties.AutoFit)
         {
             return;
         }
+
         await MoveCursorAfterRotation(vm, rotationButton);
     }
-    
+
     public static void Flip(MainViewModel vm)
     {
         if (vm.PicViewer.ScaleX == 1)
@@ -129,7 +124,7 @@ public static class Rotation
 
         Dispatcher.UIThread.Invoke(() => { vm.ImageViewer.Flip(true); });
     }
-    
+
     /// <summary>
     /// Navigates up or rotates the image based on current state
     /// </summary>
@@ -146,7 +141,7 @@ public static class Rotation
             return;
         }
 
-        await Dispatcher.UIThread.InvokeAsync(() => 
+        await Dispatcher.UIThread.InvokeAsync(() =>
         {
             if (vm.IsScrollingEnabled)
             {
@@ -175,7 +170,7 @@ public static class Rotation
             return;
         }
 
-        await Dispatcher.UIThread.InvokeAsync(() => 
+        await Dispatcher.UIThread.InvokeAsync(() =>
         {
             if (vm.IsScrollingEnabled)
             {
@@ -187,24 +182,4 @@ public static class Rotation
             }
         });
     }
-
-    /// <summary>
-    /// Centers the window or gallery based on current state
-    /// </summary>
-    public static void Center(MainViewModel? vm)
-    {
-        if (vm is null)
-        {
-            return;
-        }
-        
-        if (GalleryFunctions.IsFullGalleryOpen)
-        {
-            GalleryFunctions.CenterGallery(vm);
-        }
-        else
-        {
-            WindowFunctions.CenterWindowOnScreen();
-        }
-    }
-}
+}

+ 2 - 2
src/PicView.Avalonia/ImageTransformations/ImageTransformer.cs → src/PicView.Avalonia/ImageTransformations/Rotation/RotationTransformer.cs

@@ -9,9 +9,9 @@ using PicView.Avalonia.WindowBehavior;
 using PicView.Core.ImageDecoding;
 using PicView.Core.ImageTransformations;
 
-namespace PicView.Avalonia.ImageTransformations;
+namespace PicView.Avalonia.ImageTransformations.Rotation;
 
-public class ImageTransformer(
+public class RotationTransformer(
     LayoutTransformControl imageLayoutTransformControl,
     PicBox mainImage,
     Func<object?> getDataContext,

+ 36 - 0
src/PicView.Avalonia/UI/UIHelper.cs

@@ -4,10 +4,12 @@ using Avalonia.Controls;
 using Avalonia.Controls.ApplicationLifetimes;
 using Avalonia.Threading;
 using PicView.Avalonia.CustomControls;
+using PicView.Avalonia.Gallery;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.ViewModels;
 using PicView.Avalonia.Views;
 using PicView.Avalonia.Views.UC;
+using PicView.Avalonia.WindowBehavior;
 
 namespace PicView.Avalonia.UI;
 
@@ -47,6 +49,40 @@ public static class UIHelper
         vm = GetMainView.DataContext as MainViewModel;
         return vm is not null;
     }
+    
+    /// <summary>
+    /// Centers the window or gallery based on current state
+    /// </summary>
+    public static void Center(MainViewModel? vm)
+    {
+        if (vm is null)
+        {
+            return;
+        }
+        
+        if (GalleryFunctions.IsFullGalleryOpen)
+        {
+            GalleryFunctions.CenterGallery(vm);
+        }
+        else
+        {
+            WindowFunctions.CenterWindowOnScreen();
+        }
+    }
+    
+    /// <inheritdoc cref="Center"/>
+    public static async Task CenterAsync(MainViewModel? vm)
+    {
+        if (vm is null)
+        {
+            return;
+        }
+
+        await Dispatcher.UIThread.InvokeAsync(() =>
+        {
+            Center(vm);
+        });
+    }
 
     /// <summary>
     ///     Scrolls to the end of the gallery if the <paramref name="last" /> parameter is true.

+ 4 - 4
src/PicView.Avalonia/ViewModels/MainViewModel.cs

@@ -9,7 +9,7 @@ using PicView.Avalonia.Converters;
 using PicView.Avalonia.FileSystem;
 using PicView.Avalonia.Functions;
 using PicView.Avalonia.Gallery;
-using PicView.Avalonia.ImageTransformations;
+using PicView.Avalonia.ImageTransformations.Rotation;
 using PicView.Avalonia.Interfaces;
 using PicView.Avalonia.LockScreen;
 using PicView.Avalonia.Navigation;
@@ -139,18 +139,18 @@ public class MainViewModel : ReactiveObject
         RotateLeftCommand = FunctionsHelper.CreateReactiveCommand(FunctionsMapper.RotateLeft);
         RotateLeftButtonCommand = FunctionsHelper.CreateReactiveCommand(async () =>
         {
-            await Rotation.RotateLeft(this, Rotation.RotationButton.RotateLeftButton);
+            await RotationNavigation.RotateLeft(this, RotationButton.RotateLeftButton);
         });
 
         RotateRightCommand = FunctionsHelper.CreateReactiveCommand(FunctionsMapper.RotateRight);
         RotateRightButtonCommand = FunctionsHelper.CreateReactiveCommand(async () =>
         {
-            await Rotation.RotateRight(this, Rotation.RotationButton.RotateRightButton);
+            await RotationNavigation.RotateRight(this, RotationButton.RotateRightButton);
         });
 
         RotateRightWindowBorderButtonCommand = FunctionsHelper.CreateReactiveCommand(async () =>
         {
-            await Rotation.RotateRight(this, Rotation.RotationButton.WindowBorderButton);
+            await RotationNavigation.RotateRight(this, RotationButton.WindowBorderButton);
         });
 
         FlipCommand = FunctionsHelper.CreateReactiveCommand(FunctionsMapper.Flip);

+ 3 - 2
src/PicView.Avalonia/Views/ImageViewer.axaml.cs

@@ -5,6 +5,7 @@ using Avalonia.Interactivity;
 using Avalonia.Threading;
 using ImageMagick;
 using PicView.Avalonia.ImageTransformations;
+using PicView.Avalonia.ImageTransformations.Rotation;
 using PicView.Avalonia.Input;
 using PicView.Avalonia.ViewModels;
 using PicView.Core.ImageDecoding;
@@ -13,7 +14,7 @@ namespace PicView.Avalonia.Views;
 
 public partial class ImageViewer : UserControl
 {
-    private ImageTransformer? _imageTransformer;
+    private RotationTransformer? _imageTransformer;
     private Zoom? _zoom;
 
     public ImageViewer()
@@ -48,7 +49,7 @@ public partial class ImageViewer : UserControl
 
     private void InitializeImageTransformer()
     {
-        _imageTransformer = new ImageTransformer(
+        _imageTransformer = new RotationTransformer(
             ImageLayoutTransformControl,
             MainImage,
             () => DataContext,