Repository: incubator-guacamole-client Updated Branches: refs/heads/master 865ec1970 -> 25b9425ed
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/master 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.
