diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml
index 6d6e4e8..3c5d1cc 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml
+++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml
@@ -9,7 +9,7 @@
x:Name="imagePanel"
d:DesignHeight="300" d:DesignWidth="300">
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs
index 4c5a9a1..17d0b2a 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs
+++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs
@@ -25,6 +25,7 @@ using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
+using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Threading;
using QuickLook.Annotations;
@@ -41,11 +42,13 @@ namespace QuickLook.Plugin.ImageViewer
private Visibility _backgroundVisibility = Visibility.Visible;
private Point? _dragInitPos;
private Uri _imageSource;
+ private bool _isZoomFactorFirstSet = true;
private DateTime _lastZoomTime = DateTime.MinValue;
private double _maxZoomFactor = 3d;
private Meta _meta;
private double _minZoomFactor = 0.1d;
private BitmapScalingMode _renderMode = BitmapScalingMode.HighQuality;
+ private bool _showZoomLevelInfo = true;
private BitmapSource _source;
private double _zoomFactor = 1d;
@@ -77,6 +80,17 @@ namespace QuickLook.Plugin.ImageViewer
Meta = meta;
}
+ public bool ShowZoomLevelInfo
+ {
+ get => _showZoomLevelInfo;
+ set
+ {
+ if (value == _showZoomLevelInfo) return;
+ _showZoomLevelInfo = value;
+ OnPropertyChanged();
+ }
+ }
+
public BitmapScalingMode RenderMode
{
get => _renderMode;
@@ -144,6 +158,14 @@ namespace QuickLook.Plugin.ImageViewer
{
_zoomFactor = value;
OnPropertyChanged();
+
+ if (_isZoomFactorFirstSet)
+ {
+ _isZoomFactorFirstSet = false;
+ return;
+ }
+ if (ShowZoomLevelInfo)
+ ((Storyboard) zoomLevelInfo.FindResource("StoryboardShowZoomLevelInfo")).Begin();
}
}
@@ -194,6 +216,8 @@ namespace QuickLook.Plugin.ImageViewer
private void ImagePanel_SizeChanged(object sender, SizeChangedEventArgs e)
{
+ UpdateZoomToFitFactor();
+
if (ZoomToFit)
DoZoomToFit();
}
@@ -295,20 +319,29 @@ namespace QuickLook.Plugin.ImageViewer
}
public void DoZoomToFit()
+ {
+ UpdateZoomToFitFactor();
+
+ Zoom(ZoomToFitFactor, false, true);
+ }
+
+ private void UpdateZoomToFitFactor()
{
if (viewPanelImage.Source == null)
+ {
+ ZoomToFitFactor = 1d;
return;
+ }
var factor = Math.Min(viewPanel.ActualWidth / viewPanelImage.Source.Width,
viewPanel.ActualHeight / viewPanelImage.Source.Height);
ZoomToFitFactor = factor;
-
- Zoom(factor, false, true);
}
public void ResetZoom()
{
+ ZoomToFitFactor = 1;
Zoom(1d, true);
}
@@ -317,12 +350,19 @@ namespace QuickLook.Plugin.ImageViewer
if (viewPanelImage.Source == null)
return;
+ // pause when fit width
if (ZoomFactor < ZoomToFitFactor && factor > ZoomToFitFactor
|| ZoomFactor > ZoomToFitFactor && factor < ZoomToFitFactor)
{
factor = ZoomToFitFactor;
ZoomToFit = true;
}
+ // pause when 100%
+ else if (ZoomFactor < 1 && factor > 1 || ZoomFactor > 1 && factor < 1)
+ {
+ factor = 1;
+ ZoomToFit = false;
+ }
else
{
if (!isToFit)
diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml
index 6d6dce9..d106fa9 100644
--- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml
+++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml
@@ -70,7 +70,7 @@
-
+
\ No newline at end of file