Merge pull request #14158 from Snuffleupagus/preRender-doc-limits

Improve pre-rendering at the start/end of the document
This commit is contained in:
Tim van der Meij 2021-10-24 13:43:02 +02:00 committed by GitHub
commit 1ab9a6e36e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 11 deletions

View File

@ -1361,10 +1361,12 @@ class BaseViewer {
return promise;
}
/**
* @private
*/
get _scrollAhead() {
#getScrollAhead(views) {
if (views.first.id === 1) {
return true;
} else if (views.last.id === this.pagesCount) {
return false;
}
switch (this._scrollMode) {
case ScrollMode.PAGE:
return this._scrollModePageState.scrollDown;
@ -1376,7 +1378,7 @@ class BaseViewer {
forceRendering(currentlyVisiblePages) {
const visiblePages = currentlyVisiblePages || this._getVisiblePages();
const scrollAhead = this._scrollAhead;
const scrollAhead = this.#getScrollAhead(visiblePages);
const preRenderExtra =
this._spreadMode !== SpreadMode.NONE &&
this._scrollMode !== ScrollMode.HORIZONTAL;

View File

@ -82,10 +82,11 @@ class PDFRenderingQueue {
return;
}
// No pages needed rendering, so check thumbnails.
if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {
if (this.pdfThumbnailViewer.forceRendering()) {
return;
}
if (
this.isThumbnailViewEnabled &&
this.pdfThumbnailViewer?.forceRendering()
) {
return;
}
if (this.printing) {
@ -132,7 +133,7 @@ class PDFRenderingQueue {
// All the visible views have rendered; try to handle any "holes" in the
// page layout (can happen e.g. with spreadModes at higher zoom levels).
if (lastId - firstId > 1) {
for (let i = 0, ii = lastId - firstId; i <= ii; i++) {
for (let i = 1, ii = lastId - firstId; i < ii; i++) {
const holeId = scrolledDown ? firstId + i : lastId - i,
holeView = views[holeId - 1];
if (!this.isViewFinished(holeView)) {

View File

@ -295,12 +295,22 @@ class PDFThumbnailViewer {
return promise;
}
#getScrollAhead(views) {
if (views.first.id === 1) {
return true;
} else if (views.last.id === this._thumbnails.length) {
return false;
}
return this.scroll.down;
}
forceRendering() {
const visibleThumbs = this._getVisibleThumbs();
const scrollAhead = this.#getScrollAhead(visibleThumbs);
const thumbView = this.renderingQueue.getHighestPriority(
visibleThumbs,
this._thumbnails,
this.scroll.down
scrollAhead
);
if (thumbView) {
this._ensurePdfPageLoaded(thumbView).then(() => {