Source: core/Sizes.js

/**
 * @author Inateno / http://inateno.com / http://dreamirl.com
 */

/**
 * @constructor Sizes
 * @class it's a simple class to contain Sizes with scaling values and methods
 * @param {Int} width
 * @param {Int} height
 * @param {Float} scaleX
 * @param {Float} scaleY
 * @example var size = new DE.Sizes( 500, 455, 1.2, 1.2 );
 */
define( [ 'DE.CONFIG' ],
function( CONFIG )
{
  function Sizes( width, height, scaleX, scaleY, parent )
  {
    if ( !width || !height )
      throw new Error( "Sizes :: You have to pass a width and height when instantiate -- see the doc" );
    this.width  = width;
    this.height = height;
    this.scaleX = scaleX || 1;
    this.scaleY = scaleY || 1;
    this.parent = parent;
    
    /**
     * change scales, will remove centering then apply again (if there is a parent)
     * @public
     * @memberOf Sizes
     * @param {Float} val valX or valX and Y if no Y given
     * @param {Float} [valY]
     * @returns {Sizes} this current instance
     */
    this.setScale = function( val, valY )
    {
      this._uncenter();
      if ( val.x && val.y )
      {
        this.scaleX = val.x;
        this.scaleY = val.y;
      }
      else if ( !valY )
      {
        this.scaleX = val;
        this.scaleY = val;
      }
      else
      {
        this.scaleX = val;
        this.scaleY = valY;
      }
      this._center();
      return this;
    }
    
    /**
     * center the parent localPosition according to these sizes
     * @protected
     * @memberOf Sizes
     * @returns {Sizes} this current instance
     */
    this._center = function()
    {
      if ( this.parent )
      {
        this.parent.localPosition.x -= ( this.width * this.scaleX * 0.5 ) >> 0;
        this.parent.localPosition.y -= ( this.height * this.scaleY * 0.5 ) >> 0;
      }
      return this;
    }
    
    /**
     * center the parent localPosition according to these sizes
     * @protected
     * @memberOf Sizes
     * @returns {Sizes} this current instance
     */
    this._uncenter = function()
    {
      if ( this.parent )
      {
        this.parent.localPosition.x += ( this.width * this.scaleX * 0.5 ) >> 0;
        this.parent.localPosition.y += ( this.height * this.scaleY * 0.5 ) >> 0;
      }
      return this;
    }
    
    /** TODO **/
    /**
     * <b>Work In Progress, don't use it</b><br>
     * scaleTo provide a middleware to make scale animation
     * @protected
     * @memberOf Sizes
     * @param {Vector2} val value to scale X and Y
     * @param {Int} time in milliseconds
     * @returns {Sizes} this current instance
     */
    this.scaleTo = function( val, time )
    {
      this._uncenter();
      if ( val.x && val.y )
      {
        this.scaleX = val.x;
        this.scaleY = val.y;
      }
      else
      {
        this.scaleX = val;
        this.scaleY = val;
      }
      this._center();
      return this;
    }
    
    
    /** TODO **/
    /**
     * <b>Work In Progress, don't use it</b><br>
     * scaleXTo provide a middleware to make scaleX animation
     * @protected
     * @memberOf Sizes
     * @param {Vector2} val value scale X
     * @param {Int} time in milliseconds
     * @returns {Sizes} this current instance
     */
    this.scaleXTo = function( val, time )
    {
      this._uncenter();
      this.scaleX = valX;
      this._center();
      return this;
    }
    
    /** TODO **/
    /**
     * <b>Work In Progress, don't use it</b><br>
     * scaleYTo provide a middleware to make scaleY animation
     * @protected
     * @memberOf Sizes
     * @param {Float} val value scale Y
     * @param {Int} time in milliseconds
     * @returns {Sizes} this current instance
     */
    this.scaleYTo = function( val )
    {
      this._uncenter();
      this.scaleY = valY;
      this._center();
      return this;
    }
    
    /**
     * set current sizes to given sizes,
     * if you provide only first as Int, will make a boxed sizes
     * @protected
     * @memberOf Sizes
     * @param {Vector2} first sizes values X and Y
     * @param {Int} [height] height value if first corresponding to width
     * @returns {Sizes} this current instance
     */
    this.setSizes = function( first, height )
    {
      this._uncenter();
      if ( first.width )
      {
        this.width = first.width;
        this.height= first.height || this.height;
      }
      else if ( first && !height )
      {
        this.width = first;
        this.height= first;
      }
      else
      {
        this.width = first;
        this.height= height;
      }
      this._center();
      return this;
    }
  }
  Sizes.prototype.DEName = "Sizes";
  
  CONFIG.debug.log( "Sizes loaded", 3 );
  return Sizes;
} );
Dreamirl Copyright © 2014 And the contributors
Documentation generated by JSDoc 3.2.2 on Thu Apr 24 2014 11:56:40 GMT+0200 (CEST) using the DocStrap template.