Repository: incubator-guacamole-client
Updated Branches:
  refs/heads/staging/0.9.12-incubating 6bcb98383 -> 4a0de7fcc


GUACAMOLE-230: Provide means of retrieving a canvas with the same dimensions 
and content as a layer.

Project: http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/commit/c2f7fdb6
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/tree/c2f7fdb6
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/diff/c2f7fdb6

Branch: refs/heads/staging/0.9.12-incubating
Commit: c2f7fdb61d49ce14f599dc728f70fab1d164b5aa
Parents: 6bcb983
Author: Michael Jumper <[email protected]>
Authored: Sat Mar 4 20:33:57 2017 -0800
Committer: Michael Jumper <[email protected]>
Committed: Sat Mar 4 20:33:57 2017 -0800

----------------------------------------------------------------------
 .../src/main/webapp/modules/Layer.js            | 34 ++++++++++++++++++--
 1 file changed, 31 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-guacamole-client/blob/c2f7fdb6/guacamole-common-js/src/main/webapp/modules/Layer.js
----------------------------------------------------------------------
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 @@ Guacamole.Layer = function(width, height) {
     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.

Reply via email to