diff --git a/web/annotation_layer_builder.js b/web/annotation_layer_builder.js index 4612d65d4..2c96778ca 100644 --- a/web/annotation_layer_builder.js +++ b/web/annotation_layer_builder.js @@ -41,6 +41,7 @@ class AnnotationLayerBuilder { this.l10n = l10n; this.div = null; + this._cancelled = false; } /** @@ -49,6 +50,10 @@ class AnnotationLayerBuilder { */ render(viewport, intent = 'display') { this.pdfPage.getAnnotations({ intent, }).then((annotations) => { + if (this._cancelled) { + return; + } + let parameters = { viewport: viewport.clone({ dontFlip: true, }), div: this.div, @@ -80,6 +85,10 @@ class AnnotationLayerBuilder { }); } + cancel() { + this._cancelled = true; + } + hide() { if (!this.div) { return; diff --git a/web/pdf_page_view.js b/web/pdf_page_view.js index d236746c8..edd0ef582 100644 --- a/web/pdf_page_view.js +++ b/web/pdf_page_view.js @@ -136,7 +136,7 @@ class PDFPageView { } reset(keepZoomLayer = false, keepAnnotations = false) { - this.cancelRendering(); + this.cancelRendering(keepAnnotations); let div = this.div; div.style.width = Math.floor(this.viewport.width) + 'px'; @@ -159,7 +159,8 @@ class PDFPageView { // Hide the annotation layer until all elements are resized // so they are not displayed on the already resized page. this.annotationLayer.hide(); - } else { + } else if (this.annotationLayer) { + this.annotationLayer.cancel(); this.annotationLayer = null; } @@ -240,7 +241,7 @@ class PDFPageView { this.reset(/* keepZoomLayer = */ true, /* keepAnnotations = */ true); } - cancelRendering() { + cancelRendering(keepAnnotations = false) { if (this.paintTask) { this.paintTask.cancel(); this.paintTask = null; @@ -252,6 +253,10 @@ class PDFPageView { this.textLayer.cancel(); this.textLayer = null; } + if (!keepAnnotations && this.annotationLayer) { + this.annotationLayer.cancel(); + this.annotationLayer = null; + } } cssTransform(target, redrawAnnotations = false) {