Skip to content

Commit be67ec4

Browse files
Merge pull request #14877 from Snuffleupagus/PresentationMode-spreadMode
Add (basic) support for Spread modes in PresentationMode (issue 14749)
2 parents cfac6fa + 4fffab4 commit be67ec4

File tree

2 files changed

+29
-21
lines changed

2 files changed

+29
-21
lines changed

web/base_viewer.js

+11-18
Original file line numberDiff line numberDiff line change
@@ -963,10 +963,12 @@ class BaseViewer {
963963
this.update();
964964
}
965965

966-
_scrollIntoView({ pageDiv, pageNumber, pageSpot = null }) {
966+
#scrollIntoView(pageView, pageSpot = null) {
967+
const { div, id } = pageView;
968+
967969
if (this._scrollMode === ScrollMode.PAGE) {
968970
// Ensure that `this._currentPageNumber` is correct.
969-
this._setCurrentPageNumber(pageNumber);
971+
this._setCurrentPageNumber(id);
970972

971973
this.#ensurePageViewVisible();
972974
// Ensure that rendering always occurs, to avoid showing a blank page,
@@ -975,8 +977,8 @@ class BaseViewer {
975977
}
976978

977979
if (!pageSpot && !this.isInPresentationMode) {
978-
const left = pageDiv.offsetLeft + pageDiv.clientLeft;
979-
const right = left + pageDiv.clientWidth;
980+
const left = div.offsetLeft + div.clientLeft,
981+
right = left + div.clientWidth;
980982
const { scrollLeft, clientWidth } = this.container;
981983
if (
982984
this._scrollMode === ScrollMode.HORIZONTAL ||
@@ -986,7 +988,7 @@ class BaseViewer {
986988
pageSpot = { left: 0, top: 0 };
987989
}
988990
}
989-
scrollIntoView(pageDiv, pageSpot);
991+
scrollIntoView(div, pageSpot);
990992
}
991993

992994
/**
@@ -1140,15 +1142,13 @@ class BaseViewer {
11401142
* Refreshes page view: scrolls to the current page and updates the scale.
11411143
*/
11421144
#resetCurrentPageView() {
1143-
const pageNumber = this._currentPageNumber;
1145+
const pageView = this._pages[this._currentPageNumber - 1];
11441146

11451147
if (this.isInPresentationMode) {
11461148
// Fixes the case when PDF has different page sizes.
11471149
this._setScale(this._currentScaleValue, true);
11481150
}
1149-
1150-
const pageView = this._pages[pageNumber - 1];
1151-
this._scrollIntoView({ pageDiv: pageView.div, pageNumber });
1151+
this.#scrollIntoView(pageView);
11521152
}
11531153

11541154
/**
@@ -1292,10 +1292,7 @@ class BaseViewer {
12921292
}
12931293

12941294
if (scale === "page-fit" && !destArray[4]) {
1295-
this._scrollIntoView({
1296-
pageDiv: pageView.div,
1297-
pageNumber,
1298-
});
1295+
this.#scrollIntoView(pageView);
12991296
return;
13001297
}
13011298

@@ -1313,11 +1310,7 @@ class BaseViewer {
13131310
left = Math.max(left, 0);
13141311
top = Math.max(top, 0);
13151312
}
1316-
this._scrollIntoView({
1317-
pageDiv: pageView.div,
1318-
pageSpot: { left, top },
1319-
pageNumber,
1320-
});
1313+
this.#scrollIntoView(pageView, /* pageSpot = */ { left, top });
13211314
}
13221315

13231316
_updateLocation(firstPage) {

web/pdf_presentation_mode.js

+18-3
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,20 @@ class PDFPresentationMode {
7878
pageNumber: pdfViewer.currentPageNumber,
7979
scaleValue: pdfViewer.currentScaleValue,
8080
scrollMode: pdfViewer.scrollMode,
81-
spreadMode: pdfViewer.spreadMode,
81+
spreadMode: null,
8282
};
8383

84+
if (
85+
pdfViewer.spreadMode !== SpreadMode.NONE &&
86+
!(pdfViewer.pageViewsReady && pdfViewer.hasEqualPageSizes)
87+
) {
88+
console.warn(
89+
"Ignoring Spread modes when entering PresentationMode, " +
90+
"since the document may contain varying page sizes."
91+
);
92+
this.#args.spreadMode = pdfViewer.spreadMode;
93+
}
94+
8495
try {
8596
await promise;
8697
return true;
@@ -151,7 +162,9 @@ class PDFPresentationMode {
151162
// Presentation Mode, by waiting until fullscreen mode in enabled.
152163
setTimeout(() => {
153164
this.pdfViewer.scrollMode = ScrollMode.PAGE;
154-
this.pdfViewer.spreadMode = SpreadMode.NONE;
165+
if (this.#args.spreadMode !== null) {
166+
this.pdfViewer.spreadMode = SpreadMode.NONE;
167+
}
155168
this.pdfViewer.currentPageNumber = this.#args.pageNumber;
156169
this.pdfViewer.currentScaleValue = "page-fit";
157170
}, 0);
@@ -177,7 +190,9 @@ class PDFPresentationMode {
177190
this.#notifyStateChange(PresentationModeState.NORMAL);
178191

179192
this.pdfViewer.scrollMode = this.#args.scrollMode;
180-
this.pdfViewer.spreadMode = this.#args.spreadMode;
193+
if (this.#args.spreadMode !== null) {
194+
this.pdfViewer.spreadMode = this.#args.spreadMode;
195+
}
181196
this.pdfViewer.currentScaleValue = this.#args.scaleValue;
182197
this.pdfViewer.currentPageNumber = pageNumber;
183198
this.#args = null;

0 commit comments

Comments
 (0)