From: Michael Jumper Date: Wed, 30 Mar 2011 07:29:44 +0000 (-0700) Subject: Added channel mask. X-Git-Url: http://git.alex.org.uk Added channel mask. --- diff --git a/src/main/resources/guacamole.js b/src/main/resources/guacamole.js index e5956d8..2d2fdce 100644 --- a/src/main/resources/guacamole.js +++ b/src/main/resources/guacamole.js @@ -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, diff --git a/src/main/resources/layer.js b/src/main/resources/layer.js index 8ace452..5f481b7 100644 --- a/src/main/resources/layer.js +++ b/src/main/resources/layer.js @@ -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; }