1  
     8  
     9   import com.sekati.display.IBitmapImageClip;
    10   import com.sekati.display.BaseClip;
    11   import com.sekati.utils.Delegate;
    12   import com.sekati.utils.MovieClipUtils;
    13   import com.sekati.except.FatalException;
    14   import flash.display.BitmapData;
    15  
    16  
    35  class com.sekati.display.BitmapImageClip extends BaseClip implements IBitmapImageClip {
    36  	
    37  	public var img:MovieClip;
    38  	public var bmp:BitmapData;
    39  	private var _uri:String;
    40  	private var _smooth:Boolean;
    41  	private var _progressCb:Function;
    42  	private var _initCb:Function;
    43  	private var _errorCb:Function;
    44  	private var _loader:MovieClipLoader;
    45  	private var _tmp:MovieClip;
    46  	
    47  	
    50  	public function BitmapImageClip() {
    51  		super();
    52  		_loader = new MovieClipLoader();
    53  		_this.onLoadInit = Delegate.create(_this, _onInit);
    54  		_this.onLoadError = Delegate.create(_this, _onError);
    55  		_this.onLoadProgress = Delegate.create(_this, _onProgress);
    56  		_loader.addListener(_this);
    57  	}
    58  	
    59  	
    68  	public function load(uri:String, isSmoothed:Boolean, onInit:Function, onProgress:Function, onError:Function):Void {
    69  		_uri = uri;
    70  		_smooth = isSmoothed;
    71  		_progressCb = onProgress;
    72  		_initCb = onInit;
    73  		_errorCb = onError;
    74  		createContainers();
    75  		_loader.loadClip(_uri, _tmp);	
    76  	}
    77  	
    78  	
    82  	public function unload():Void {
    83  		_loader.unloadClip(img);
    84  		bmp.dispose();
    85  		MovieClipUtils.rmClip(_tmp); 
    86  		MovieClipUtils.rmClip(img);
    87  	}
    88  
    89  	
    93  	private function createContainers():Void {
    94  		if (_tmp) MovieClipUtils.rmClip(_tmp); 
    95  		if (img) MovieClipUtils.rmClip(img);
    96  		if (bmp) bmp.dispose();
    97  		img = _this.createEmptyMovieClip("img", _this.getNextHighestDepth());
    98  		_tmp = _this.createEmptyMovieClip("_tmp", _this.getNextHighestDepth());
    99  		
   100  		_tmp._visible = false;
   101  		_this._alpha = 0;
   102  	}
   103  	
   104  	
   108  	private function clearCallbacks():Void {
   109  		_initCb = undefined;
   110  		_progressCb = undefined;
   111  		_errorCb = undefined;		
   112  	}
   113  	
   114  	
   119  	private function _onInit():Void {
   120  		bmp = new BitmapData(_tmp._width, _tmp._height, true, 0x00FFFFFF);
   121  		bmp.draw(_tmp);
   122  		img.attachBitmap(bmp, img.getNextHighestDepth(), "auto", _smooth);
   123  		MovieClipUtils.rmClip(_tmp);
   124  		_initCb();
   125  		clearCallbacks();
   126  	}
   127  
   128  	
   135  	private function _onProgress(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
   136  		
   137  		_progressCb(bytesLoaded, bytesTotal);
   138  	}
   139  
   140  	
   145  	private function _onError(target_mc:MovieClip, errorCode:String, httpStatus:Number):Void {
   146  		_errorCb(errorCode, httpStatus);
   147  		clearCallbacks();
   148  		throw new FatalException(_this, "Could not load image from url:"+_uri, arguments);
   149  	}
   150  }
   151