/**
* VERSION: 2.03
* DATE: 10/22/2009
* AS2
* UPDATES AND DOCUMENTATION AT: http://www.TweenMax.com
**/
import com.greensock.*;
import com.greensock.core.*;
import com.greensock.plugins.*;
import flash.filters.*;
/**
* Base class for all filter plugins (like blurFilter, colorMatrixFilter, glowFilter, etc.). Handles common routines.
* There is no reason to use this class directly.
*
* Copyright 2011, GreenSock. All rights reserved. This work is subject to the terms in http://www.greensock.com/terms_of_use.html or for corporate Club GreenSock members, the software agreement that was issued with the corporate membership.
*
* @author Jack Doyle, jack@greensock.com
*/
class com.greensock.plugins.FilterPlugin extends TweenPlugin {
/** @private **/
public static var VERSION:Number = 2.03;
/** @private **/
public static var API:Number = 1.0; //If the API/Framework for plugins changes in the future, this number helps determine compatibility
/** @private **/
private var _target:Object;
/** @private **/
private var _type:Object;
/** @private **/
private var _filter:BitmapFilter;
/** @private **/
private var _index:Number;
/** @private **/
private var _remove:Boolean;
/** @private **/
public function FilterPlugin() {
super();
}
/** @private **/
private function initFilter(props:Object, defaultFilter:BitmapFilter, propNames:Array):Void {
var filters:Array = _target.filters, p:String, i:Number, colorTween:HexColorsPlugin;
var extras:Object = (props instanceof BitmapFilter) ? {} : props;
_index = -1;
if (extras.index != undefined) {
_index = extras.index;
} else {
i = filters.length;
while (i--) {
if (filters[i] instanceof _type) {
_index = i;
break;
}
}
}
if (_index == -1 || filters[_index] == undefined || extras.addFilter == true) {
_index = (extras.index != undefined) ? extras.index : filters.length;
filters[_index] = defaultFilter;
_target.filters = filters;
}
_filter = filters[_index];
if (extras.remove == true) {
_remove = true;
this.onComplete = onCompleteTween;
}
i = propNames.length;
while (i--) {
p = propNames[i];
if (props[p] != undefined && _filter[p] != props[p]) {
if (p == "color" || p == "highlightColor" || p == "shadowColor") {
colorTween = new HexColorsPlugin();
colorTween.initColor(_filter, p, _filter[p], props[p]);
_tweens[_tweens.length] = new PropTween(colorTween, "changeFactor", 0, 1, this.propName);
} else if (p == "quality" || p == "inner" || p == "knockout" || p == "hideObject") {
_filter[p] = props[p];
} else {
addTween(_filter, p, _filter[p], props[p], this.propName);
}
}
}
}
/** @private **/
public function onCompleteTween():Void {
if (_remove) {
var filters:Array = _target.filters;
if (!(filters[_index] instanceof _type)) { //a filter may have been added or removed since the tween began, changing the index.
var i:Number = filters.length;
while (i--) {
if (filters[i] instanceof _type) {
filters.splice(i, 1);
break;
}
}
} else {
filters.splice(_index, 1);
}
_target.filters = filters;
}
}
/** @private **/
public function set changeFactor(n:Number):Void {
var i:Number = _tweens.length, pt:PropTween, filters:Array = _target.filters;
while (i--) {
pt = _tweens[i];
pt.target[pt.property] = pt.start + (pt.change * n);
}
if (!(filters[_index] instanceof _type)) { //a filter may have been added or removed since the tween began, changing the index.
i = _index = filters.length; //default (in case it was removed)
while (i--) {
if (filters[i] instanceof _type) {
_index = i;
break;
}
}
}
filters[_index] = _filter;
_target.filters = filters;
}
}