/** McFilterMAp version 0.0.1 created by Todd Anderson http://www.custardbelly.com/blog This is release under a Creative Commons license. More information can be found here: http://creativecommons.org/licenses/by/2.5/ ---------------------------------------------------------------- @codehint Add, remove, retrieve, and replace filters held in a movieclip's filter array. @example //simple movieclip creation var mc:MovieClip = createEmptyMovieClip("mc", 0); //simple BlurFilter creation var blur:BlurFilter = new BlurFilter(10, 10, 1); //add it to mc instance McFilterMap.addFilter(mc, blur); //retrieve it from mc instance's filter array McFilterMap.getFilter(mc, "blur"); //retirieve it's index in mc instance's filter array McFilterMap.getFilterIndex(mc, "blur"); //simple BlurFilter creation var newBlur:BlurFilter = new BlurFilter(5, 5, 1); //update held reference to blur filter in mc instance's filter array McFilterMap.updateFilter(mc, "blur", newBlur); //change property of held filter in mc instance's filter array var blurX:Number = mcFilterMap.getFilterPropertyVal(mc, "blur", "blurX"); //remove the filter from the mc instance's filter array McFilterMap.removeFilter(mc, "blur"); */ import flash.filters.*; class McFilterMap { /** Static list of known in filters available in Flash 8 */ public static var FILTERS:Object = { bevel : BevelFilter, blur : BlurFilter, colorMatrix : ColorMatrixFilter, convol : ConvolutionFilter, displacement : DisplacementMapFilter, dropShadow : DropShadowFilter, glow : GlowFilter, gradBevel : GradientBevelFilter, gradGlow : GradientGlowFilter }; /** Returns filter reference from filter property array if available. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. @returns Number */ public static function getFilter(mc:MovieClip, type:String):BitmapFilter { var fInstance:BitmapFilter = FILTERS[type]; var filters:Array = mc.filters; var i:Number = filters.length; while(--i > -1) { var filter:BitmapFilter = filters[i]; if(filter instanceof fInstance) { return filter; } } return null; } /** Returns index of filter reference held in filter property array if available. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. @returns Number */ public static function getFilterIndex(mc:MovieClip, type:String):Number { var fInstance:BitmapFilter = FILTERS[type]; var filters:Array = mc.filters; var i:Number = filters.length; while(--i > -1) { var filter:BitmapFilter = filters[i]; if(filter instanceof fInstance) { return i; } } return null; } /** Returns value of property within held filter reference. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. ** Return Type left open. */ public static function getFilterPropertyVal(mc:MovieClip, type:String, prop:String) { var instance:BitmapFilter = getFilter(mc, type); return (instance != null) ? instance[prop] : null; } /** Adds filter to movieclip's filter array. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. */ public static function addFilter(mc:MovieClip, filter:BitmapFilter):Void { mc.filters = mc.filters.concat(filter); } /** Removes filter to movieclip's filter array. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. */ public static function removeFilter(mc:MovieClip, type:String):Void { var index:Number = getFilterIndex(mc, type); var temp:Array = mc.filters; temp.splice(index, 1); mc.filters = temp; } /** Replaces currently held instance of filter. @param mc : MovieClip MovieClip reference. @param type : String String property to check with static FILTERS. @param newFilter : BitmapFilter Filter inheriting from BitmapFilter. */ public static function updateFilter(mc:MovieClip, type:String, newFilter:BitmapFilter):Void { var index:Number = getFilterIndex(mc, type); if(index == null) { addFilter(mc, newFilter); return; } var temp:Array = mc.filters; var pre:Array = temp.slice(0, index); temp = pre.concat(newFilter); mc.filters = temp.concat(mc.filters.slice(index + 1, mc.filters.length - 1)); delete temp; } }