aboutsummaryrefslogtreecommitdiff
path: root/src/proxyWorker.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/proxyWorker.js')
-rw-r--r--src/proxyWorker.js53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/proxyWorker.js b/src/proxyWorker.js
new file mode 100644
index 00000000..2798b3d0
--- /dev/null
+++ b/src/proxyWorker.js
@@ -0,0 +1,53 @@
+
+function EventListener() {
+ this.listeners = {};
+
+ this.addEventListener = function(event, func) {
+ if (!this.listeners[event]) this.listeners[event] = [];
+ this.listeners[event].push(func);
+ };
+};
+
+var window = new EventListener();
+var document = new EventListener();
+
+document.createElement = function(what) {
+ switch(what) {
+ case 'canvas': {
+ var canvas = new EventListener();
+ canvas.ensureData = function() {
+ if (!canvas.data || canvas.data.width !== canvas.width || canvas.data.height !== canvas.height) {
+ canvas.data = {
+ width: canvas.width,
+ height: canvas.height,
+ buffer: new Uint8Array(canvas.width*canvas.height*4)
+ };
+ }
+ };
+ canvas.getContext = function(type) {
+ assert(type == '2d');
+ return {
+ getImageData: function(x, y, w, h) {
+ assert(x == 0 && y == 0 && w == canvas.width && h == canvas.height);
+ canvas.ensureData();
+ return {
+ width: canvas.data.width,
+ height: canvas.data.height,
+ data: new Uint8Array(canvas.data.buffer) // TODO: can we avoid this copy?
+ };
+ },
+ putImageData: function(image, x, y) {
+ canvas.ensureData();
+ assert(x == 0 && y == 0 && image.width == canvas.width && image.height == canvas.height);
+ canvas.data.buffer.set(image.data); // TODO: can we avoid this copy?
+ }
+ };
+ };
+ return canvas;
+ }
+ default: throw 'document.createElement ' + what;
+ }
+};
+
+Module.canvas = document.createElement('canvas');
+