diff --git a/web/base_viewer.js b/web/base_viewer.js index 1b7ea705b..a35e78082 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -963,10 +963,12 @@ class BaseViewer { this.update(); } - _scrollIntoView({ pageDiv, pageNumber, pageSpot = null }) { + #scrollIntoView(pageView, pageSpot = null) { + const { div, id } = pageView; + if (this._scrollMode === ScrollMode.PAGE) { // Ensure that `this._currentPageNumber` is correct. - this._setCurrentPageNumber(pageNumber); + this._setCurrentPageNumber(id); this.#ensurePageViewVisible(); // Ensure that rendering always occurs, to avoid showing a blank page, @@ -975,8 +977,8 @@ class BaseViewer { } if (!pageSpot && !this.isInPresentationMode) { - const left = pageDiv.offsetLeft + pageDiv.clientLeft; - const right = left + pageDiv.clientWidth; + const left = div.offsetLeft + div.clientLeft, + right = left + div.clientWidth; const { scrollLeft, clientWidth } = this.container; if ( this._scrollMode === ScrollMode.HORIZONTAL || @@ -986,7 +988,7 @@ class BaseViewer { pageSpot = { left: 0, top: 0 }; } } - scrollIntoView(pageDiv, pageSpot); + scrollIntoView(div, pageSpot); } /** @@ -1140,15 +1142,13 @@ class BaseViewer { * Refreshes page view: scrolls to the current page and updates the scale. */ #resetCurrentPageView() { - const pageNumber = this._currentPageNumber; + const pageView = this._pages[this._currentPageNumber - 1]; if (this.isInPresentationMode) { // Fixes the case when PDF has different page sizes. this._setScale(this._currentScaleValue, true); } - - const pageView = this._pages[pageNumber - 1]; - this._scrollIntoView({ pageDiv: pageView.div, pageNumber }); + this.#scrollIntoView(pageView); } /** @@ -1292,10 +1292,7 @@ class BaseViewer { } if (scale === "page-fit" && !destArray[4]) { - this._scrollIntoView({ - pageDiv: pageView.div, - pageNumber, - }); + this.#scrollIntoView(pageView); return; } @@ -1313,11 +1310,7 @@ class BaseViewer { left = Math.max(left, 0); top = Math.max(top, 0); } - this._scrollIntoView({ - pageDiv: pageView.div, - pageSpot: { left, top }, - pageNumber, - }); + this.#scrollIntoView(pageView, /* pageSpot = */ { left, top }); } _updateLocation(firstPage) { diff --git a/web/pdf_presentation_mode.js b/web/pdf_presentation_mode.js index 912d3a202..7da3719cb 100644 --- a/web/pdf_presentation_mode.js +++ b/web/pdf_presentation_mode.js @@ -78,9 +78,20 @@ class PDFPresentationMode { pageNumber: pdfViewer.currentPageNumber, scaleValue: pdfViewer.currentScaleValue, scrollMode: pdfViewer.scrollMode, - spreadMode: pdfViewer.spreadMode, + spreadMode: null, }; + if ( + pdfViewer.spreadMode !== SpreadMode.NONE && + !(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes) + ) { + console.warn( + "Ignoring Spread modes when entering PresentationMode, " + + "since the document may contain varying page sizes." + ); + this.#args.spreadMode = pdfViewer.spreadMode; + } + try { await promise; return true; @@ -151,7 +162,9 @@ class PDFPresentationMode { // Presentation Mode, by waiting until fullscreen mode in enabled. setTimeout(() => { this.pdfViewer.scrollMode = ScrollMode.PAGE; - this.pdfViewer.spreadMode = SpreadMode.NONE; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = SpreadMode.NONE; + } this.pdfViewer.currentPageNumber = this.#args.pageNumber; this.pdfViewer.currentScaleValue = "page-fit"; }, 0); @@ -177,7 +190,9 @@ class PDFPresentationMode { this.#notifyStateChange(PresentationModeState.NORMAL); this.pdfViewer.scrollMode = this.#args.scrollMode; - this.pdfViewer.spreadMode = this.#args.spreadMode; + if (this.#args.spreadMode !== null) { + this.pdfViewer.spreadMode = this.#args.spreadMode; + } this.pdfViewer.currentScaleValue = this.#args.scaleValue; this.pdfViewer.currentPageNumber = pageNumber; this.#args = null;