]> git.parisson.com Git - pdf.js.git/commitdiff
implement even-odd fill/clip
authorChris Jones <jones.chris.g@gmail.com>
Sat, 4 Jun 2011 03:52:27 +0000 (22:52 -0500)
committerChris Jones <jones.chris.g@gmail.com>
Sat, 4 Jun 2011 03:52:27 +0000 (22:52 -0500)
pdf.js
test.html

diff --git a/pdf.js b/pdf.js
index 6d1e50748d5ad2d0e7fbc89c9dc7f6649a05e1f4..acb7c92828644bc67fa7bb2ec89241932c056ca5 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -2229,8 +2229,9 @@ var CanvasGraphics = (function() {
             this.consumePath();
         },
         eoFill: function() {
-            TODO("even-odd fill");
+            var savedFillRule = this.setEOFillRule();
             this.fill();
+            this.restoreFillRule(savedFillRule);
         },
         fillStroke: function() {
             this.ctx.fill();
@@ -2434,10 +2435,15 @@ var CanvasGraphics = (function() {
 
         consumePath: function() {
             if (this.pendingClip) {
+                var savedFillRule = null;
                 if (this.pendingClip == EO_CLIP)
-                    TODO("even-odd clipping");
+                    savedFillRule = this.setEOFillRule();
+
                 this.ctx.clip();
+
                 this.pendingClip = null;
+                if (savedFillRule !== null)
+                    this.restoreFillRule(savedFillRule);
             }
             this.ctx.beginPath();
         },
@@ -2445,6 +2451,17 @@ var CanvasGraphics = (function() {
             var ri = (255 * r) | 0, gi = (255 * g) | 0, bi = (255 * b) | 0;
             return "rgb("+ ri +","+ gi +","+ bi +")";
         },
+        // We generally keep the canvas context set for
+        // nonzero-winding, and just set evenodd for the operations
+        // that need them.
+        setEOFillRule: function() {
+            var savedFillRule = this.ctx.mozFillRule;
+            this.ctx.mozFillRule = "evenodd";
+            return savedFillRule;
+        },
+        restoreFillRule: function(rule) {
+            this.ctx.mozFillRule = rule;
+        }
     };
 
     return constructor;
index 8513529fef2baffb9e2b94c7679f6918399adcb5..10a35e16359074aa95a454d965a725d3cf488d4e 100644 (file)
--- a/test.html
+++ b/test.html
@@ -40,7 +40,7 @@ function load() {
     canvas.mozOpaque = true;
     pageDisplay = document.getElementById("pageNumber");
     infoDisplay = document.getElementById("info");
-    open("compressed.tracemonkey-pldi-09.pdf");
+    open("uncompressed.tracemonkey-pldi-09.pdf");
 }
 
 function open(url) {