浏览代码

Refactoring

Ruben 1 年之前
父节点
当前提交
adb5f21e1f

+ 10 - 10
src/PicView.Avalonia/Clipboard/ClipboardHelper.cs

@@ -171,62 +171,62 @@ public static class ClipboardHelper
         var bitmap = await GetBitmapFromBytes("PNG");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         
         bitmap = await GetBitmapFromBytes("image/jpeg");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("image/png");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("image/bmp");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("BMP");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("JPG");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("JPEG");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("image/tiff");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("GIF");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         bitmap = await GetBitmapFromBytes("image/gif");
         if (bitmap is not null)
         {
-            NavigationHelper.SetSingleImage(bitmap, imageType, name, vm);
+            UpdateImage.SetSingleImage(bitmap, imageType, name, vm);
             return;
         }
         return;

+ 2 - 68
src/PicView.Avalonia/Navigation/NavigationHelper.cs

@@ -354,7 +354,7 @@ public static class NavigationHelper
         }
         
         var imageModel = await GetImageModel.GetImageModelAsync(fileInfo).ConfigureAwait(false);
-        SetSingleImage(imageModel.Image, imageModel.ImageType, url, vm);
+        UpdateImage.SetSingleImage(imageModel.Image, imageModel.ImageType, url, vm);
         vm.FileInfo = fileInfo;
         ExifHandling.UpdateExifValues(imageModel, vm);
         FileHistoryNavigation.Add(url);
@@ -393,7 +393,7 @@ public static class NavigationHelper
                     PixelHeight = bitmap?.PixelSize.Height ?? 0,
                     ImageType = ImageType.Bitmap
                 };
-                SetSingleImage(imageModel.Image, imageModel.ImageType, TranslationHelper.Translation.Base64Image, vm);
+                UpdateImage.SetSingleImage(imageModel.Image, imageModel.ImageType, TranslationHelper.Translation.Base64Image, vm);
                 ExifHandling.UpdateExifValues(imageModel, vm);
             }
             catch (Exception e)
@@ -434,72 +434,6 @@ public static class NavigationHelper
         await CheckAndReloadGallery(fileInfo, vm);
     }
     
-    #endregion
-    
-    #region Set image
-
-    /// <summary>
-    /// Sets the given image as the single image displayed in the view.
-    /// </summary>
-    /// <param name="source">The source of the image to display.</param>
-    /// <param name="imageType"></param>
-    /// <param name="name">The name of the image.</param>
-    /// <param name="vm">The main view model instance.</param>
-    public static void SetSingleImage(object source, ImageType imageType, string name, MainViewModel vm)
-    {
-        Dispatcher.UIThread.InvokeAsync(() =>
-        {
-            if (vm.CurrentView != vm.ImageViewer)
-            {
-                vm.CurrentView = vm.ImageViewer;
-            }
-        }, DispatcherPriority.Render);
-
-        vm.ImageIterator = null;
-        int width, height;
-        if (imageType is ImageType.Svg)
-        {
-            var path = source as string;
-            using var magickImage = new MagickImage();
-            magickImage.Ping(path);
-            vm.ImageSource = source;
-            vm.ImageType = ImageType.Svg;
-            width = (int)magickImage.Width;
-            height = (int)magickImage.Height;
-        }
-        else
-        {
-            var bitmap = source as Bitmap;
-            vm.ImageSource = source;
-            vm.ImageType = imageType == ImageType.Invalid ? ImageType.Bitmap : imageType;
-            width = bitmap?.PixelSize.Width ?? 0;
-            height = bitmap?.PixelSize.Height ?? 0;
-        }
-
-        if (GalleryFunctions.IsBottomGalleryOpen)
-        {
-            Dispatcher.UIThread.InvokeAsync(() =>
-            {
-                // Trigger animation
-                vm.GalleryMode = GalleryMode.BottomToClosed;
-            });
-            // Set to closed to ensure next gallery mode changing is fired
-            vm.GalleryMode = GalleryMode.Closed;
-        }
-        WindowHelper.SetSize(width, height, 0,0, 0, vm);
-        if (vm.RotationAngle != 0)
-        {
-            vm.ImageViewer.Rotate(vm.RotationAngle);
-        }
-        var singeImageWindowTitles = ImageTitleFormatter.GenerateTitleForSingleImage(width, height, name, 1);
-        vm.WindowTitle = singeImageWindowTitles.BaseTitle;
-        vm.Title = singeImageWindowTitles.TitleWithAppName;
-        vm.TitleTooltip = singeImageWindowTitles.TitleWithAppName;
-        vm.GalleryMargin = new Thickness(0, 0, 0, 0);
-        
-        vm.PlatformService.StopTaskbarProgress();
-    }
-    
     #endregion
 
     #region Private helpers

