ソースを参照

Fixed side by side rendering issues and changing title when toggling on/off

Ruben 8 ヶ月 前
コミット
c4c21ac684

+ 22 - 1
src/PicView.Avalonia/SettingsManagement/SettingsUpdater.cs

@@ -5,6 +5,7 @@ using Avalonia.Controls.Primitives;
 using Avalonia.Media;
 using Avalonia.Threading;
 using PicView.Avalonia.ColorManagement;
+using PicView.Avalonia.ImageHandling;
 using PicView.Avalonia.Navigation;
 using PicView.Avalonia.UI;
 using PicView.Avalonia.ViewModels;
@@ -188,6 +189,7 @@ public static class SettingsUpdater
         vm.IsShowingSideBySide = false;
         vm.SecondaryImageSource = null;
         WindowResizing.SetSize(vm);
+        SetTitleHelper.SetTitle(vm);
     }
     
     public static async Task TurnOnSideBySide(MainViewModel vm)
@@ -205,10 +207,29 @@ public static class SettingsUpdater
                 return;
             }
             vm.SecondaryImageSource = preloadValue.ImageModel.Image;
+            var imageModel1 = new ImageModel
+            {
+                FileInfo = vm.FileInfo,
+                PixelWidth = (int)vm.ImageWidth,
+                PixelHeight = (int)vm.ImageHeight,
+                ImageType = vm.ImageType,
+                Image = vm.ImageSource,
+                EXIFOrientation = vm.ExifOrientation
+            };
+            var imageModel2 = new ImageModel
+            {
+                FileInfo = preloadValue.ImageModel.FileInfo,
+                PixelWidth = preloadValue.ImageModel.PixelWidth,
+                PixelHeight = preloadValue.ImageModel.PixelHeight,
+                ImageType = preloadValue.ImageModel.ImageType,
+                Image = preloadValue.ImageModel.Image,
+                EXIFOrientation = preloadValue.ImageModel.EXIFOrientation
+            };
             await Dispatcher.UIThread.InvokeAsync(() =>
             {
                 WindowResizing.SetSize(vm.ImageWidth, vm.ImageHeight, preloadValue.ImageModel.PixelWidth,
                     preloadValue.ImageModel.PixelHeight, vm.RotationAngle, vm);
+                SetTitleHelper.SetSideBySideTitle(vm, imageModel1, imageModel2);
             });
         }
     }
@@ -228,7 +249,7 @@ public static class SettingsUpdater
         {
             TurnOnScroll(vm);
         }
-
+        
         WindowResizing.SetSize(vm);
         
         await SaveSettingsAsync();

+ 5 - 15
src/PicView.Avalonia/WindowBehavior/WindowResizing.cs

@@ -145,8 +145,8 @@ public static class WindowResizing
         }
         else
         {
-            firstWidth = GetWidth();
-            firstHeight = GetHeight();
+            firstWidth = preloadValue.ImageModel?.PixelWidth ?? vm.ImageWidth;
+            firstHeight = preloadValue.ImageModel?.PixelHeight ?? vm.ImageHeight;
         }
 
         if (!Settings.ImageScaling.ShowImageSideBySide)
@@ -156,10 +156,10 @@ public static class WindowResizing
 
         var secondaryPreloadValue = NavigationManager.GetNextPreLoadValue();
         double secondWidth, secondHeight;
-        if (secondaryPreloadValue != null)
+        if (secondaryPreloadValue is { ImageModel: not null })
         {
-            secondWidth = GetWidth();
-            secondHeight = GetHeight();
+            secondWidth = secondaryPreloadValue.ImageModel.PixelWidth;
+            secondHeight = secondaryPreloadValue.ImageModel.PixelHeight;
         }
         else if (NavigationManager.CanNavigate(vm))
         {
@@ -176,16 +176,6 @@ public static class WindowResizing
         }
             
         return GetSize(firstWidth, firstHeight, secondWidth, secondHeight, vm.RotationAngle, vm);
-
-        double GetWidth()
-        {
-            return preloadValue?.ImageModel?.PixelWidth ?? vm.ImageWidth;
-        }
-
-        double GetHeight()
-        {
-            return preloadValue?.ImageModel?.PixelHeight ?? vm.ImageHeight;
-        }
     }
     
     public static ImageSizeCalculationHelper.ImageSize? GetSize(double width, double height, double secondWidth, double secondHeight, double rotation,

+ 10 - 4
src/PicView.Core/Calculations/ImageSizeCalculationHelper.cs

@@ -275,9 +275,8 @@ public static class ImageSizeCalculationHelper
                                  Settings.WindowProperties.Maximized;
                 var borderSpaceHeight = fullscreen ? 0 : uiTopSize + uiBottomSize + galleryHeight;
                 var workAreaHeight = monitorHeight * dpiScaling - borderSpaceHeight;
-                scrollHeight = Settings.ImageScaling.StretchImage
-                    ? workAreaHeight
-                    : workAreaHeight - Padding;
+                scrollHeight = Math.Min(xHeight,
+                    Settings.ImageScaling.StretchImage ? workAreaHeight : workAreaHeight - Padding);
             }
             else
             {
@@ -341,7 +340,14 @@ public static class ImageSizeCalculationHelper
 
         if (Settings.Zoom.ScrollEnabled)
         {
-            titleMaxWidth += SizeDefaults.ScrollbarSize;
+            if (Settings.ImageScaling.ShowImageSideBySide)
+            {
+                titleMaxWidth += SizeDefaults.ScrollbarSize + 10;
+            }
+            else
+            {
+                titleMaxWidth += SizeDefaults.ScrollbarSize;
+            }
         }
 
         return titleMaxWidth;