UNPKG

guacamole-client-typedefs

Version:

Work in progress typescript definitions based on http://guacamole.apache.org/doc/guacamole-common-js/

511 lines (460 loc) 22.5 kB
/// <reference path="./Layer.d.ts" /> declare module 'guacamole-client' { export namespace Display { export type VisibleLayer = typeof VisibleLayer; } /** * The Guacamole display. The display does not deal with the Guacamole * protocol, and instead implements a set of graphical operations which * embody the set of operations present in the protocol. The order operations * are executed is guaranteed to be in the same order as their corresponding * functions are called. */ export class Display { /** * The X coordinate of the hotspot of the mouse cursor. The hotspot is * the relative location within the image of the mouse cursor at which * each click occurs. */ cursorHotspotX: number; /** * The Y coordinate of the hotspot of the mouse cursor. The hotspot is * the relative location within the image of the mouse cursor at which * each click occurs. */ cursorHotspotY: number; /** * The current X coordinate of the local mouse cursor. This is not * necessarily the location of the actual mouse - it refers only to * the location of the cursor image within the Guacamole display, as * last set by moveCursor(). */ cursorX: number; /** * The current X coordinate of the local mouse cursor. This is not * necessarily the location of the actual mouse - it refers only to * the location of the cursor image within the Guacamole display, as * last set by moveCursor(). */ cursorY: number; /** * Add the specified arc to the current path. * @param layer The layer to draw upon. * @param x The X coordinate of the center of the circle which will contain the arc. * @param y The Y coordinate of the center of the circle which will contain the arc. * @param radius The radius of the circle. * @param startAngle The starting angle of the arc, in radians. * @param endAngle The ending angle of the arc, in radians. * @param negative Whether the arc should be drawn in order of decreasing angle. */ arc(layer: Layer, x: number, y: number, radius: number, startAngle: number, endAngle: number, negative: boolean): void; /** * Starts a new path at the specified point. * @param layer The layer to draw upon. * @param cp1x The X coordinate of the first control point. * @param cp1y The Y coordinate of the first control point. * @param cp2x The X coordinate of the second control point. * @param cp2y The Y coordinate of the second control point. * @param x The X coordinate of the endpoint of the curve. * @param y The Y coordinate of the endpoint of the curve. */ curveTo(layer: Layer, cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; /** * Closes the current path by connecting the end point with the start point (if any) with a straight line. * @param layer The layer to draw upon. */ close(layer: Layer): void; /** * Add the specified rectangle to the current path. * @param layer The layer to draw upon. * @param x The X coordinate of the upper-left corner of the rectangle to draw. * @param y The Y coordinate of the upper-left corner of the rectangle to draw. * @param w The width of the rectangle to draw. * @param h The height of the rectangle to draw. */ rect(layer: Layer, x: number, y: number, w: number, h: number): void; /** * Clip all future drawing operations by the current path. The current path * is implicitly closed. The current path can continue to be reused * for other operations (such as fillColor()) but a new path will be started * once a path drawing operation (path() or rect()) is used. * @param layer The layer to affect. */ clip(layer: Layer): void; /** * Stroke the current path with the specified color. The current path * is implicitly closed. The current path can continue to be reused * for other operations (such as clip()) but a new path will be started * once a path drawing operation (path() or rect()) is used. * @param layer The layer to draw upon. * @param cap The line cap style. Can be "round", "square", or "butt". * @param join The line join style. Can be "round", "bevel", or "miter". * @param thickness The line thickness in pixels. * @param r The red component of the color to fill. * @param g The green component of the color to fill. * @param b The blue component of the color to fill. * @param a The alpha component of the color to fill. */ strokeColor(layer: Layer, cap: Layer.LineCap, join: Layer.LineJoin, thickness: number, r: number, g: number, b: number, a: number): void; /** * Fills the current path with the specified color. The current path * is implicitly closed. The current path can continue to be reused * for other operations (such as clip()) but a new path will be started * once a path drawing operation (path() or rect()) is used. * @param layer The layer to draw upon. * @param r The red component of the color to fill. * @param g The green component of the color to fill. * @param b The blue component of the color to fill. * @param a The alpha component of the color to fill. */ fillColor(layer: Layer, r: number, g: number, b: number, a: number): void; /** * Stroke the current path with the image within the specified layer. The * image data will be tiled infinitely within the stroke. The current path * is implicitly closed. The current path can continue to be reused * for other operations (such as clip()) but a new path will be started * once a path drawing operation (path() or rect()) is used. * @param layer The layer to draw upon. * @param cap The line cap style. Can be "round", "square", or "butt". * @param join The line join style. Can be "round", "bevel", or "miter". * @param thickness The line thickness in pixels. * @param srcLayer The layer to use as a repeating pattern within the stroke. */ strokeLayer(layer: Layer, cap: Layer.LineCap, join: Layer.LineJoin, thickness: number, srcLayer: Layer): void; /** * Fills the current path with the image within the specified layer. The * image data will be tiled infinitely within the stroke. The current path * is implicitly closed. The current path can continue to be reused * for other operations (such as clip()) but a new path will be started * once a path drawing operation (path() or rect()) is used. * @param layer The layer to draw upon. * @param srcLayer The layer to use as a repeating pattern within the fill. */ fillLayer(layer: Layer, srcLayer: Layer): void; /** * Push current layer state onto stack. * @param layer The layer to draw upon. */ push(layer: Layer): void; /** * Pop layer state off stack. * @param layer The layer to draw upon. */ pop(layer: Layer): void; /** * Reset the layer, clearing the stack, the current path, and any transform matrix. * @param layer The layer to draw upon. */ reset(layer: Layer): void; /** * Sets the given affine transform (defined with six values from the transform's matrix). * @param layer The layer to modify. * @param a The first value in the affine transform's matrix. * @param b The second value in the affine transform's matrix. * @param c The third value in the affine transform's matrix. * @param d The fourth value in the affine transform's matrix. * @param e The fifth value in the affine transform's matrix. * @param f The sixth value in the affine transform's matrix. */ setTransform(layer: Layer, a: number, b: number, c: number, d: number, e: number, f: number): void; /** * Applies the given affine transform (defined with six values from the transform's matrix). * @param layer The layer to modify. * @param a The first value in the affine transform's matrix. * @param b The second value in the affine transform's matrix. * @param c The third value in the affine transform's matrix. * @param d The fourth value in the affine transform's matrix. * @param e The fifth value in the affine transform's matrix. * @param f The sixth value in the affine transform's matrix. */ transform(layer: Layer, a: number, b: number, c: number, d: number, e: number, f: number): void; /** * 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 layer The layer to modify. * @param mask The channel mask for future operations on this Layer. */ setChannelMask(layer: Layer, mask: number): void; /** * Sets the miter limit for stroke operations using the miter join. This * limit is the maximum ratio of the size of the miter join to the stroke * width. If this ratio is exceeded, the miter will not be drawn for that * joint of the path. * @param layer The layer to modify. * @param limit The miter limit for stroke operations using the miter join. */ setMeterLimit(layer: Layer, limit: number): void; /** * Removes the given layer container entirely, such that it is no longer * contained within its parent layer, if any. * @param layer The layer being removed from its parent. */ dispose(layer: Layer): void; /** * Applies the given affine transform (defined with six values from the * transform's matrix) to the given layer. * @param layer The layer being distorted. * @param a The first value in the affine transform's matrix. * @param b The second value in the affine transform's matrix. * @param c The third value in the affine transform's matrix. * @param d The fourth value in the affine transform's matrix. * @param e The fifth value in the affine transform's matrix. * @param f The sixth value in the affine transform's matrix. */ distort(layer: Layer, a: number, b: number, c: number, d: number, e: number, f: number): void; /** * Moves the upper-left corner of the given layer to the given X and Y * coordinate, sets the Z stacking order, and reparents the layer * to the given parent layer. * @param layer The layer being moved. * @param parent The parent to set. * @param x The X coordinate to move to. * @param y The Y coordinate to move to. * @param z The Z coordinate to move to. */ move(layer: VisibleLayer, parent: VisibleLayer, x: number, y: number, z: number): void; /** * Sets the opacity of the given layer to the given value, where 255 is * fully opaque and 0 is fully transparent. * @param layer The layer whose opacity should be set. * @param alpha The opacity to set. */ shade(layer: VisibleLayer, alpha: number): void; /** * Sets the scale of the client display element such that it renders at * a relatively smaller or larger size, without affecting the true * resolution of the display. * @param {Number} scale The scale to resize to, where 1.0 is normal size (1:1 scale). */ scale(scale: number): void; /** * Returns the scale of the display. */ getScale(): number; /** * Returns a canvas element containing the entire display, with all child * layers composited within. * @return A new canvas element containing a copy of the display. */ flatten(): void; /** * Returns the element which contains the Guacamole display. */ getElement(): HTMLElement; /** * Returns the width of this display. */ getWidth(): number; /** * Returns the height of this display. */ getHeight(): number; /** * Returns the default layer of this display. Each Guacamole display always * has at least one layer. Other layers can optionally be created within * this layer, but the default layer cannot be removed and is the absolute * ancestor of all other layers. * @return The default layer. */ getDefaultLayer(): VisibleLayer; /** * Returns the cursor layer of this display. Each Guacamole display contains * a layer for the image of the mouse cursor. This layer is a special case * and exists above all other layers, similar to the hardware mouse cursor. * @return The cursor layer. */ getCursorLayer(): VisibleLayer; /** * Creates a new layer. The new layer will be a direct child of the default * layer, but can be moved to be a child of any other layer. Layers returned * by this function are visible. * @return The newly-created layer. */ createLayer(): VisibleLayer; /** * Creates a new buffer. Buffers are invisible, off-screen surfaces. They * are implemented in the same manner as layers, but do not provide the * same nesting semantics. * @return The newly-created buffer. */ createBuffer(): Layer; /** * Flush all pending draw tasks, if possible, as a new frame. If the entire * frame is not ready, the flush will wait until all required tasks are unblocked. * @param callback The function to call when this frame is * flushed. This may happen immediately, or * later when blocked tasks become unblocked. */ flush(callback: () => void): void; /** * Sets the hotspot and image of the mouse cursor displayed within the * Guacamole display. * @param hotspotX The X coordinate of the cursor hotspot. * @param hotspotY The Y coordinate of the cursor hotspot. * @param layer The source layer containing the data which should be used as the mouse cursor image. * @param srcx The X coordinate of the upper-left corner of the * rectangle within the source layer's coordinate space to copy data from. * @param srcy The Y coordinate of the upper-left corner of the * rectangle within the source layer's coordinate space to copy data from. * @param srcw The width of the rectangle within the source layer's coordinate space to copy data from. * @param srch The height of the rectangle within the source layer's coordinate space to copy data from. */ setCursor(hotspotX: number, hotspotY: number, layer: Layer, srcx: number, srcy: number, srcw: number, srch: number): void; /** * Sets whether the software-rendered cursor is shown. This cursor differs * from the hardware cursor in that it is built into the Guacamole.Display, * and relies on its own Guacamole layer to render. * @param [shown=true] Whether to show the software cursor. */ showCursor(shown: boolean): void; /** * Sets the location of the local cursor to the given coordinates. For the * sake of responsiveness, this function performs its action immediately. * Cursor motion is not maintained within atomic frames. * @param x The X coordinate to move the cursor to. * @param y The Y coordinate to move the cursor to. */ moveCursor(x: number, y: number): void; /** * Changes the size of the given Layer to the given width and height. * Resizing is only attempted if the new size provided is actually different * from the current size. * @param layer The layer to resize. * @param width The new width. * @param height The new height. */ resize(layer: Layer, width: number, height: number): void; /** * Draws the specified image at the given coordinates. The image specified * must already be loaded. * @param {Guacamole.Layer} layer The layer to draw upon. * @param {Number} x The destination X coordinate. * @param {Number} y The destination Y coordinate. * @param {Image} image The image to draw. Note that this is an Image object - not a URL. */ drawImage(layer: Layer, x: number, y: number, image: HTMLImageElement): void; /** * Draws the image contained within the specified Blob at the given * coordinates. The Blob specified must already be populated with image data. * @param layer The layer to draw upon. * @param x The destination X coordinate. * @param y The destination Y coordinate. * @param blob The Blob containing the image data to draw. */ drawBlob(layer: Layer, x: number, y: number, blob: Blob): void; /** * Draws the image at the specified URL at the given coordinates. The image * will be loaded automatically, and this and any future operations will * wait for the image to finish loading. * @param layer The layer to draw upon. * @param x The destination X coordinate. * @param y The destination Y coordinate. * @param url The URL of the image to draw. */ draw(layer: Layer, x: number, y: number, url: string): void; /** * Plays the video at the specified URL within this layer. The video * will be loaded automatically, and this and any future operations will * wait for the video to finish loading. Future operations will not be * executed until the video finishes playing. * @param layer The layer to draw upon. * @param mimetype The mimetype of the video to play. * @param duration The duration of the video in milliseconds. * @param url The URL of the video to play. */ play(layer: Layer, mimetype: Mimetype, duration: number, url: string): void; /** * Transfer a rectangle of image data from one Layer to this Layer using the * specified transfer function. * @param srcLayer The Layer to copy image data from. * @param srcx The X coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcy The Y coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcw The width of the rectangle within the source Layer's * coordinate space to copy data from. * @param srch The height of the rectangle within the source * Layer's coordinate space to copy data from. * @param dstLayer The layer to draw upon. * @param x The destination X coordinate. * @param y The destination Y coordinate. * @param transferFunction The transfer function to use to * transfer data from source to destination. */ transfer( srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, dstLayer: Layer, x: number, y: number, transferFunction: Function ): void; /** * Put a rectangle of image data from one Layer to this Layer directly * without performing any alpha blending. Simply copy the data. * @param srcLayer The Layer to copy image data from. * @param srcx The X coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcy The Y coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcw The width of the rectangle within the source Layer's * coordinate space to copy data from. * @param srch The height of the rectangle within the source * Layer's coordinate space to copy data from. * @param dstLayer The layer to draw upon. * @param x The destination X coordinate. * @param y The destination Y coordinate. */ put(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, dstLayer: Layer, x: number, y: number): void; /** * Copy a rectangle of image data from one Layer to this Layer. This * operation will copy exactly the image data that will be drawn once all * operations of the source Layer that were pending at the time this * function was called are complete. This operation will not alter the * size of the source Layer even if its autosize property is set to true. * @param srcLayer The Layer to copy image data from. * @param srcx The X coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcy The Y coordinate of the upper-left corner of the * rectangle within the source Layer's coordinate space to copy data from. * @param srcw The width of the rectangle within the source Layer's * coordinate space to copy data from. * @param srch The height of the rectangle within the source * Layer's coordinate space to copy data from. * @param dstLayer The layer to draw upon. * @param x The destination X coordinate. * @param y The destination Y coordinate. */ copy(srcLayer: Layer, srcx: number, srcy: number, srcw: number, srch: number, dstLayer: Layer, x: number, y: number): void; /** * Add the specified line to the current path. * @param layer The layer to draw upon. * @param x The X coordinate of the endpoint of the line to draw. * @param y The Y coordinate of the endpoint of the line to draw. */ lineTo(layer: Layer, x: number, y: number): void; /** * Fired when the default layer (and thus the entire Guacamole display) is resized. * @event * @param width The new width of the Guacamole display. * @param height The new height of the Guacamole display. */ onresize: null | ((width: number, height: number) => void); /** * Fired whenever the local cursor image is changed. This can be used to * implement special handling of the client-side cursor, or to override * the default use of a software cursor layer. * @event * @param cursorCanvas The cursor image. * @param x The X-coordinate of the cursor hotspot. * @param y The Y-coordinate of the cursor hotspot. */ oncursor: null | ((cursorCanvas: HTMLCanvasElement, x: number, y: number) => void); } }