Added channel mask.
authorMichael Jumper <zhangmaike@users.sourceforge.net>
Wed, 30 Mar 2011 07:29:44 +0000 (00:29 -0700)
committerMichael Jumper <zhangmaike@users.sourceforge.net>
Wed, 30 Mar 2011 07:29:44 +0000 (00:29 -0700)
src/main/resources/guacamole.js
src/main/resources/layer.js

index e5956d8..2d2fdce 100644 (file)
@@ -246,12 +246,15 @@ function GuacamoleClient(display, tunnel) {
 
         "png": function(parameters) {
 
-            var layer = parseInt(parameters[0]);
-            var x = parseInt(parameters[1]);
-            var y = parseInt(parameters[2]);
-            var data = parameters[3];
+            var channelMask = parseInt(parameters[0]);
+            var layer = getLayer(parseInt(parameters[1]));
+            var x = parseInt(parameters[2]);
+            var y = parseInt(parameters[3]);
+            var data = parameters[4];
 
-            getLayer(layer).draw(
+            layer.setChannelMask(channelMask);
+
+            layer.draw(
                 x,
                 y,
                 "data:image/png;base64," + data
@@ -265,17 +268,20 @@ function GuacamoleClient(display, tunnel) {
 
         "copy": function(parameters) {
 
-            var srcL = parseInt(parameters[0]);
+            var srcL = getLayer(parseInt(parameters[0]));
             var srcX = parseInt(parameters[1]);
             var srcY = parseInt(parameters[2]);
             var srcWidth = parseInt(parameters[3]);
             var srcHeight = parseInt(parameters[4]);
-            var dstL = parseInt(parameters[5]);
-            var dstX = parseInt(parameters[6]);
-            var dstY = parseInt(parameters[7]);
+            var channelMask = parseInt(parameters[5]);
+            var dstL = getLayer(parseInt(parameters[6]));
+            var dstX = parseInt(parameters[7]);
+            var dstY = parseInt(parameters[8]);
+
+            dstL.setChannelMask(channelMask);
 
-            getLayer(dstL).copyRect(
-                getLayer(srcL),
+            dstL.copyRect(
+                srcL,
                 srcX,
                 srcY,
                 srcWidth, 
index 8ace452..5f481b7 100644 (file)
@@ -202,6 +202,31 @@ function Layer(width, height) {
         });
     };
 
+    var compositeOperation = {
+     /* 0x0 NOT IMPLEMENTED */
+        0x1: "destination-in",
+        0x2: "destination-out",
+     /* 0x3 NOT IMPLEMENTED */
+        0x4: "source-in",
+     /* 0x5 NOT IMPLEMENTED */
+        0x6: "source-atop",
+     /* 0x7 NOT IMPLEMENTED */
+        0x8: "source-out",
+        0x9: "destination-atop",
+        0xA: "xor",
+        0xB: "destination-over",
+        0xC: "source-copy",
+     /* 0xD NOT IMPLEMENTED */
+        0xE: "source-over",
+        0xF: "lighter",
+    };
+
+    display.setChannelMask = function(mask) {
+        reserveJob(function() {
+            displayContext.globalCompositeOperation = compositeOperation[mask];
+        });
+    };
+
     return display;
 
 }