X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/0494b8d9b9bb03ab6c22b34dae81261e3cd7e3e6..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/fx/target/Sprite.js diff --git a/src/fx/target/Sprite.js b/src/fx/target/Sprite.js new file mode 100644 index 00000000..878a438a --- /dev/null +++ b/src/fx/target/Sprite.js @@ -0,0 +1,102 @@ +/** + * @class Ext.fx.target.Sprite + * @extends Ext.fx.target.Target + +This class represents a animation target for a {@link Ext.draw.Sprite}. In general this class will not be +created directly, the {@link Ext.draw.Sprite} will be passed to the animation and +and the appropriate target will be created. + + * @markdown + */ + +Ext.define('Ext.fx.target.Sprite', { + + /* Begin Definitions */ + + extend: 'Ext.fx.target.Target', + + /* End Definitions */ + + type: 'draw', + + getFromPrim: function(sprite, attr) { + var o; + if (attr == 'translate') { + o = { + x: sprite.attr.translation.x || 0, + y: sprite.attr.translation.y || 0 + }; + } + else if (attr == 'rotate') { + o = { + degrees: sprite.attr.rotation.degrees || 0, + x: sprite.attr.rotation.x, + y: sprite.attr.rotation.y + }; + } + else { + o = sprite.attr[attr]; + } + return o; + }, + + getAttr: function(attr, val) { + return [[this.target, val != undefined ? val : this.getFromPrim(this.target, attr)]]; + }, + + setAttr: function(targetData) { + var ln = targetData.length, + spriteArr = [], + attrs, attr, attrArr, attPtr, spritePtr, idx, value, i, j, x, y, ln2; + for (i = 0; i < ln; i++) { + attrs = targetData[i].attrs; + for (attr in attrs) { + attrArr = attrs[attr]; + ln2 = attrArr.length; + for (j = 0; j < ln2; j++) { + spritePtr = attrArr[j][0]; + attPtr = attrArr[j][1]; + if (attr === 'translate') { + value = { + x: attPtr.x, + y: attPtr.y + }; + } + else if (attr === 'rotate') { + x = attPtr.x; + if (isNaN(x)) { + x = null; + } + y = attPtr.y; + if (isNaN(y)) { + y = null; + } + value = { + degrees: attPtr.degrees, + x: x, + y: y + }; + } + else if (attr === 'width' || attr === 'height' || attr === 'x' || attr === 'y') { + value = parseFloat(attPtr); + } + else { + value = attPtr; + } + idx = Ext.Array.indexOf(spriteArr, spritePtr); + if (idx == -1) { + spriteArr.push([spritePtr, {}]); + idx = spriteArr.length - 1; + } + spriteArr[idx][1][attr] = value; + } + } + } + ln = spriteArr.length; + for (i = 0; i < ln; i++) { + spritePtr = spriteArr[i]; + spritePtr[0].setAttributes(spritePtr[1]); + } + this.target.redraw(); + } +});