Dispatch event when annotations have finished rendering.

This is needed for some smoke tests in mozilla central for testing forms
in pdf.js.

Note: AnnotationLayerBuilder.render() doesn't really need to be async, but
we're talking of making the annotation's render functions async, so this
will make that switch easier.
This commit is contained in:
Brendan Dahl 2020-08-17 13:19:03 -07:00
parent ebb903e506
commit 7bba4931ad
2 changed files with 23 additions and 3 deletions

View File

@ -60,9 +60,11 @@ class AnnotationLayerBuilder {
/**
* @param {PageViewport} viewport
* @param {string} intent (default value is 'display')
* @returns {Promise<void>} A promise that is resolved when rendering of the
* annotations is complete.
*/
render(viewport, intent = "display") {
this.pdfPage.getAnnotations({ intent }).then(annotations => {
return this.pdfPage.getAnnotations({ intent }).then(annotations => {
if (this._cancelled) {
return;
}

View File

@ -142,6 +142,24 @@ class PDFPageView {
}
}
/**
* @private
*/
async _renderAnnotationLayer() {
let error = null;
try {
await this.annotationLayer.render(this.viewport, "display");
} catch (ex) {
error = ex;
} finally {
this.eventBus.dispatch("annotationlayerrendered", {
source: this,
pageNumber: this.id,
error,
});
}
}
/**
* @private
*/
@ -384,7 +402,7 @@ class PDFPageView {
}
if (redrawAnnotations && this.annotationLayer) {
this.annotationLayer.render(this.viewport, "display");
this._renderAnnotationLayer();
}
}
@ -542,7 +560,7 @@ class PDFPageView {
this.l10n
);
}
this.annotationLayer.render(this.viewport, "display");
this._renderAnnotationLayer();
}
div.setAttribute("data-loaded", true);