]> git.parisson.com Git - pdf.js.git/commitdiff
Introduce ImageCanvas to handle canvas rendering in WebWorker
authorJulian Viereck <julian.viereck@gmail.com>
Wed, 22 Jun 2011 07:46:11 +0000 (09:46 +0200)
committerJulian Viereck <julian.viereck@gmail.com>
Thu, 23 Jun 2011 21:33:22 +0000 (23:33 +0200)
canvas_proxy.js
fonts.js
pdf.js

index 433166aacf75d94241db209e79fd7754ab2d251d..ccc95c74a8732dbeaaf0f6e600d9a5ec8252248b 100644 (file)
@@ -14,9 +14,9 @@ function CanvasProxy(width, height) {
         "arc",
         "fillText",
         "strokeText",
-        "drawImage",
-        "getImageData",
-        "putImageData",
+        // "drawImage",
+        // "getImageData",
+        // "putImageData",
         "createImageData",
         "drawWindow",
         "save",
@@ -50,6 +50,7 @@ function CanvasProxy(width, height) {
         "$restoreCurrentX",
         "$showText"
     ];
+
     function buildFuncCall(name) {
         return function() {
             // console.log("funcCall", name)
index c7f54edf935f49f09704d3f027acfcf347f0ccdd..9c9201b722317fe07b109876011ed9f607d482df 100644 (file)
--- a/fonts.js
+++ b/fonts.js
@@ -855,8 +855,6 @@ var Font = (function () {
           var rule = "@font-face { font-family:'" + fontName + "';src:" + url + "}";
           var styleSheet = document.styleSheets[0];
           styleSheet.insertRule(rule, styleSheet.length);
-          console.log("added font", fontName);
-          console.log(rule);
       }
     }
   };
diff --git a/pdf.js b/pdf.js
index 64b99a33e826d4094d0d63dd6a3029951bbb9059..2735500842e319888c6f7fd1be69aa627e71094a 100644 (file)
--- a/pdf.js
+++ b/pdf.js
@@ -2269,14 +2269,32 @@ var Encodings = {
   }
 };
 
+function ImageCanvas(width, height) {
+    var tmpCanvas = this.canvas = document.createElement("canvas");
+    tmpCanvas.width = width;
+    tmpCanvas.height = height;
+
+    this.ctx = tmpCanvas.getContext("2d");
+    this.imgData = this.ctx.getImageData(0, 0, width, height);
+}
+
+ImageCanvas.prototype.putImageData = function(imgData) {
+    this.ctx.putImageData(imgData, 0, 0);
+}
+
+ImageCanvas.prototype.getCanvas = function() {
+    return this.canvas;
+}
+
 var CanvasGraphics = (function() {
-    function constructor(canvasCtx) {
+    function constructor(canvasCtx, imageCanvas) {
         this.ctx = canvasCtx;
         this.current = new CanvasExtraState();
         this.stateStack = [ ];
         this.pendingClip = null;
         this.res = null;
         this.xobjs = null;
+        this.ImageCanvas = imageCanvas || ImageCanvas;
     }
 
     constructor.prototype = {
@@ -3009,6 +3027,7 @@ var CanvasGraphics = (function() {
             var tmpCanvas = document.createElement("canvas");
             tmpCanvas.width = Math.ceil(botRight[0] - topLeft[0]);
             tmpCanvas.height = Math.ceil(botRight[1] - topLeft[1]);
+            console.log("tilingFill", tmpCanvas.width, tmpCanvas.height);
 
             // set the new canvas element context as the graphics context
             var tmpCtx = tmpCanvas.getContext("2d");
@@ -3249,6 +3268,7 @@ var CanvasGraphics = (function() {
                 ctx.drawImage(domImage, 0, 0, domImage.width, domImage.height,
                               0, -h, w, h);
                 this.restore();
+                console.log("drawImage");
                 return;
             }
 
@@ -3328,11 +3348,15 @@ var CanvasGraphics = (function() {
                 // handle matte object
             }
 
-            var tmpCanvas = document.createElement("canvas");
-            tmpCanvas.width = w;
-            tmpCanvas.height = h;
-            var tmpCtx = tmpCanvas.getContext("2d");
-            var imgData = tmpCtx.getImageData(0, 0, w, h);
+            var tmpCanvas = new this.ImageCanvas(w, h);
+            // var tmpCanvas = document.createElement("canvas");
+            // tmpCanvas.width = w;
+            // tmpCanvas.height = h;
+            //
+            // var tmpCtx = tmpCanvas.getContext("2d");
+            // var imgData = tmpCtx.getImageData(0, 0, w, h);
+            // var pixels = imgData.data;
+            var imgData = tmpCanvas.imgData;
             var pixels = imgData.data;
 
             if (bitsPerComponent != 8)
@@ -3399,8 +3423,9 @@ var CanvasGraphics = (function() {
                     TODO("Images with "+ numComps + " components per pixel");
                 }
             }
-            tmpCtx.putImageData(imgData, 0, 0);
-            ctx.drawImage(tmpCanvas, 0, -h);
+            console.log("paintImageXObject", w, h);
+            tmpCanvas.putImageData(imgData, 0, 0);
+            ctx.drawImage(tmpCanvas.getCanvas(), 0, -h);
             this.restore();
         },