StructureJS
0.15.2A class based utility library for building modular and scalable web platform applications. Features opt-in classes and utilities which provide a solid foundation and toolset to build your next project.
import EventDispatcher from '../event/EventDispatcher';
/**
* The {{#crossLink "DisplayObject"}}{{/crossLink}} class is the base class for all objects that can be placed on the display list.
*
* @class DisplayObject
* @extends EventDispatcher
* @module StructureJS
* @submodule view
* @requires Extend
* @requires EventDispatcher
* @constructor
* @author Robert S. (www.codeBelt.com)
*/
class DisplayObject extends EventDispatcher
{
/**
* The Stage of the display object.
*
* @property stage
* @type {any}
* @public
*/
public stage:any = null;
/**
* The CanvasRenderingContext2D interface provides the 2D rendering context for the drawing surface of a canvas element.
* This property is only used with the canvas specific display objects.
*
* @property ctx
* @type {CanvasRenderingContext2D}
* @public
*/
public ctx:CanvasRenderingContext2D = null;
/**
* A property providing access to the x position.
*
* @property x
* @type {number}
* @default 0
* @public
*/
public x:number = 0;
/**
* A property providing access to the y position.
*
* @property y
* @type {number}
* @default 0
* @public
*/
public y:number = 0;
/**
* Indicates the width of the display object, in pixels.
*
* @property width
* @type {number}
* @default 0
* @public
*/
public width:number = 0;
/**
* Indicates the height of the display object, in pixels.
*
* @property height
* @type {number}
* @default 0
* @public
*/
public height:number = 0;
/**
* A property providing access to the unscaledWidth.
*
* @property unscaledWidth
* @type {number}
* @default 100
* @public
*/
public unscaledWidth:number = 100;
/**
* A property providing access to the unscaledHeight.
*
* @property unscaledHeight
* @type {number}
* @default 100
* @public
*/
public unscaledHeight:number = 100;
/**
* Indicates the horizontal scale (percentage) of the object as applied from the registration point.
*
* @property scaleX
* @type {number}
* @public
*/
public scaleX:number = 1;
/**
* Indicates the vertical scale (percentage) of an object as applied from the registration point of the object.
*
* @property scaleY
* @type {number}
* @public
*/
public scaleY:number = 1;
/**
* Indicates the rotation of the DisplayObject instance, in degrees, from its original orientation.
*
* @property rotation
* @type {number}
* @public
*/
public rotation:number = 0;
/**
* Indicates the alpha transparency value of the object specified.
*
* @property alpha
* @type {number}
* @public
*/
public alpha:number = 1;
/**
* Whether or not the display object is visible.
*
* @property visible
* @type {boolean}
* @public
*/
public visible:boolean = true;
/**
* Specifies whether this object receives mouse
*
* @property mouseEnabled
* @type {boolean}
* @public
*/
public mouseEnabled:boolean = false;
/**
* A Boolean value that indicates whether the pointing hand (hand cursor) appears when the pointer rolls over a display object.
*
* @property useHandCursor
* @type {boolean}
* @public
*/
public useHandCursor:boolean = false;
/**
* The isCreated property is used to keep track if it is the first time this DisplayObject is created.
*
* @property isCreated
* @type {boolean}
* @default false
* @public
*/
public isCreated:boolean = false;
/**
* Indicates the instance name of the DisplayObject.
*
* @property name
* @type {string}
* @public
*/
public name:string = null;
constructor()
{
super();
}
/**
* The create function is intended to provide a consistent place for the creation or initializing the view.
* It will automatically be called the first time that the view is added to a DisplayObjectContainer.
* It is critical that all subclasses call the super for this function in their overridden methods.
*
* @method create
* @returns {DisplayObject} Returns an instance of itself.
* @public
* @chainable
*/
public create():any
{
this.isCreated = true;
return this;
}
/**
* The layout method provides a common function to handle updating objects in the view.
*
* @method layout
* @param ...rest {Array<any>}
* @returns {DisplayObject} Returns an instance of itself.
* @public
* @chainable
*/
public layout(...rest:Array<any>):any
{
return this;
}
/**
* The setSize method sets the bounds within which the containing DisplayObject would like that component to lay itself out.
*
* @param unscaledWidth {number} The width within which the component should lay itself out.
* @param unscaledHeight {number} The height within which the component should lay itself out.
* @returns {DisplayObject} Returns an instance of itself.
* @public
* @chainable
*/
public setSize(unscaledWidth:number, unscaledHeight:number):any
{
this.unscaledWidth = unscaledWidth;
this.unscaledHeight = unscaledHeight;
return this;
}
protected _readerStart():void
{
this.ctx.save();
}
public renderCanvas():boolean
{
if (this.ctx === null || this.alpha <= 0 || this.visible === false) return false;
this._readerStart();
this.ctx.globalAlpha = this.alpha;
this.layout();
this._renderEnd();
}
protected _renderEnd():void
{
this.ctx.restore();
}
}
export default DisplayObject;