Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / Sprite.html
index eb3b5b5..3e1d360 100644 (file)
-<!DOCTYPE html><html><head><title>Sencha Documentation Project</title><link rel="stylesheet" href="../reset.css" type="text/css"><link rel="stylesheet" href="../prettify.css" type="text/css"><link rel="stylesheet" href="../prettify_sa.css" type="text/css"><script type="text/javascript" src="../prettify.js"></script></head><body onload="prettyPrint()"><pre class="prettyprint"><pre><span id='Ext-draw.Sprite'>/**
-</span> * @class Ext.draw.Sprite
- * @extends Object
+<!DOCTYPE html>
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+  <title>The source code</title>
+  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+  <style type="text/css">
+    .highlight { display: block; background-color: #ddd; }
+  </style>
+  <script type="text/javascript">
+    function highlight() {
+      document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
+    }
+  </script>
+</head>
+<body onload="prettyPrint(); highlight();">
+  <pre class="prettyprint lang-js"><span id='Ext-draw-Sprite'>/**
+</span> * A Sprite is an object rendered in a Drawing surface.
  *
- * A Sprite is an object rendered in a Drawing surface. There are different options and types of sprites.
- * The configuration of a Sprite is an object with the following properties:
+ * # Translation
  *
- * - **type** - (String) The type of the sprite. Possible options are 'circle', 'path', 'rect', 'text', 'square'. 
- * - **width** - (Number) Used in rectangle sprites, the width of the rectangle.
- * - **height** - (Number) Used in rectangle sprites, the height of the rectangle.
- * - **size** - (Number) Used in square sprites, the dimension of the square.
- * - **radius** - (Number) Used in circle sprites, the radius of the circle.
- * - **x** - (Number) The position along the x-axis.
- * - **y** - (Number) The position along the y-axis.
- * - **path** - (Array) Used in path sprites, the path of the sprite written in SVG-like path syntax.
- * - **opacity** - (Number) The opacity of the sprite.
- * - **fill** - (String) The fill color.
- * - **stroke** - (String) The stroke color.
- * - **stroke-width** - (Number) The width of the stroke.
- * - **font** - (String) Used with text type sprites. The full font description. Uses the same syntax as the CSS `font` parameter.
- * - **text** - (String) Used with text type sprites. The text itself.
- * 
- * Additionally there are three transform objects that can be set with `setAttributes` which are `translate`, `rotate` and
- * `scale`.
- * 
  * For translate, the configuration object contains x and y attributes that indicate where to
  * translate the object. For example:
- * 
+ *
  *     sprite.setAttributes({
  *       translate: {
  *        x: 10,
  *        y: 10
  *       }
  *     }, true);
- * 
+ *
+ *
+ * # Rotation
+ *
  * For rotation, the configuration object contains x and y attributes for the center of the rotation (which are optional),
  * and a `degrees` attribute that specifies the rotation in degrees. For example:
- * 
+ *
  *     sprite.setAttributes({
  *       rotate: {
  *        degrees: 90
  *       }
  *     }, true);
- * 
+ *
+ * That example will create a 90 degrees rotation using the centroid of the Sprite as center of rotation, whereas:
+ *
+ *     sprite.setAttributes({
+ *       rotate: {
+ *        x: 0,
+ *        y: 0,
+ *        degrees: 90
+ *       }
+ *     }, true);
+ *
+ * will create a rotation around the `(0, 0)` axis.
+ *
+ *
+ * # Scaling
+ *
  * For scaling, the configuration object contains x and y attributes for the x-axis and y-axis scaling. For example:
- * 
+ *
+ *     sprite.setAttributes({
+ *       scale: {
+ *        x: 10,
+ *        y: 3
+ *       }
+ *     }, true);
+ *
+ * You can also specify the center of scaling by adding `cx` and `cy` as properties:
+ *
  *     sprite.setAttributes({
  *       scale: {
+ *        cx: 0,
+ *        cy: 0,
  *        x: 10,
  *        y: 3
  *       }
  *     }, true);
  *
+ * That last example will scale a sprite taking as centers of scaling the `(0, 0)` coordinate.
+ *
+ *
+ * # Creating and adding a Sprite to a Surface
+ *
  * Sprites can be created with a reference to a {@link Ext.draw.Surface}
  *
- *      var drawComponent = Ext.create('Ext.draw.Component', options here...);
+ *     var drawComponent = Ext.create('Ext.draw.Component', options here...);
  *
- *      var sprite = Ext.create('Ext.draw.Sprite', {
- *          type: 'circle',
- *          fill: '#ff0',
- *          surface: drawComponent.surface,
- *          radius: 5
- *      });
+ *     var sprite = Ext.create('Ext.draw.Sprite', {
+ *         type: 'circle',
+ *         fill: '#ff0',
+ *         surface: drawComponent.surface,
+ *         radius: 5
+ *     });
  *
  * Sprites can also be added to the surface as a configuration object:
  *
- *      var sprite = drawComponent.surface.add({
- *          type: 'circle',
- *          fill: '#ff0',
- *          radius: 5
- *      });
+ *     var sprite = drawComponent.surface.add({
+ *         type: 'circle',
+ *         fill: '#ff0',
+ *         radius: 5
+ *     });
  *
  * In order to properly apply properties and render the sprite we have to
  * `show` the sprite setting the option `redraw` to `true`:
  *
- *      sprite.show(true);
+ *     sprite.show(true);
  *
  * The constructor configuration object of the Sprite can also be used and passed into the {@link Ext.draw.Surface}
  * add method to append a new sprite to the canvas. For example:
  *     });
  */
 Ext.define('Ext.draw.Sprite', {
+
     /* Begin Definitions */
 
     mixins: {
@@ -98,6 +130,71 @@ Ext.define('Ext.draw.Sprite', {
 
     /* End Definitions */
 
+<span id='Ext-draw-Sprite-cfg-type'>    /**
+</span>     * @cfg {String} type The type of the sprite. Possible options are 'circle', 'path', 'rect', 'text', 'square', 'image'
+     */
+
+<span id='Ext-draw-Sprite-cfg-width'>    /**
+</span>     * @cfg {Number} width Used in rectangle sprites, the width of the rectangle
+     */
+
+<span id='Ext-draw-Sprite-cfg-height'>    /**
+</span>     * @cfg {Number} height Used in rectangle sprites, the height of the rectangle
+     */
+
+<span id='Ext-draw-Sprite-cfg-size'>    /**
+</span>     * @cfg {Number} size Used in square sprites, the dimension of the square
+     */
+
+<span id='Ext-draw-Sprite-cfg-radius'>    /**
+</span>     * @cfg {Number} radius Used in circle sprites, the radius of the circle
+     */
+
+<span id='Ext-draw-Sprite-cfg-x'>    /**
+</span>     * @cfg {Number} x The position along the x-axis
+     */
+
+<span id='Ext-draw-Sprite-cfg-y'>    /**
+</span>     * @cfg {Number} y The position along the y-axis
+     */
+
+<span id='Ext-draw-Sprite-cfg-path'>    /**
+</span>     * @cfg {Array} path Used in path sprites, the path of the sprite written in SVG-like path syntax
+     */
+
+<span id='Ext-draw-Sprite-cfg-opacity'>    /**
+</span>     * @cfg {Number} opacity The opacity of the sprite
+     */
+
+<span id='Ext-draw-Sprite-cfg-fill'>    /**
+</span>     * @cfg {String} fill The fill color
+     */
+
+<span id='Ext-draw-Sprite-cfg-stroke'>    /**
+</span>     * @cfg {String} stroke The stroke color
+     */
+
+<span id='Ext-draw-Sprite-cfg-stroke'>    /**
+</span>     * @cfg {Number} stroke-width The width of the stroke
+     */
+
+<span id='Ext-draw-Sprite-cfg-font'>    /**
+</span>     * @cfg {String} font Used with text type sprites. The full font description. Uses the same syntax as the CSS font parameter
+     */
+
+<span id='Ext-draw-Sprite-cfg-text'>    /**
+</span>     * @cfg {String} text Used with text type sprites. The text itself
+     */
+
+<span id='Ext-draw-Sprite-cfg-group'>    /**
+</span>     * @cfg {String/String[]} group The group that this sprite belongs to, or an array of groups. Only relevant when added to a
+     * {@link Ext.draw.Surface}
+     */
+
+<span id='Ext-draw-Sprite-cfg-draggable'>    /**
+</span>     * @cfg {Boolean} draggable True to make the sprite draggable.
+     */
+
     dirty: false,
     dirtyHidden: false,
     dirtyTransform: false,
@@ -175,26 +272,27 @@ Ext.define('Ext.draw.Sprite', {
         me.mixins.observable.constructor.apply(this, arguments);
     },
 
-<span id='Ext-draw.Sprite-property-dd'>    /**
-</span>     * &lt;p&gt;If this Sprite is configured {@link #draggable}, this property will contain
-     * an instance of {@link Ext.dd.DragSource} which handles dragging the Sprite.&lt;/p&gt;
+<span id='Ext-draw-Sprite-property-dd'>    /**
+</span>     * @property {Ext.dd.DragSource} dd
+     * If this Sprite is configured {@link #draggable}, this property will contain
+     * an instance of {@link Ext.dd.DragSource} which handles dragging the Sprite.
+     *
      * The developer must provide implementations of the abstract methods of {@link Ext.dd.DragSource}
      * in order to supply behaviour for each stage of the drag/drop process. See {@link #draggable}.
-     * @type Ext.dd.DragSource.
-     * @property dd
      */
+
     initDraggable: function() {
         var me = this;
         me.draggable = true;
         //create element if it doesn't exist.
         if (!me.el) {
-            me.surface.createSprite(me);
+            me.surface.createSpriteElement(me);
         }
         me.dd = Ext.create('Ext.draw.SpriteDD', me, Ext.isBoolean(me.draggable) ? null : me.draggable);
         me.on('beforedestroy', me.dd.destroy, me.dd);
     },
 
-<span id='Ext-draw.Sprite-method-setAttributes'>    /**
+<span id='Ext-draw-Sprite-method-setAttributes'>    /**
 </span>     * Change the attributes of the sprite.
      * @param {Object} attrs attributes to be changed on the sprite.
      * @param {Boolean} redraw Flag to immediatly draw the change.
@@ -211,6 +309,7 @@ Ext.define('Ext.draw.Sprite', {
             spriteAttrs = me.attr,
             attr, i, translate, translation, rotate, rotation, scale, scaling;
 
+        attrs = Ext.apply({}, attrs);
         for (attr in custom) {
             if (attrs.hasOwnProperty(attr) &amp;&amp; typeof custom[attr] == &quot;function&quot;) {
                 Ext.apply(attrs, custom[attr].apply(me, [].concat(attrs[attr])));
@@ -259,7 +358,7 @@ Ext.define('Ext.draw.Sprite', {
         rotate = attrs.rotate;
         rotation = spriteAttrs.rotation;
         if (rotate) {
-            if ((rotate.x &amp;&amp; rotate.x !== rotation.x) || 
+            if ((rotate.x &amp;&amp; rotate.x !== rotation.x) ||
                 (rotate.y &amp;&amp; rotate.y !== rotation.y) ||
                 (rotate.degrees &amp;&amp; rotate.degrees !== rotation.degrees)) {
                 Ext.apply(rotation, rotate);
@@ -271,7 +370,7 @@ Ext.define('Ext.draw.Sprite', {
         scale = attrs.scale;
         scaling = spriteAttrs.scaling;
         if (scale) {
-            if ((scale.x &amp;&amp; scale.x !== scaling.x) || 
+            if ((scale.x &amp;&amp; scale.x !== scaling.x) ||
                 (scale.y &amp;&amp; scale.y !== scaling.y) ||
                 (scale.cx &amp;&amp; scale.cx !== scaling.cx) ||
                 (scale.cy &amp;&amp; scale.cy !== scaling.cy)) {
@@ -290,20 +389,21 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-getBBox'>    /**
-</span>     * Retrieve the bounding box of the sprite. This will be returned as an object with x, y, width, and height properties.
+<span id='Ext-draw-Sprite-method-getBBox'>    /**
+</span>     * Retrieves the bounding box of the sprite.
+     * This will be returned as an object with x, y, width, and height properties.
      * @return {Object} bbox
      */
     getBBox: function() {
         return this.surface.getBBox(this);
     },
-    
+
     setText: function(text) {
         return this.surface.setText(this, text);
     },
 
-<span id='Ext-draw.Sprite-method-hide'>    /**
-</span>     * Hide the sprite.
+<span id='Ext-draw-Sprite-method-hide'>    /**
+</span>     * Hides the sprite.
      * @param {Boolean} redraw Flag to immediatly draw the change.
      * @return {Ext.draw.Sprite} this
      */
@@ -314,8 +414,8 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-show'>    /**
-</span>     * Show the sprite.
+<span id='Ext-draw-Sprite-method-show'>    /**
+</span>     * Shows the sprite.
      * @param {Boolean} redraw Flag to immediatly draw the change.
      * @return {Ext.draw.Sprite} this
      */
@@ -326,8 +426,8 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-remove'>    /**
-</span>     * Remove the sprite.
+<span id='Ext-draw-Sprite-method-remove'>    /**
+</span>     * Removes the sprite.
      */
     remove: function() {
         if (this.surface) {
@@ -341,7 +441,7 @@ Ext.define('Ext.draw.Sprite', {
         this.surface.onRemove(this);
     },
 
-<span id='Ext-draw.Sprite-method-destroy'>    /**
+<span id='Ext-draw-Sprite-method-destroy'>    /**
 </span>     * Removes the sprite and clears all listeners.
      */
     destroy: function() {
@@ -354,8 +454,8 @@ Ext.define('Ext.draw.Sprite', {
         }
     },
 
-<span id='Ext-draw.Sprite-method-redraw'>    /**
-</span>     * Redraw the sprite.
+<span id='Ext-draw-Sprite-method-redraw'>    /**
+</span>     * Redraws the sprite.
      * @return {Ext.draw.Sprite} this
      */
     redraw: function() {
@@ -363,7 +463,7 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-setStyle'>    /**
+<span id='Ext-draw-Sprite-method-setStyle'>    /**
 </span>     * Wrapper for setting style properties, also takes single object parameter of multiple styles.
      * @param {String/Object} property The style property to be set, or an object of multiple styles.
      * @param {String} value (optional) The value to apply to the given property, or null if an object was passed.
@@ -374,10 +474,10 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-addCls'>    /**
+<span id='Ext-draw-Sprite-method-addCls'>    /**
 </span>     * Adds one or more CSS classes to the element. Duplicate classes are automatically filtered out.  Note this method
      * is severly limited in VML.
-     * @param {String/Array} className The CSS class to add, or an array of classes
+     * @param {String/String[]} className The CSS class to add, or an array of classes
      * @return {Ext.draw.Sprite} this
      */
     addCls: function(obj) {
@@ -385,9 +485,9 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     },
 
-<span id='Ext-draw.Sprite-method-removeCls'>    /**
+<span id='Ext-draw-Sprite-method-removeCls'>    /**
 </span>     * Removes one or more CSS classes from the element.
-     * @param {String/Array} className The CSS class to remove, or an array of classes.  Note this method
+     * @param {String/String[]} className The CSS class to remove, or an array of classes.  Note this method
      * is severly limited in VML.
      * @return {Ext.draw.Sprite} this
      */
@@ -396,4 +496,6 @@ Ext.define('Ext.draw.Sprite', {
         return this;
     }
 });
-</pre></pre></body></html>
\ No newline at end of file
+</pre>
+</body>
+</html>