]> git.parisson.com Git - pdf.js.git/commitdiff
simplify adding of textdivs to DOM as queue is no longer needed
authorAdil Allawi <adil@diwan.com>
Fri, 16 Dec 2011 10:38:30 +0000 (10:38 +0000)
committerAdil Allawi <adil@diwan.com>
Fri, 16 Dec 2011 10:38:30 +0000 (10:38 +0000)
src/canvas.js

index 50c762bca5c1d377882cdd8356a5b3061226bd8d..0e351c1b845efd958274379c24085ed94915b575 100644 (file)
@@ -257,9 +257,6 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
       this.ctx.scale(cw / mediaBox.width, ch / mediaBox.height);
       this.textDivs = [];
       this.textLayerQueue = [];
-      // Prevent textLayerQueue from being rendered while rendering a new page
-      if (this.textLayerTimer)
-        clearInterval(this.textLayerTimer);
     },
 
     executeIRQueue: function canvasGraphicsExecuteIRQueue(codeIR,
@@ -328,41 +325,22 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
         return;
 
       var self = this;
-      var textDivIndex = 0;
-      var renderTextLayer = function canvasRenderTextLayer() {
-        var finished = false;
-        var textDivs = self.textDivs;
-        if (textDivIndex < textDivs.length) {
-          var textDiv = textDivs[textDivIndex++];
-          if (textDiv.dataset.textLength > 1) { // avoid div by zero
-            textLayer.appendChild(textDiv);
-            // Adjust div width (via letterSpacing) to match canvas text
-            // Due to the .offsetWidth calls, this is slow
-            textDiv.style.letterSpacing =
-              ((textDiv.dataset.canvasWidth - textDiv.offsetWidth) /
-               (textDiv.dataset.textLength - 1)) + 'px';
-          }
+      var textDivs = this.textDivs;
+      this.textLayerTimer = setInterval(function renderTextLayer() {
+        if (textDivs.length === 0) {
+          clearInterval(self.textLayerTimer);
+          return;
         }
-        else
-          finished = true;
-        return finished;
-      }
-      var textLayerQueue = this.textLayerQueue;
-      textLayerQueue.push(renderTextLayer);
-
-      // Lazy textLayer rendering (to prevent UI hangs)
-      // Only render queue if activity has stopped, where "no activity" ==
-      // "no beginDrawing() calls in the last N ms"
-      this.textLayerTimer = setInterval(function renderTextLayerQueue() {
-        // Render most recent (==most relevant) layers first
-        for (var i = textLayerQueue.length - 1; i >= 0; i--) {
-          var finished = textLayerQueue[i].call();
-          if (finished)
-            textLayerQueue.splice(i, 1);
+        var textDiv = textDivs.shift();
+        if (textDiv.dataset.textLength > 1) { // avoid div by zero
+          textLayer.appendChild(textDiv);
+          // Adjust div width (via letterSpacing) to match canvas text
+          // Due to the .offsetWidth calls, this is slow
+          textDiv.style.letterSpacing =
+            ((textDiv.dataset.canvasWidth - textDiv.offsetWidth) /
+              (textDiv.dataset.textLength - 1)) + 'px';
         }
-        if (textLayerQueue.length == 0)
-          clearInterval(self.textLayerTimer);
-      }, 1);
+      }, 0);
     },
 
     // Graphics state