Skip to content

Commit dedff3c

Browse files
Merge pull request #14096 from Snuffleupagus/spreadMode-preRender
Pre-render *one* additional page when spreadModes are enabled
2 parents 7beb67a + e4794a6 commit dedff3c

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

web/base_viewer.js

+7-1
Original file line numberDiff line numberDiff line change
@@ -1250,10 +1250,16 @@ class BaseViewer {
12501250
const scrollAhead = this._isScrollModeHorizontal
12511251
? this.scroll.right
12521252
: this.scroll.down;
1253+
const preRenderExtra =
1254+
this._scrollMode === ScrollMode.VERTICAL &&
1255+
this._spreadMode !== SpreadMode.NONE &&
1256+
!this.isInPresentationMode;
1257+
12531258
const pageView = this.renderingQueue.getHighestPriority(
12541259
visiblePages,
12551260
this._pages,
1256-
scrollAhead
1261+
scrollAhead,
1262+
preRenderExtra
12571263
);
12581264
if (pageView) {
12591265
this._ensurePdfPageLoaded(pageView).then(() => {

web/pdf_rendering_queue.js

+16-15
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ class PDFRenderingQueue {
102102
* @param {Object} visible
103103
* @param {Array} views
104104
* @param {boolean} scrolledDown
105+
* @param {boolean} [preRenderExtra]
105106
*/
106-
getHighestPriority(visible, views, scrolledDown) {
107+
getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {
107108
/**
108109
* The state has changed. Figure out which page has the highest priority to
109110
* render next (if any).
@@ -126,20 +127,20 @@ class PDFRenderingQueue {
126127
}
127128
}
128129

129-
// All the visible views have rendered; try to render next/previous pages.
130-
if (scrolledDown) {
131-
const nextPageIndex = visible.last.id;
132-
// IDs start at 1, so no need to add 1.
133-
if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
134-
return views[nextPageIndex];
135-
}
136-
} else {
137-
const previousPageIndex = visible.first.id - 2;
138-
if (
139-
views[previousPageIndex] &&
140-
!this.isViewFinished(views[previousPageIndex])
141-
) {
142-
return views[previousPageIndex];
130+
// All the visible views have rendered; try to render next/previous page.
131+
// (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)
132+
let preRenderIndex = scrolledDown ? visible.last.id : visible.first.id - 2;
133+
let preRenderView = views[preRenderIndex];
134+
135+
if (preRenderView && !this.isViewFinished(preRenderView)) {
136+
return preRenderView;
137+
}
138+
if (preRenderExtra) {
139+
preRenderIndex += scrolledDown ? 1 : -1;
140+
preRenderView = views[preRenderIndex];
141+
142+
if (preRenderView && !this.isViewFinished(preRenderView)) {
143+
return preRenderView;
143144
}
144145
}
145146
// Everything that needs to be rendered has been.

0 commit comments

Comments
 (0)