From 50d902d9eb41f5aee01bdd36f5ffdaf169dd01c9 Mon Sep 17 00:00:00 2001 From: Julian Viereck Date: Wed, 22 Jun 2011 20:04:25 +0200 Subject: [PATCH] Make the ProxyCanvas be more a canvas - provide a ctx object to interact through --- canvas_proxy.js | 31 ++++++++++++++++++++----------- worker.js | 16 ++-------------- 2 files changed, 22 insertions(+), 25 deletions(-) diff --git a/canvas_proxy.js b/canvas_proxy.js index 0670762e5..823757492 100644 --- a/canvas_proxy.js +++ b/canvas_proxy.js @@ -64,9 +64,18 @@ function GradientProxy(stack, x0, y0, x1, y1) { function CanvasProxy(width, height) { var stack = this.$stack = []; + // Dummy context exposed. + var ctx = {}; + this.getContext = function(type) { + if (type != "2d") { + throw "CanvasProxy can only provide a 2d context."; + } + return ctx; + } + // Expose only the minimum of the canvas object - there is no dom to do // more here. - this.canvas = { + ctx.canvas = { width: width, height: height } @@ -114,11 +123,11 @@ function CanvasProxy(width, height) { "$showText" ]; - this.createLinearGradient = function(x0, y0, x1, y1) { + ctx.createLinearGradient = function(x0, y0, x1, y1) { return new GradientProxy(stack, x0, y0, x1, y1); } - this.drawImage = function(image, x, y, width, height, sx, sy, swidth, sheight) { + ctx.drawImage = function(image, x, y, width, height, sx, sy, swidth, sheight) { if (image instanceof ImageCanvasProxy) { stack.push(["$drawCanvas", [image.imgData, x, y, image.width, image.height]]); } else if(image instanceof JpegStreamProxy) { @@ -137,7 +146,7 @@ function CanvasProxy(width, height) { var name; for (var i = 0; i < ctxFunc.length; i++) { name = ctxFunc[i]; - this[name] = buildFuncCall(name); + ctx[name] = buildFuncCall(name); } var ctxProp = { @@ -168,20 +177,20 @@ function CanvasProxy(width, height) { function buildGetter(name) { return function() { - return this["$" + name]; + return ctx["$" + name]; } } function buildSetter(name) { return function(value) { stack.push(["$", name, value]); - return this["$" + name] = value; + return ctx["$" + name] = value; } } for (var name in ctxProp) { - this["$" + name] = ctxProp[name]; - this.__defineGetter__(name, buildGetter(name)); + ctx["$" + name] = ctxProp[name]; + ctx.__defineGetter__(name, buildGetter(name)); // Special treatment for `fillStyle` and `strokeStyle`: The passed style // might be a gradient. Need to check for that. @@ -192,13 +201,13 @@ function CanvasProxy(width, height) { stack.push(["$" + name + "Gradient"]); } else { stack.push(["$", name, value]); - return this["$" + name] = value; + return ctx["$" + name] = value; } } } - this.__defineSetter__(name, buildSetterStyle(name)); + ctx.__defineSetter__(name, buildSetterStyle(name)); } else { - this.__defineSetter__(name, buildSetter(name)); + ctx.__defineSetter__(name, buildSetter(name)); } } } diff --git a/worker.js b/worker.js index 6294007b6..59ad8edea 100644 --- a/worker.js +++ b/worker.js @@ -18,11 +18,6 @@ importScripts("glyphlist.js") // Use the JpegStreamProxy proxy. JpegStream = JpegStreamProxy; -// var array = new Uint8Array(2); -// array[0] = 1; -// array[1] = 300; -// postMessage(array); - var timer = null; function tic() { timer = Date.now(); @@ -33,15 +28,8 @@ function toc(msg) { timer = null; } - +// Create the WebWorkerProxyCanvas. var canvas = new CanvasProxy(1224, 1584); -// canvas.moveTo(0, 10); -// canvas.lineTo(0, 20); -// canvas.lineTo(500, 500); -// canvas.flush(); -// canvas.stroke(); -// canvas.flush(); -log("test"); var pageInterval; var pdfDocument = null; @@ -61,7 +49,7 @@ onmessage = function(event) { // page.compile will collect all fonts for us, once we have loaded them // we can trigger the actual page rendering with page.display var fonts = []; - var gfx = new CanvasGraphics(canvas, ImageCanvasProxy); + var gfx = new CanvasGraphics(canvas.getContext("2d"), ImageCanvasProxy); page.compile(gfx, fonts); // Inspect fonts and translate the missing one.