/**
 * @class Ext.util.translatable.Abstract
 * @extend Ext.Evented
 * @mixin Ext.mixin.Factoryable
 * @private
 *
 * The abstract class. Sub-classes are expected, at the very least, to implement translation logics inside
 * the 'translate' method
 */
 
/**
 * @event animationstart
 * Fires whenever the animation is started
 * @param {Ext.util.translatable.Abstract} this
 * @param {Number} x The current translation on the x axis
 * @param {Number} y The current translation on the y axis
 */
 
/**
 * @event animationframe
 * Fires for each animation frame
 * @param {Ext.util.translatable.Abstract} this
 * @param {Number} x The new translation on the x axis
 * @param {Number} y The new translation on the y axis
 */
 
/**
 * @event animationend
 * Fires whenever the animation is ended
 * @param {Ext.util.translatable.Abstract} this
 * @param {Number} x The current translation on the x axis
 * @param {Number} y The current translation on the y axis
 */
 
/**
 * @property {Number} [x=0]
 * @private
 * The last translated x value
 */
 
/**
 * @property {Number} [y=0]
 * @private
 * The last translated y value
 */
 
/**
 * @method getPosition
 * Returns the translatable object's current position.
 * @return {Object} position An object with x and y properties
 */