import oxylus.Utils; import caurina.transitions.Tweener; import flash.display.BitmapData; class oxylus.folio.Image extends MovieClip { private var Border:MovieClip; private var Bground:MovieClip; private var Mask:MovieClip; private var Shape:MovieClip; private var Shadow:MovieClip; private var Pldr:MovieClip; private var Text:TextField; private var Img:MovieClip; private var Index:MovieClip; private var IdxTxt:TextField; private var bw:Number; private var rad:Number; private var w:Number; private var h:Number; private var ls:Number; private var ss:Number; private var node:XMLNode; private var mcl:MovieClipLoader; public static var scaleMode:String = "showAll"; public static var clickHandler:Function; public var onSlideRequest:Function; public static var crtImage:MovieClip; public static var total:Number = 0; private var _iidx:Number; public function Image() { initVars(); Border._visible = Bground._visible = false; Border = this["a"]; Bground = this["b"]; Text = this["c"]; Shadow = this["d"]; Pldr = this.attachMovie("IDPreloader", "e", this.getNextHighestDepth()); Index = this["f"]; IdxTxt = Index["a"]; Mask = Bground.duplicateMovieClip("_mask", this.getNextHighestDepth()); Shape = this.createEmptyMovieClip("_shape", this.getNextHighestDepth()); Shadow._alpha = 10; Mask._alpha = 0; Border.setMask(Shape); Border.stop(); this.hitArea = Border; Img = undefined; mcl = new MovieClipLoader(); mcl.addListener(this); // Text.autoSize = "none"; Text.text = "..."; Index._alpha = 0; IdxTxt.autoSize = "left"; IdxTxt.text = ""; resize(); } private function initVars() { // border width bw = 0; // corner radius rad = 0; // width and height including the border w = 299; h = 375; // label vertical space ls = 20; // shadow vertical space from ss = 0; // _iidx = 1; } private function resize() { Border._width = w; Border._height = h; Text._width = w; Bground._width = w-2*bw; Bground._height = h-2*bw; Bground._x = Bground._y=bw; Mask._width = w-2*bw; Mask._height = h-2*bw; Mask._x = Mask._y=bw; Text._y = h+ls; Shadow._y = h+ss; Shadow._width = w; Index._x = bw+5; Index._y = bw+5; Pldr._x = Math.round(w/2); Pldr._y = Math.round(h/2); updateShape(); } private function updateShape() { Shape.clear(); Shape.beginFill(0x000000, 0); Shape.moveTo(rad, 0); Shape.lineTo(w-rad, 0); Shape.curveTo(w, 0, w, rad); Shape.lineTo(w, h-rad); Shape.curveTo(w, h, w-rad, h); Shape.lineTo(rad, h); Shape.curveTo(0, h, 0, h-rad); Shape.lineTo(0, rad); Shape.curveTo(0, 0, rad, 0); Shape.endFill(); } private function onRollOver() { Utils.mcPlay(Border, 0); if (crtImage == this) { Tweener.addTween(Index, {_alpha:100, time:.5, transition:"easeInQuad"}); } else { if (Index._alpha>0) { Tweener.addTween(Index, {_alpha:0, time:.5, transition:"easeOutQuad"}); } } } private function onRollOut() { Utils.mcPlay(Border, 1); if (Index._alpha>0) { Tweener.addTween(Index, {_alpha:0, time:.5, transition:"easeOutQuad"}); } } private function onReleaseOutside() { onRollOut(); } private function setImage(url:String) { var ni:MovieClip = this.createEmptyMovieClip("_img", this.getNextHighestDepth()); ni._alpha = 0; mcl.loadClip(url, ni); Pldr.show(); } private function onLoadInit(ni:MovieClip) { Pldr.hide(); mcl.removeListener(this); var bd:BitmapData = new BitmapData(ni._width, ni._height, true, 0x000000); bd.draw(ni); ni.removeMovieClip(); Img = this.createEmptyMovieClip("_img2", this.getNextHighestDepth()); Img._alpha = 0; Img.attachBitmap(bd, Img.getNextHighestDepth(), "always", true); Img.setMask(Mask); resizeImg(); Index.swapDepths(Img); Tweener.addTween(Img, {_alpha:100, time:1.5, transition:"easeOutQuad"}); } private function resizeImg() { switch (scaleMode) { case "noBorder" : resizeNoBorder(); break; case "exactFit" : resizeExactFit(); break; case "noScale" : resizeNoScale(); break; default : resizeShowAll(); break; } } private function resizeNoBorder() { var mw:Number = w-2*bw; var mh:Number = h-2*bw; Img._width = mw; Img._yscale = Img._xscale; if (Img._heightmh) { Img._height = mh; Img._xscale = Img._yscale; } Img._width = Math.round(Img._width); Img._height = Math.round(Img._height); Img._x = Math.round(w/2-Img._width/2); Img._y = Math.round(h/2-Img._height/2); } private function setNode(n:XMLNode) { node = n; setImage(node.attributes.src); Text.text = node.attributes.title; } private function onRelease() { if (crtImage == this) { clickHandler.call(this, node.attributes.data); } else { onSlideRequest.call(this); } } public function get width():Number { return w; } public function get height():Number { return h; } public function set data(n:XMLNode) { setNode(n); } public function get data():XMLNode { return node; } public function set iIdx(i:Number) { IdxTxt.text = i+"/"+total; _iidx = i; } public function get iIdx():Number { return _iidx; } }