+ 77 - 8
src/PicView.Avalonia/Navigation/UpdateImage.cs

@@ -1,4 +1,5 @@
-using Avalonia.Media.Imaging;
+using Avalonia;
+using Avalonia.Media.Imaging;
 using Avalonia.Threading;
 using ImageMagick;
 using PicView.Avalonia.Gallery;
@@ -6,6 +7,7 @@ using PicView.Avalonia.ImageHandling;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
 using PicView.Core.Config;
+using PicView.Core.Gallery;
 using PicView.Core.Navigation;
 
 namespace PicView.Avalonia.Navigation;
@@ -14,7 +16,8 @@ public static class UpdateImage
 {
     #region Update Source and Preview
 
-    public static async Task UpdateSource(MainViewModel vm, int index, List<string> imagePaths, bool isReversed, PreLoader.PreLoadValue? preLoadValue,
+    public static async Task UpdateSource(MainViewModel vm, int index, List<string> imagePaths, bool isReversed,
+        PreLoader.PreLoadValue? preLoadValue,
         PreLoader.PreLoadValue? nextPreloadValue = null)
     {
         preLoadValue ??= await vm.ImageIterator.GetPreLoadValueAsync(index);
@@ -30,13 +33,15 @@ public static class UpdateImage
             if (nextPreloadValue.ImageModel?.Image is null)
             {
                 var fileInfo = nextPreloadValue.ImageModel?.FileInfo ?? new FileInfo(
-                    imagePaths[vm.ImageIterator.GetIteration(index, isReversed ? NavigateTo.Previous : NavigateTo.Next, true)]);
+                    imagePaths[
+                        vm.ImageIterator.GetIteration(index, isReversed ? NavigateTo.Previous : NavigateTo.Next,
+                            true)]);
                 nextPreloadValue.ImageModel = await GetImageModel.GetImageModelAsync(fileInfo).ConfigureAwait(false);
             }
         }
 
         vm.IsLoading = false;
-        
+
         await Dispatcher.UIThread.InvokeAsync(() =>
         {
             vm.ImageViewer.SetTransform(preLoadValue.ImageModel.EXIFOrientation);
@@ -52,7 +57,7 @@ public static class UpdateImage
             }
 
             vm.ImageType = preLoadValue.ImageModel.ImageType;
-        
+
             WindowHelper.SetSize(preLoadValue.ImageModel.PixelWidth, preLoadValue.ImageModel.PixelHeight,
                 nextPreloadValue?.ImageModel?.PixelWidth ?? 0, nextPreloadValue?.ImageModel?.PixelHeight ?? 0,
                 preLoadValue.ImageModel.Rotation, vm);
@@ -76,13 +81,77 @@ public static class UpdateImage
             }
         }
 
-        await Dispatcher.UIThread.InvokeAsync(TooltipHelper.CloseToolTipMessage);
-
         vm.FileInfo = preLoadValue.ImageModel.FileInfo;
         vm.ZoomValue = 1;
         vm.PixelWidth = preLoadValue.ImageModel.PixelWidth;
         vm.PixelHeight = preLoadValue.ImageModel.PixelHeight;
         ExifHandling.UpdateExifValues(preLoadValue.ImageModel, vm);
