From abc80e046d38293cc7d1f4b933591aa2f6400530 Mon Sep 17 00:00:00 2001 From: Paddy Xu Date: Fri, 22 Dec 2017 10:52:37 +0200 Subject: [PATCH] fix Pdf zoom-to-fit issue when switching pages --- .../ImagePanel.xaml.cs | 4 +-- .../PdfPageExtension.cs | 4 +-- .../PdfViewerControl.xaml.cs | 25 ++++++++++++------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs index 17d0b2a..fcaeacb 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.ImageViewer/ImagePanel.xaml.cs @@ -321,7 +321,7 @@ namespace QuickLook.Plugin.ImageViewer public void DoZoomToFit() { UpdateZoomToFitFactor(); - + Zoom(ZoomToFitFactor, false, true); } @@ -342,7 +342,7 @@ namespace QuickLook.Plugin.ImageViewer public void ResetZoom() { ZoomToFitFactor = 1; - Zoom(1d, true); + Zoom(1d, true, ZoomToFit); } public void Zoom(double factor, bool suppressEvent = false, bool isToFit = false) diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfPageExtension.cs b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfPageExtension.cs index 6fb715c..02a0c50 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfPageExtension.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfPageExtension.cs @@ -39,8 +39,8 @@ namespace QuickLook.Plugin.PDFViewer var dpiX = fixDpi ? scale.Horizontal * DpiHelper.DefaultDpi : 96; var dpiY = fixDpi ? scale.Vertical * DpiHelper.DefaultDpi : 96; - var realWidth = (int) Math.Ceiling(page.Width * (dpiX / 72) * factor); - var realHeight = (int) Math.Ceiling(page.Height * (dpiY / 72) * factor); + var realWidth = (int) Math.Round(page.Width * scale.Horizontal * factor); + var realHeight = (int) Math.Round(page.Height * scale.Vertical * factor); var bitmap = new WriteableBitmap(realWidth, realHeight, dpiX, dpiY, PixelFormats.Bgr24, null); page.Render(bitmap, diff --git a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml.cs b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml.cs index e6b29e3..37b6ed7 100644 --- a/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml.cs +++ b/QuickLook.Plugin/QuickLook.Plugin.PDFViewer/PdfViewerControl.xaml.cs @@ -56,8 +56,6 @@ namespace QuickLook.Plugin.PDFViewer public ObservableCollection PageThumbnails { get; set; } = new ObservableCollection(); - public PdfDocument PdfHandleForThumbnails { get; private set; } - public PdfDocument PdfHandle { get; private set; } public int TotalPages => PdfHandle.Pages.Count; @@ -86,8 +84,6 @@ namespace QuickLook.Plugin.PDFViewer } _pdfLoaded = false; - PdfHandleForThumbnails?.Close(); - PdfHandleForThumbnails = null; PdfHandle?.Close(); PdfHandle = null; } @@ -162,11 +158,20 @@ namespace QuickLook.Plugin.PDFViewer var pos = pagePanel.GetScrollPosition(); - var factor = pagePanel.ZoomFactor * _viewRenderFactor; - factor = Math.Max(factor, MinZoomFactor); - factor = Math.Min(factor, MaxZoomFactor); - pagePanel.MinZoomFactor = MinZoomFactor / factor; - pagePanel.MaxZoomFactor = MaxZoomFactor / factor; + double factor; + if (pagePanel.ZoomToFit) + { + factor = Math.Min(pagePanel.ActualHeight / PdfHandle.Pages[CurrentPage].Height, + pagePanel.ActualWidth / PdfHandle.Pages[CurrentPage].Width); + } + else + { + factor = pagePanel.ZoomFactor * _viewRenderFactor; + factor = Math.Max(factor, MinZoomFactor); + factor = Math.Min(factor, MaxZoomFactor); + pagePanel.MinZoomFactor = MinZoomFactor / factor; + pagePanel.MaxZoomFactor = MaxZoomFactor / factor; + } var image = PdfHandle.Pages[CurrentPage].Render(factor); @@ -242,6 +247,8 @@ namespace QuickLook.Plugin.PDFViewer Dispatcher.BeginInvoke(new Action(() => PageThumbnails.Add(bs))); }); + + handle.Close(); } }).Start(); }