From d85e38d629cf740a3bd2ad978f1a832f47d2bfeb Mon Sep 17 00:00:00 2001 From: Brendan Dahl Date: Mon, 5 Aug 2013 16:34:57 -0700 Subject: [PATCH] Fix intermittent blank page on fast zoom. --- src/api.js | 2 +- web/viewer.js | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/api.js b/src/api.js index 902075d43..9285606a9 100644 --- a/src/api.js +++ b/src/api.js @@ -852,7 +852,7 @@ var InternalRenderTask = (function InternalRenderTaskClosure() { cancel: function InternalRenderTask_cancel() { this.running = false; this.cancelled = true; - this.callback(); + this.callback('cancelled'); }, operatorListChanged: function InternalRenderTask_operatorListChanged() { diff --git a/web/viewer.js b/web/viewer.js index d1b01ff00..3e2ca141d 100644 --- a/web/viewer.js +++ b/web/viewer.js @@ -1560,7 +1560,6 @@ var PageView = function pageView(container, id, scale, this.update = function pageViewUpdate(scale, rotation) { if (this.renderTask) { this.renderTask.cancel(); - this.renderTask = null; } this.resume = null; this.renderingState = RenderingStates.INITIAL; @@ -1828,8 +1827,18 @@ var PageView = function pageView(container, id, scale, var self = this; function pageViewDrawCallback(error) { + // The renderTask may have been replaced by a new one, so only remove the + // reference to the renderTask if it matches the one that is triggering + // this callback. + if (renderTask === self.renderTask) { + self.renderTask = null; + } + + if (error === 'cancelled') { + return; + } + self.renderingState = RenderingStates.FINISHED; - self.renderTask = null; if (self.loadingIconDiv) { div.removeChild(self.loadingIconDiv); @@ -1890,7 +1899,7 @@ var PageView = function pageView(container, id, scale, cont(); } }; - this.renderTask = this.pdfPage.render(renderContext); + var renderTask = this.renderTask = this.pdfPage.render(renderContext); this.renderTask.then( function pdfPageRenderCallback() {