GUACAMOLE-231: Merge client handling for mouse instruction
diff --git a/guacamole-common-js/src/main/webapp/modules/Display.js b/guacamole-common-js/src/main/webapp/modules/Display.js
index f14c6bf..2c9ede6 100644
--- a/guacamole-common-js/src/main/webapp/modules/Display.js
+++ b/guacamole-common-js/src/main/webapp/modules/Display.js
@@ -423,7 +423,7 @@
// Fire cursor change event
if (guac_display.oncursor)
- guac_display.oncursor(cursor.getCanvas(), hotspotX, hotspotY);
+ guac_display.oncursor(cursor.toCanvas(), hotspotX, hotspotY);
});
};
diff --git a/guacamole-common-js/src/main/webapp/modules/Layer.js b/guacamole-common-js/src/main/webapp/modules/Layer.js
index 1ed9d4c..5384d2c 100644
--- a/guacamole-common-js/src/main/webapp/modules/Layer.js
+++ b/guacamole-common-js/src/main/webapp/modules/Layer.js
@@ -267,14 +267,42 @@
this.height = height;
/**
- * Returns the canvas element backing this Layer.
- * @returns {Element} The canvas element backing this Layer.
+ * Returns the canvas element backing this Layer. Note that the dimensions
+ * of the canvas may not exactly match those of the Layer, as resizing a
+ * canvas while maintaining its state is an expensive operation.
+ *
+ * @returns {HTMLCanvasElement}
+ * The canvas element backing this Layer.
*/
- this.getCanvas = function() {
+ this.getCanvas = function getCanvas() {
return canvas;
};
/**
+ * Returns a new canvas element containing the same image as this Layer.
+ * Unlike getCanvas(), the canvas element returned is guaranteed to have
+ * the exact same dimensions as the Layer.
+ *
+ * @returns {HTMLCanvasElement}
+ * A new canvas element containing a copy of the image content this
+ * Layer.
+ */
+ this.toCanvas = function toCanvas() {
+
+ // Create new canvas having same dimensions
+ var canvas = document.createElement('canvas');
+ canvas.width = layer.width;
+ canvas.height = layer.height;
+
+ // Copy image contents to new canvas
+ var context = canvas.getContext('2d');
+ context.drawImage(layer.getCanvas(), 0, 0);
+
+ return canvas;
+
+ };
+
+ /**
* Changes the size of this Layer to the given width and height. Resizing
* is only attempted if the new size provided is actually different from
* the current size.