[Pkg-javascript-commits] [pdf.js] 51/210: Groups path commands into single command

David Prévot taffit at moszumanska.debian.org
Thu Jun 5 14:21:00 UTC 2014


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

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

commit 63d5aae3f610397238b37654b612cf55a91c4a27
Author: Yury Delendik <ydelendik at mozilla.com>
Date:   Wed Apr 30 09:09:04 2014 -0500

    Groups path commands into single command
---
 src/core/evaluator.js       | 24 ++++++++++++++++--
 src/display/canvas.js       | 61 +++++++++++++++++++++++++++++++--------------
 src/shared/util.js          |  3 ++-
 test/unit/evaluator_spec.js |  4 +--
 4 files changed, 68 insertions(+), 24 deletions(-)

diff --git a/src/core/evaluator.js b/src/core/evaluator.js
index dde570e..7777bf6 100644
--- a/src/core/evaluator.js
+++ b/src/core/evaluator.js
@@ -502,6 +502,18 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
       return font;
     },
 
+    buildPath: function PartialEvaluator_buildPath(operatorList, fn, args) {
+      var lastIndex = operatorList.length - 1;
+      if (lastIndex < 0 ||
+          operatorList.fnArray[lastIndex] !== OPS.constructPath) {
+        operatorList.addOp(OPS.constructPath, [[fn], args]);
+      } else {
+        var opArgs = operatorList.argsArray[lastIndex];
+        opArgs[0].push(fn);
+        Array.prototype.push.apply(opArgs[1], args);
+      }
+    },
+
     getOperatorList: function PartialEvaluator_getOperatorList(stream,
                                                                resources,
                                                                operatorList,
@@ -525,7 +537,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
         var fn = operation.fn;
         var shading;
 
-        switch (fn) {
+        switch (fn | 0) {
           case OPS.setStrokeColorN:
           case OPS.setFillColorN:
             if (args[args.length - 1].code) {
@@ -668,6 +680,14 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
                            stateManager);
             args = [];
             continue;
+          case OPS.moveTo:
+          case OPS.lineTo:
+          case OPS.curveTo:
+          case OPS.curveTo2:
+          case OPS.curveTo3:
+          case OPS.closePath:
+            self.buildPath(operatorList, fn, args);
+            continue;
         }
         operatorList.addOp(fn, args);
       }
@@ -838,7 +858,7 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
         textState = stateManager.state;
         var fn = operation.fn;
         var args = operation.args;
-        switch (fn) {
+        switch (fn | 0) {
           case OPS.setFont:
             handleSetFont(args[0].name);
             textState.fontSize = args[1];
diff --git a/src/display/canvas.js b/src/display/canvas.js
index 355f7a3..048ffbb 100644
--- a/src/display/canvas.js
+++ b/src/display/canvas.js
@@ -959,26 +959,49 @@ var CanvasGraphics = (function CanvasGraphicsClosure() {
     },
 
     // Path
-    moveTo: function CanvasGraphics_moveTo(x, y) {
-      this.ctx.moveTo(x, y);
-      this.current.setCurrentPoint(x, y);
-    },
-    lineTo: function CanvasGraphics_lineTo(x, y) {
-      this.ctx.lineTo(x, y);
-      this.current.setCurrentPoint(x, y);
-    },
-    curveTo: function CanvasGraphics_curveTo(x1, y1, x2, y2, x3, y3) {
-      this.ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
-      this.current.setCurrentPoint(x3, y3);
-    },
-    curveTo2: function CanvasGraphics_curveTo2(x2, y2, x3, y3) {
+    constructPath: function CanvasGraphics_constructPath(ops, args) {
+      var ctx = this.ctx;
       var current = this.current;
-      this.ctx.bezierCurveTo(current.x, current.y, x2, y2, x3, y3);
-      current.setCurrentPoint(x3, y3);
-    },
-    curveTo3: function CanvasGraphics_curveTo3(x1, y1, x3, y3) {
-      this.curveTo(x1, y1, x3, y3, x3, y3);
-      this.current.setCurrentPoint(x3, y3);
+      var x = current.x, y = current.y;
+      for (var i = 0, j = 0, ii = ops.length; i < ii; i++) {
+        switch (ops[i] | 0) {
+          case OPS.moveTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.moveTo(x, y);
+            break;
+          case OPS.lineTo:
+            x = args[j++];
+            y = args[j++];
+            ctx.lineTo(x, y);
+            break;
+          case OPS.curveTo:
+            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3],
+                              args[j + 4], args[j + 5]);
+            x = args[j + 4];
+            y = args[j + 5];
+            j += 6;
+            break;
+          case OPS.curveTo2:
+            ctx.bezierCurveTo(x, y, args[j], args[j + 1],
+                              args[j + 2], args[j + 3]);
+            x = args[j + 2];
+            y = args[j + 3];
+            j += 4;
+            break;
+          case OPS.curveTo3:
+            ctx.bezierCurveTo(args[j], args[j + 1], args[j + 2], args[j + 3],
+                              args[j + 2], args[j + 3]);
+            x = args[j + 2];
+            y = args[j + 3];
+            j += 4;
+            break;
+          case OPS.closePath:
+            ctx.closePath();
+            break;
+        }
+      }
+      current.setCurrentPoint(x, y);
     },
     closePath: function CanvasGraphics_closePath() {
       this.ctx.closePath();
diff --git a/src/shared/util.js b/src/shared/util.js
index b2c172a..3b70aec 100644
--- a/src/shared/util.js
+++ b/src/shared/util.js
@@ -152,7 +152,8 @@ var OPS = PDFJS.OPS = {
   paintInlineImageXObjectGroup: 87,
   paintImageXObjectRepeat: 88,
   paintImageMaskXObjectRepeat: 89,
-  paintSolidColorImageMask: 90
+  paintSolidColorImageMask: 90,
+  constructPath: 91
 };
 
 // A notice for devs. These are good for things that are helpful to devs, such
diff --git a/test/unit/evaluator_spec.js b/test/unit/evaluator_spec.js
index 0073657..23722be 100644
--- a/test/unit/evaluator_spec.js
+++ b/test/unit/evaluator_spec.js
@@ -115,13 +115,13 @@ describe('evaluator', function() {
       var evaluator = new PartialEvaluator(new PdfManagerMock(),
                                            new XrefMock(), new HandlerMock(),
                                            'prefix');
-      var stream = new StringStream('trueifalserinullh');
+      var stream = new StringStream('trueifalserinulln');
       var result = evaluator.getOperatorList(stream, new ResourcesMock());
       expect(!!result.fnArray && !!result.argsArray).toEqual(true);
       expect(result.fnArray.length).toEqual(3);
       expect(result.fnArray[0]).toEqual(OPS.setFlatness);
       expect(result.fnArray[1]).toEqual(OPS.setRenderingIntent);
-      expect(result.fnArray[2]).toEqual(OPS.closePath);
+      expect(result.fnArray[2]).toEqual(OPS.endPath);
       expect(result.argsArray.length).toEqual(3);
       expect(result.argsArray[0].length).toEqual(1);
       expect(result.argsArray[0][0]).toEqual(true);

-- 
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