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