+
+        await Dispatcher.UIThread.InvokeAsync(TooltipHelper.CloseToolTipMessage);
+    }
+
+    /// <summary>
+    /// Sets the given image as the single image displayed in the view.
+    /// </summary>
+    /// <param name="source">The source of the image to display.</param>
+    /// <param name="imageType"></param>
+    /// <param name="name">The name of the image.</param>
+    /// <param name="vm">The main view model instance.</param>
+    public static void SetSingleImage(object source, ImageType imageType, string name, MainViewModel vm)
+    {
+        Dispatcher.UIThread.InvokeAsync(() =>
+        {
+            if (vm.CurrentView != vm.ImageViewer)
+            {
+                vm.CurrentView = vm.ImageViewer;
+            }
+        }, DispatcherPriority.Render);
+
+        vm.ImageIterator = null;
+        int width, height;
+        if (imageType is ImageType.Svg)
+        {
+            var path = source as string;
+            using var magickImage = new MagickImage();
+            magickImage.Ping(path);
+            vm.ImageSource = source;
+            vm.ImageType = ImageType.Svg;
+            width = (int)magickImage.Width;
+            height = (int)magickImage.Height;
+        }
+        else
+        {
+            var bitmap = source as Bitmap;
+            vm.ImageSource = source;
+            vm.ImageType = imageType == ImageType.Invalid ? ImageType.Bitmap : imageType;
+            width = bitmap?.PixelSize.Width ?? 0;
+            height = bitmap?.PixelSize.Height ?? 0;
+        }
+
+        if (GalleryFunctions.IsBottomGalleryOpen)
+        {
+            Dispatcher.UIThread.InvokeAsync(() =>
+            {
+                // Trigger animation
+                vm.GalleryMode = GalleryMode.BottomToClosed;
+            });
+            // Set to closed to ensure next gallery mode changing is fired
+            vm.GalleryMode = GalleryMode.Closed;
+        }
+
+        WindowHelper.SetSize(width, height, 0, 0, 0, vm);
+        if (vm.RotationAngle != 0)
+        {
+            vm.ImageViewer.Rotate(vm.RotationAngle);
+        }
+
+        var singeImageWindowTitles = ImageTitleFormatter.GenerateTitleForSingleImage(width, height, name, 1);
+        vm.WindowTitle = singeImageWindowTitles.BaseTitle;
+        vm.Title = singeImageWindowTitles.TitleWithAppName;
+        vm.TitleTooltip = singeImageWindowTitles.TitleWithAppName;
+        vm.GalleryMargin = new Thickness(0, 0, 0, 0);
+
+        vm.PlatformService.StopTaskbarProgress();
     }
 
     public static void LoadingPreview(MainViewModel vm, int index, int currentIndex)
@@ -136,4 +205,4 @@ public static class UpdateImage
     }
 
     #endregion
-}
+}

+ 0 - 3
src/PicView.Avalonia/PicViewTheme/ThemeManager.cs

@@ -18,16 +18,13 @@ public static class ThemeManager
         
         // StyleInclude breaks trimming and AOT
 
-        // Add the new theme
         if (dark)
         {
-            // Load Dark theme
             SettingsHelper.Settings.Theme.Dark = true;
             application.RequestedThemeVariant = ThemeVariant.Dark;
         }
         else
         {
-            // Load Light theme
             SettingsHelper.Settings.Theme.Dark = false;
             application.RequestedThemeVariant = ThemeVariant.Light;
         }

+ 2 - 0
src/PicView.Avalonia/UI/WindowHelper.cs

@@ -330,6 +330,8 @@ public static class WindowHelper
 
     public static void Maximize()
     {
+        // TODO: Fix incorrect size for bottom button bar
+        
         if (Dispatcher.UIThread.CheckAccess())
         {
             Set();