diff options
author | Alexander Larsson <alexl@redhat.com> | 2010-04-07 22:37:24 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2010-04-07 22:37:24 +0200 |
commit | 3c1b7aa17710264331617fcb5d1f470ff97f3d64 (patch) | |
tree | 4380f5b7d934da95535dab6f50dbc924c5bc074d | |
parent | 84406e4c8824d17b7c78c65b7a2fcd8e880d6661 (diff) |
Add offscreen support
-rw-r--r-- | client.html | 79 |
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); } } } |