[Pkg-javascript-commits] [pdf.js] 84/161: Introduce paintSolidColorImageMask command to handle 1x1 solid image masks

David Prévot taffit at moszumanska.debian.org
Sat Apr 19 14:16:31 UTC 2014


This is an automated email from the git hooks/post-receive script.

taffit pushed a commit to branch master
in repository pdf.js.

commit fc9edfcf76d0efe0cd5630c93dcd4021c1cefa2e
Author: Christian Krebs <chrisk at opera.com>
Date:   Sun Mar 16 16:17:13 2014 +0100

    Introduce paintSolidColorImageMask command to handle 1x1 solid image masks
    
    See https://github.com/mozilla/pdf.js/issues/4436 for details
---
 src/core/evaluator.js | 20 ++++++++++++++++++++
 src/display/canvas.js |  5 +++++
 src/shared/util.js    |  3 ++-
 3 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index 2265321..23baf0b 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -1699,6 +1699,25 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
     state[pattern[pattern.length - 1]] = fn;
   }
 
+  function handlePaintSolidColorImageMask(index, count, fnArray, argsArray) {
+    // Handles special case of mainly latex documents which
+    // use image masks to draw lines with the current fill style.
+    // 'count' groups of (save, transform, paintImageMaskXObject, restore)+
+    // have been found at index.
+    for (var i = 0; i < count; i++) {
+      var arg = argsArray[index + 4 * i + 2];
+      var imageMask = arg.length == 1 && arg[0];
+      if (imageMask && imageMask.width == 1 && imageMask.height == 1 &&
+          (!imageMask.data.length || (imageMask.data.length == 1 &&
+                                      imageMask.data[0] === 0))) {
+        fnArray[index + 4 * i + 2] = OPS.paintSolidColorImageMask;
+        continue;
+      }
+      break;
+    }
+    return count - i;
+  }
+
   var InitialState = [];
 
   addState(InitialState,
@@ -1802,6 +1821,7 @@ var QueueOptimizer = (function QueueOptimizerClosure() {
       for (; i < ii && fnArray[i - 4] === fnArray[i]; i++) {
       }
       var count = (i - j) >> 2;
+      count = handlePaintSolidColorImageMask(j, count, fnArray, argsArray);
       if (count < MIN_IMAGES_IN_MASKS_BLOCK) {
         context.currentOperation = i - 1;
         return;
diff --git a/src/display/canvas.js b/src/display/canvas.js
index ddcf3da..6d60a7d 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -2128,6 +2128,11 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
       }
     },
 
+    paintSolidColorImageMask:
+      function CanvasGraphics_paintSolidColorImageMask() {
+        this.ctx.fillRect(0, 0, 1, 1);
+    },
+
     // Marked content
 
     markPoint: function CanvasGraphics_markPoint(tag) {
diff --git a/src/shared/util.js b/src/shared/util.js
index 4803e6d..c645d58 100644
--- a/src/shared/util.js
+++ b/src/shared/util.js
@@ -151,7 +151,8 @@ var OPS = PDFJS.OPS = {
   paintInlineImageXObject: 86,
   paintInlineImageXObjectGroup: 87,
   paintImageXObjectRepeat: 88,
-  paintImageMaskXObjectRepeat: 89
+  paintImageMaskXObjectRepeat: 89,
+  paintSolidColorImageMask: 90,
 };
 
 // A notice for devs. These are good for things that are helpful to devs, such

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/pdf.js.git



More information about the Pkg-javascript-commits mailing list