mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-13 11:09:06 +00:00
fix Pdf zoom-to-fit issue when switching pages
This commit is contained in:
@@ -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)
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
|
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.Max(factor, MinZoomFactor);
|
||||||
factor = Math.Min(factor, MaxZoomFactor);
|
factor = Math.Min(factor, MaxZoomFactor);
|
||||||
pagePanel.MinZoomFactor = MinZoomFactor / factor;
|
pagePanel.MinZoomFactor = MinZoomFactor / factor;
|
||||||
pagePanel.MaxZoomFactor = MaxZoomFactor / 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();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user