summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2010-04-07 22:37:24 +0200
committerAlexander Larsson <alexl@redhat.com>2010-04-07 22:37:24 +0200
commit3c1b7aa17710264331617fcb5d1f470ff97f3d64 (patch)
tree4380f5b7d934da95535dab6f50dbc924c5bc074d
parent84406e4c8824d17b7c78c65b7a2fcd8e880d6661 (diff)
Add offscreen support
-rw-r--r--client.html79
1 files changed, 67 insertions, 12 deletions
diff --git a/client.html b/client.html
index e1da654..a217b20 100644
--- a/client.html
+++ b/client.html
@@ -57,8 +57,9 @@ function createXHR()
}
var current_color =" #000000";
-var surfaces = {};
var current_context = 0;
+var current_surface_id = 0;
+var surfaces = {};
function handleLoad(event)
{
@@ -66,9 +67,43 @@ function handleLoad(event)
i = 0;
while (i < cmd.length) {
- switch (cmd[i]) {
+ var command = cmd[i++];
+ switch (command) {
+ /* create new surface */
+ case 's':
+ id = base64_16(cmd, i);
+ i = i + 3;
+ w = base64_16(cmd, i);
+ i = i + 3;
+ h = base64_16(cmd, i);
+ i = i + 3;
+ var surface = document.createElement("canvas");
+ surface.width = w;
+ surface.height = h;
+ surfaces[id] = surface
+
+ break;
+
+ /* select current surface */
+ case 'a':
+ id = base64_16(cmd, i);
+ i = i + 3;
+ surface = surfaces[id];
+ current_context = canvas.getContext("2d");
+ initContext(current_context);
+
+ break;
+
+ /* delete surface */
+ case 'd':
+ id = base64_16(cmd, i);
+ i = i + 3;
+ delete surfaces[id]
+
+ break;
+
+ /* put image data surface */
case 'i':
- i++;
x = base64_16(cmd, i);
i = i + 3;
y = base64_16(cmd, i);
@@ -83,8 +118,8 @@ function handleLoad(event)
break;
+ /* copy rect */
case 'b':
- i++;
sx = base64_16(cmd, i);
i = i + 3;
sy = base64_16(cmd, i);
@@ -101,8 +136,28 @@ function handleLoad(event)
break;
+ /* copy from surface */
+ case 'B':
+ source_id = base64_16(cmd, i);
+ i = i + 3;
+ sx = base64_16(cmd, i);
+ i = i + 3;
+ sy = base64_16(cmd, i);
+ i = i + 3;
+ w = base64_16(cmd, i);
+ i = i + 3;
+ h = base64_16(cmd, i);
+ i = i + 3;
+ dx = base64_16(cmd, i);
+ i = i + 3;
+ dy = base64_16(cmd, i);
+ i = i + 3;
+ current_context.drawImage(surfaces[source_id], sx, sy, w, h, dx, dy, w, h);
+
+ break;
+
+ /* fill rect */
case 'r':
- i++;
x = base64_16(cmd, i);
i = i + 3;
y = base64_16(cmd, i);
@@ -115,18 +170,18 @@ function handleLoad(event)
break;
+ /* set current color rgb */
case 'c':
- i++;
c = base64_24(cmd, i);
i = i + 4;
- color = '#' + c.toString(16);
- current_context.fillStyle = color;
+ current_color = '#' + c.toString(16);
+ current_context.fillStyle = current_color;
break;
+ /* set current color rgba */
case 'C':
- i++;
c = base64_32(cmd, i);
i = i + 6;
@@ -134,13 +189,13 @@ function handleLoad(event)
g = ((c >> 8) & 0xff);
b = (c & 0xff);
alpha = ((c >> 24) & 0xff);
- color = 'rgba(' + r + "," + g + "," + b + "," + (alpha / 255.0) + ')'
- current_context.fillStyle = color;
+ current_color = 'rgba(' + r + "," + g + "," + b + "," + (alpha / 255.0) + ')'
+ current_context.fillStyle = current_color;
break;
default:
- alert("Unknown op " + cmd[i]);
+ alert("Unknown op " + command);
}
}
}