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