From 0060e2cb733edc8ab5a75130e6c8b7a235339c5f Mon Sep 17 00:00:00 2001 From: Hanouta <46742447+Hanouta@users.noreply.github.com> Date: Fri, 9 Jun 2023 21:10:57 +0200 Subject: [PATCH] set zoomRatio to fit document to screen size --- app/src/main/assets/viewer.js | 15 +++++++++++++++ .../java/app/grapheneos/pdfviewer/PdfViewer.java | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/app/src/main/assets/viewer.js b/app/src/main/assets/viewer.js index d5d3f37..074478f 100644 --- a/app/src/main/assets/viewer.js +++ b/app/src/main/assets/viewer.js @@ -72,6 +72,13 @@ function setLayerTransform(pageWidth, pageHeight, layerDiv) { layerDiv.style.translate = `${translate.X}px ${translate.Y}px`; } +function getDefaultZoomRatio(page, orientationDegrees) { + const viewport = page.getViewport({scale: 1, rotation: orientationDegrees}); + const widthZoomRatio = document.body.clientWidth / viewport.width; + const heightZoomRatio = document.body.clientHeight / viewport.height; + return Math.max(Math.min(widthZoomRatio, heightZoomRatio, channel.getMaxZoomRatio()), channel.getMinZoomRatio()); +} + function renderPage(pageNumber, zoom, prerender, prerenderTrigger=0) { pageRendering = true; useRender = !prerender; @@ -108,6 +115,14 @@ function renderPage(pageNumber, zoom, prerender, prerenderTrigger=0) { return; } + const defaultZoomRatio = getDefaultZoomRatio(page, orientationDegrees); + + if (cache.length === 0) { + zoomRatio = defaultZoomRatio; + newZoomRatio = defaultZoomRatio; + channel.setZoomRatio(defaultZoomRatio); + } + const viewport = page.getViewport({scale: newZoomRatio, rotation: orientationDegrees}); if (useRender) { diff --git a/app/src/main/java/app/grapheneos/pdfviewer/PdfViewer.java b/app/src/main/java/app/grapheneos/pdfviewer/PdfViewer.java index b981670..d0771d1 100644 --- a/app/src/main/java/app/grapheneos/pdfviewer/PdfViewer.java +++ b/app/src/main/java/app/grapheneos/pdfviewer/PdfViewer.java @@ -172,6 +172,21 @@ public class PdfViewer extends AppCompatActivity implements LoaderManager.Loader return mZoomRatio; } + @JavascriptInterface + public void setZoomRatio(final float ratio) { + mZoomRatio = Math.max(Math.min(ratio, MAX_ZOOM_RATIO), MIN_ZOOM_RATIO); + } + + @JavascriptInterface + public float getMinZoomRatio() { + return MIN_ZOOM_RATIO; + } + + @JavascriptInterface + public float getMaxZoomRatio() { + return MAX_ZOOM_RATIO; + } + @JavascriptInterface public int getDocumentOrientationDegrees() { return mDocumentOrientationDegrees;