fix Pdf zoom-to-fit issue when switching pages

This commit is contained in:
Paddy Xu
2017-12-22 10:52:37 +02:00
parent fe39854b57
commit abc80e046d
3 changed files with 20 additions and 13 deletions

View File

@@ -342,7 +342,7 @@ namespace QuickLook.Plugin.ImageViewer
public void ResetZoom() public void ResetZoom()
{ {
ZoomToFitFactor = 1; ZoomToFitFactor = 1;
Zoom(1d, true); Zoom(1d, true, ZoomToFit);
} }
public void Zoom(double factor, bool suppressEvent = false, bool isToFit = false) public void Zoom(double factor, bool suppressEvent = false, bool isToFit = false)

View File

@@ -39,8 +39,8 @@ namespace QuickLook.Plugin.PDFViewer
var dpiX = fixDpi ? scale.Horizontal * DpiHelper.DefaultDpi : 96; var dpiX = fixDpi ? scale.Horizontal * DpiHelper.DefaultDpi : 96;
var dpiY = fixDpi ? scale.Vertical * DpiHelper.DefaultDpi : 96; var dpiY = fixDpi ? scale.Vertical * DpiHelper.DefaultDpi : 96;
var realWidth = (int) Math.Ceiling(page.Width * (dpiX / 72) * factor); var realWidth = (int) Math.Round(page.Width * scale.Horizontal * factor);
var realHeight = (int) Math.Ceiling(page.Height * (dpiY / 72) * factor); var realHeight = (int) Math.Round(page.Height * scale.Vertical * factor);
var bitmap = new WriteableBitmap(realWidth, realHeight, dpiX, dpiY, PixelFormats.Bgr24, null); var bitmap = new WriteableBitmap(realWidth, realHeight, dpiX, dpiY, PixelFormats.Bgr24, null);
page.Render(bitmap, page.Render(bitmap,

View File

@@ -56,8 +56,6 @@ namespace QuickLook.Plugin.PDFViewer
public ObservableCollection<BitmapSource> PageThumbnails { get; set; } = public ObservableCollection<BitmapSource> PageThumbnails { get; set; } =
new ObservableCollection<BitmapSource>(); new ObservableCollection<BitmapSource>();
public PdfDocument PdfHandleForThumbnails { get; private set; }
public PdfDocument PdfHandle { get; private set; } public PdfDocument PdfHandle { get; private set; }
public int TotalPages => PdfHandle.Pages.Count; public int TotalPages => PdfHandle.Pages.Count;
@@ -86,8 +84,6 @@ namespace QuickLook.Plugin.PDFViewer
} }
_pdfLoaded = false; _pdfLoaded = false;
PdfHandleForThumbnails?.Close();
PdfHandleForThumbnails = null;
PdfHandle?.Close(); PdfHandle?.Close();
PdfHandle = null; PdfHandle = null;
} }
@@ -162,11 +158,20 @@ namespace QuickLook.Plugin.PDFViewer
var pos = pagePanel.GetScrollPosition(); var pos = pagePanel.GetScrollPosition();
var factor = pagePanel.ZoomFactor * _viewRenderFactor; double factor;
factor = Math.Max(factor, MinZoomFactor); if (pagePanel.ZoomToFit)
factor = Math.Min(factor, MaxZoomFactor); {
pagePanel.MinZoomFactor = MinZoomFactor / factor; factor = Math.Min(pagePanel.ActualHeight / PdfHandle.Pages[CurrentPage].Height,
pagePanel.MaxZoomFactor = MaxZoomFactor / factor; 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); var image = PdfHandle.Pages[CurrentPage].Render(factor);
@@ -242,6 +247,8 @@ namespace QuickLook.Plugin.PDFViewer
Dispatcher.BeginInvoke(new Action(() => PageThumbnails.Add(bs))); Dispatcher.BeginInvoke(new Action(() => PageThumbnails.Add(bs)));
}); });
handle.Close();
} }
}).Start(); }).Start();
} }