davestewart
1/10/2013 - 7:07 PM

Function to optimize filters of elements on stage

Function to optimize filters of elements on stage

import flash.display.DisplayObject;
import flash.utils.describeType;

function optimize(element:DisplayObject):void
{
	function getFilterType(filter:*):String
	{
		var xml:XML = flash.utils.describeType(filter);
		return String(xml.@name).replace('flash.filters::', '');
	}
	
	if(element.filters)
	{
		var props:Array = ['blurX', 'blurY'];
		var filters:Array = [];
		
		element.filters.map(function(filter, index){
			props.map(function(property){
				if(filter.hasOwnProperty(property)){
					var oldValue:int = filter[property];
					var newValue:int = Math.pow( 2, Math.round( Math.log( oldValue ) / Math.log( 2 ) ) );
					if(oldValue != newValue)
					{
						var name = getFilterType(filter);
						filter[property] = newValue;
						trace('Updating "' +element.name+ ':' + name +'.' +property+ '": ' +oldValue+ ' -> ' +newValue);
					}
					
				}
			});
			filters.push(filter);
		});
		element.filters = filters;
	}
}

for(var i:int = 0; i < numChildren; i++)optimize(getChildAt(i));

/*
Updating "alien1:BlurFilter.blurX": 7 -> 8
Updating "alien1:BlurFilter.blurY": 7 -> 8
Updating "alien1:DropShadowFilter.blurX": 71 -> 64
Updating "alien1:DropShadowFilter.blurY": 71 -> 64
Updating "alien2:BlurFilter.blurX": 7 -> 8
Updating "alien2:BlurFilter.blurY": 7 -> 8
Updating "alien2:DropShadowFilter.blurX": 71 -> 64
Updating "alien2:DropShadowFilter.blurY": 71 -> 64
*/