package pkg{ import mx.controls.Image; import mx.core.UIComponent; import mx.core.Application; import mx.events.FlexEvent; import mx.core.mx_internal; import flash.filters.*; import flash.display.Loader; import flash.display.Bitmap; import flash.events.Event; import flash.display.MovieClip; import flash.events.ProgressEvent; import flash.system.LoaderContext; import caurina.transitions.*; use namespace mx_internal; public class SmoothImageLoader extends Image { [Embed(source="../skin/imagepreloader.swf", symbol="Preloader")] private var FlashPreloaderSymbol:Class; private var clip:MovieClip = null; public function SmoothImageLoader():void { super(); addEventListener(Event.OPEN,onOpen); addEventListener(Event.COMPLETE,onComplete); } /** * @private */ override mx_internal function contentLoaderInfo_completeEventHandler(event:Event):void { var smoothLoader:Loader = event.target.loader as Loader; var smoothImage:Bitmap = smoothLoader.content as Bitmap; smoothImage.smoothing = true; super.contentLoaderInfo_completeEventHandler(event); } protected function onComplete(event:Event):void { removeChild(clip); event.target.filters = [getBitmapFilter()]; updateDisplayList(event.target.width, event.target.height); onResize(event); addEventListener(Event.RESIZE, onResize); } protected function onOpen(event:Event):void { clip = new FlashPreloaderSymbol(); addChild(clip); clip.alpha = 0; Tweener.addTween(clip, {alpha:100, time:.1, delay:.05, transition:"linear"}); clip.x = event.target.x + (event.target.width/2); clip.y = event.target.y + (event.target.height/2); } private function getBitmapFilter():DropShadowFilter { var distance:Number = 0; var angle:Number = 90; var color:Number = 0x000000; var alpha:Number = 1; var blurX:Number = 12; var blurY:Number = 12; var strength:Number = 0.5; var quality:Number = BitmapFilterQuality.LOW; var inner:Boolean = false; var knockout:Boolean = false; return new DropShadowFilter(distance, angle, color, alpha, blurX, blurY, strength, quality, inner, knockout); } protected function onResize(event:Event):void { var myWidth:Number = event.target.content.width; var myHeight:Number = event.target.content.height; if ((myWidth > Application.application.width) || (myHeight > Application.application.height)) { event.target.scaleContent = true; } else { event.target.scaleContent = false; } } } }