Merge pull request #14096 from Snuffleupagus/spreadMode-preRender

Pre-render *one* additional page when spreadModes are enabled
This commit is contained in:
Tim van der Meij 2021-10-02 12:54:19 +02:00 committed by GitHub
commit dedff3c982
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 23 additions and 16 deletions

View File

@ -1250,10 +1250,16 @@ class BaseViewer {
const scrollAhead = this._isScrollModeHorizontal const scrollAhead = this._isScrollModeHorizontal
? this.scroll.right ? this.scroll.right
: this.scroll.down; : this.scroll.down;
const preRenderExtra =
this._scrollMode === ScrollMode.VERTICAL &&
this._spreadMode !== SpreadMode.NONE &&
!this.isInPresentationMode;
const pageView = this.renderingQueue.getHighestPriority( const pageView = this.renderingQueue.getHighestPriority(
visiblePages, visiblePages,
this._pages, this._pages,
scrollAhead scrollAhead,
preRenderExtra
); );
if (pageView) { if (pageView) {
this._ensurePdfPageLoaded(pageView).then(() => { this._ensurePdfPageLoaded(pageView).then(() => {

View File

@ -102,8 +102,9 @@ class PDFRenderingQueue {
* @param {Object} visible * @param {Object} visible
* @param {Array} views * @param {Array} views
* @param {boolean} scrolledDown * @param {boolean} scrolledDown
* @param {boolean} [preRenderExtra]
*/ */
getHighestPriority(visible, views, scrolledDown) { getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) {
/** /**
* The state has changed. Figure out which page has the highest priority to * The state has changed. Figure out which page has the highest priority to
* render next (if any). * render next (if any).
@ -126,20 +127,20 @@ class PDFRenderingQueue {
} }
} }
// All the visible views have rendered; try to render next/previous pages. // All the visible views have rendered; try to render next/previous page.
if (scrolledDown) { // (IDs start at 1, so no need to add 1 when `scrolledDown === true`.)
const nextPageIndex = visible.last.id; let preRenderIndex = scrolledDown ? visible.last.id : visible.first.id - 2;
// IDs start at 1, so no need to add 1. let preRenderView = views[preRenderIndex];
if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {
return views[nextPageIndex]; if (preRenderView && !this.isViewFinished(preRenderView)) {
} return preRenderView;
} else { }
const previousPageIndex = visible.first.id - 2; if (preRenderExtra) {
if ( preRenderIndex += scrolledDown ? 1 : -1;
views[previousPageIndex] && preRenderView = views[preRenderIndex];
!this.isViewFinished(views[previousPageIndex])
) { if (preRenderView && !this.isViewFinished(preRenderView)) {
return views[previousPageIndex]; return preRenderView;
} }
} }
// Everything that needs to be rendered has been. // Everything that needs to be rendered has been.