mirror of
				https://github.com/gyurix1968/guacamole-client.git
				synced 2025-10-31 00:53:21 +00:00 
			
		
		
		
	Finished JSDoc of Layer, more cleanup.
This commit is contained in:
		| @@ -48,6 +48,9 @@ Guacamole.Layer = function(width, height) { | |||||||
|      * @private |      * @private | ||||||
|      */ |      */ | ||||||
|     var display = document.createElement("canvas"); |     var display = document.createElement("canvas"); | ||||||
|  |     display.style.position = "absolute"; | ||||||
|  |     display.style.left = "0px"; | ||||||
|  |     display.style.top = "0px"; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * The 2D display context of the canvas element backing this Layer. |      * The 2D display context of the canvas element backing this Layer. | ||||||
| @@ -55,8 +58,19 @@ Guacamole.Layer = function(width, height) { | |||||||
|      */ |      */ | ||||||
|     var displayContext = display.getContext("2d"); |     var displayContext = display.getContext("2d"); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * The queue of all pending Tasks. Tasks will be run in order, with new | ||||||
|  |      * tasks added at the end of the queue and old tasks removed from the | ||||||
|  |      * front of the queue (FIFO). | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|     var tasks = new Array(); |     var tasks = new Array(); | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Map of all Guacamole channel masks to HTML5 canvas composite operation | ||||||
|  |      * names. Not all channel mask combinations are currently implemented. | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|     var compositeOperation = { |     var compositeOperation = { | ||||||
|      /* 0x0 NOT IMPLEMENTED */ |      /* 0x0 NOT IMPLEMENTED */ | ||||||
|         0x1: "destination-in", |         0x1: "destination-in", | ||||||
| @@ -76,14 +90,6 @@ Guacamole.Layer = function(width, height) { | |||||||
|         0xF: "lighter" |         0xF: "lighter" | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Returns the canvas element backing this Layer. |  | ||||||
|      * @returns {Element} The canvas element backing this Layer. |  | ||||||
|      */ |  | ||||||
|     this.getCanvas = function() { |  | ||||||
|         return display; |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Resizes the canvas element backing this Layer without testing the |      * Resizes the canvas element backing this Layer without testing the | ||||||
|      * new size. This function should only be used internally. |      * new size. This function should only be used internally. | ||||||
| @@ -93,10 +99,6 @@ Guacamole.Layer = function(width, height) { | |||||||
|      * @param {Number} newHeight The new height to assign to this Layer. |      * @param {Number} newHeight The new height to assign to this Layer. | ||||||
|      */ |      */ | ||||||
|     function resize(newWidth, newHeight) { |     function resize(newWidth, newHeight) { | ||||||
|         display.style.position = "absolute"; |  | ||||||
|         display.style.left = "0px"; |  | ||||||
|         display.style.top = "0px"; |  | ||||||
|  |  | ||||||
|         display.width = newWidth; |         display.width = newWidth; | ||||||
|         display.height = newHeight; |         display.height = newHeight; | ||||||
|  |  | ||||||
| @@ -104,19 +106,6 @@ Guacamole.Layer = function(width, height) { | |||||||
|         height = newHeight; |         height = newHeight; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * 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. |  | ||||||
|      *  |  | ||||||
|      * @param {Number} newWidth The new width to assign to this Layer. |  | ||||||
|      * @param {Number} newHeight The new height to assign to this Layer. |  | ||||||
|      */ |  | ||||||
|     this.resize = function(newWidth, newHeight) { |  | ||||||
|         if (newWidth != width || newHeight != height) |  | ||||||
|             resize(newWidth, newHeight); |  | ||||||
|     }; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Given the X and Y coordinates of the upper-left corner of a rectangle |      * Given the X and Y coordinates of the upper-left corner of a rectangle | ||||||
|      * and the rectangle's width and height, resize the backing canvas element |      * and the rectangle's width and height, resize the backing canvas element | ||||||
| @@ -159,27 +148,6 @@ Guacamole.Layer = function(width, height) { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     /** |  | ||||||
|      * Set to true if this Layer should resize itself to accomodate the |  | ||||||
|      * dimensions of any drawing operation, and false (the default) otherwise. |  | ||||||
|      *  |  | ||||||
|      * Note that setting this property takes effect immediately, and thus may |  | ||||||
|      * take effect on operations that were started in the past but have not |  | ||||||
|      * yet completed. If you wish the setting of this flag to only modify |  | ||||||
|      * future operations, you will need to make the setting of this flag an |  | ||||||
|      * operation with sync(). |  | ||||||
|      *  |  | ||||||
|      * @example |  | ||||||
|      * // Set autosize to true for all future operations |  | ||||||
|      * layer.sync(function() { |  | ||||||
|      *     layer.autosize = true; |  | ||||||
|      * }); |  | ||||||
|      *  |  | ||||||
|      * @type Boolean |  | ||||||
|      * @default false |  | ||||||
|      */ |  | ||||||
|     this.autosize = false; |  | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * A container for an task handler. Each operation which must be ordered |      * A container for an task handler. Each operation which must be ordered | ||||||
|      * is associated with a Task that goes into a task queue. Tasks in this |      * is associated with a Task that goes into a task queue. Tasks in this | ||||||
| @@ -202,6 +170,17 @@ Guacamole.Layer = function(width, height) { | |||||||
|          |          | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * If no tasks are pending or running, run the provided handler immediately, | ||||||
|  |      * if any. Otherwise, schedule a task to run immediately after all currently | ||||||
|  |      * running or pending tasks are complete. | ||||||
|  |      *  | ||||||
|  |      * @private | ||||||
|  |      * @param {function} handler The function to call when possible, if any. | ||||||
|  |      * @returns {Task} The Task created and added to the queue for future | ||||||
|  |      *                 running, if any, or null if the handler was run | ||||||
|  |      *                 immediately and no Task needed to be created. | ||||||
|  |      */ | ||||||
|     function scheduleTask(handler) { |     function scheduleTask(handler) { | ||||||
|          |          | ||||||
|         // If no pending tasks, just call (if available) and exit |         // If no pending tasks, just call (if available) and exit | ||||||
| @@ -218,6 +197,11 @@ Guacamole.Layer = function(width, height) { | |||||||
|          |          | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Run any Tasks which were pending but are now ready to run and are not | ||||||
|  |      * blocked by other Tasks. | ||||||
|  |      * @private | ||||||
|  |      */ | ||||||
|     function handlePendingTasks() { |     function handlePendingTasks() { | ||||||
|  |  | ||||||
|         // Draw all pending tasks. |         // Draw all pending tasks. | ||||||
| @@ -229,6 +213,35 @@ Guacamole.Layer = function(width, height) { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Set to true if this Layer should resize itself to accomodate the | ||||||
|  |      * dimensions of any drawing operation, and false (the default) otherwise. | ||||||
|  |      *  | ||||||
|  |      * Note that setting this property takes effect immediately, and thus may | ||||||
|  |      * take effect on operations that were started in the past but have not | ||||||
|  |      * yet completed. If you wish the setting of this flag to only modify | ||||||
|  |      * future operations, you will need to make the setting of this flag an | ||||||
|  |      * operation with sync(). | ||||||
|  |      *  | ||||||
|  |      * @example | ||||||
|  |      * // Set autosize to true for all future operations | ||||||
|  |      * layer.sync(function() { | ||||||
|  |      *     layer.autosize = true; | ||||||
|  |      * }); | ||||||
|  |      *  | ||||||
|  |      * @type Boolean | ||||||
|  |      * @default false | ||||||
|  |      */ | ||||||
|  |     this.autosize = false; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Returns the canvas element backing this Layer. | ||||||
|  |      * @returns {Element} The canvas element backing this Layer. | ||||||
|  |      */ | ||||||
|  |     this.getCanvas = function() { | ||||||
|  |         return display; | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Returns whether this Layer is ready. A Layer is ready if it has no |      * Returns whether this Layer is ready. A Layer is ready if it has no | ||||||
|      * pending operations and no operations in-progress. |      * pending operations and no operations in-progress. | ||||||
| @@ -239,6 +252,21 @@ Guacamole.Layer = function(width, height) { | |||||||
|         return tasks.length == 0; |         return tasks.length == 0; | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * 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. | ||||||
|  |      *  | ||||||
|  |      * @param {Number} newWidth The new width to assign to this Layer. | ||||||
|  |      * @param {Number} newHeight The new height to assign to this Layer. | ||||||
|  |      */ | ||||||
|  |     this.resize = function(newWidth, newHeight) { | ||||||
|  |         scheduleTask(function() { | ||||||
|  |             if (newWidth != width || newHeight != height) | ||||||
|  |                 resize(newWidth, newHeight); | ||||||
|  |         }); | ||||||
|  |     }; | ||||||
|  |  | ||||||
|     /** |     /** | ||||||
|      * Draws the specified image at the given coordinates. The image specified |      * Draws the specified image at the given coordinates. The image specified | ||||||
|      * must already be loaded. |      * must already be loaded. | ||||||
| @@ -344,6 +372,16 @@ Guacamole.Layer = function(width, height) { | |||||||
|  |  | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Clear the specified rectangle of image data. | ||||||
|  |      *  | ||||||
|  |      * @param {Number} x The X coordinate of the upper-left corner of the | ||||||
|  |      *                   rectangle to clear. | ||||||
|  |      * @param {Number} y The Y coordinate of the upper-left corner of the | ||||||
|  |      *                   rectangle to clear. | ||||||
|  |      * @param {Number} w The width of the rectangle to clear. | ||||||
|  |      * @param {Number} h The height of the rectangle to clear. | ||||||
|  |      */ | ||||||
|     this.clearRect = function(x, y, w, h) { |     this.clearRect = function(x, y, w, h) { | ||||||
|         scheduleTask(function() { |         scheduleTask(function() { | ||||||
|             if (autosize != 0) fitRect(x, y, w, h); |             if (autosize != 0) fitRect(x, y, w, h); | ||||||
| @@ -351,6 +389,18 @@ Guacamole.Layer = function(width, height) { | |||||||
|         }); |         }); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Provides the given filtering function with a writable snapshot of | ||||||
|  |      * image data and the current width and height of the Layer. | ||||||
|  |      *  | ||||||
|  |      * @param {function} filter A function which accepts an array of image | ||||||
|  |      *                          data (as returned by the canvas element's | ||||||
|  |      *                          display context's getImageData() function), | ||||||
|  |      *                          the width of the Layer, and the height of the | ||||||
|  |      *                          Layer as parameters, in that order. This | ||||||
|  |      *                          function must accomplish its filtering by | ||||||
|  |      *                          modifying the given image data array directly. | ||||||
|  |      */ | ||||||
|     this.filter = function(filter) { |     this.filter = function(filter) { | ||||||
|         scheduleTask(function() { |         scheduleTask(function() { | ||||||
|             var imageData = displayContext.getImageData(0, 0, width, height); |             var imageData = displayContext.getImageData(0, 0, width, height); | ||||||
| @@ -359,6 +409,17 @@ Guacamole.Layer = function(width, height) { | |||||||
|         }); |         }); | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Sets the channel mask for future operations on this Layer. The channel | ||||||
|  |      * mask is a Guacamole-specific compositing operation identifier with a | ||||||
|  |      * single bit representing each of four channels (in order): source image | ||||||
|  |      * where destination transparent, source where destination opaque, | ||||||
|  |      * destination where source transparent, and destination where source | ||||||
|  |      * opaque. | ||||||
|  |      *  | ||||||
|  |      * @param {Number} mask The channel mask for future operations on this | ||||||
|  |      *                      Layer. | ||||||
|  |      */ | ||||||
|     this.setChannelMask = function(mask) { |     this.setChannelMask = function(mask) { | ||||||
|         scheduleTask(function() { |         scheduleTask(function() { | ||||||
|             displayContext.globalCompositeOperation = compositeOperation[mask]; |             displayContext.globalCompositeOperation = compositeOperation[mask]; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user