package HiRISE { import flash.display.Loader; import flash.display.LoaderInfo; import flash.display.LineScaleMode; import flash.display.CapsStyle; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.net.URLRequest; import flash.text.TextField; import flash.text.TextFormat; import flash.text.TextFieldAutoSize; /* Default settings, these can be changed in the HTML */ [SWF(width="512", height="512", backgroundColor="0xffffff")] public class Scroller extends Sprite { private var length:int; private var image:String; private var scale:String; private var loader:Loader; private var linecolor:uint = 0xe89800; // rgb private var thickness:int = 6; // pixels private var margin:int = 25; // pixels private var scalegrp:Sprite = new Sprite(); private var paused:Boolean = false; public function Scroller() { scale = root.loaderInfo.parameters.scale; image = root.loaderInfo.parameters.image; length = root.loaderInfo.parameters.length; /* Image */ trace("Loading " + image); loader = new Loader(); loader.load( new URLRequest(image)); /* Scale Bar */ var scalebar:Sprite = new Sprite(); scalebar.graphics.lineStyle ( thickness, // thickness in pixels linecolor, // color 1, true, LineScaleMode.NONE, CapsStyle.SQUARE ); scalebar.graphics.moveTo(stage.stageWidth - margin - length, margin); scalebar.graphics.lineTo(stage.stageWidth - margin, margin); /* Text Format */ var scalefmt:TextFormat = new TextFormat(); scalefmt.font = "Verdana, Arial, Helvetica, Sans, Bitstream Vera Sans"; scalefmt.size = 14; scalefmt.bold = true; scalefmt.color = linecolor; /* Scale Text */ var scaletxt:TextField = new TextField(); scaletxt.text = scale; scaletxt.setTextFormat(scalefmt); scaletxt.x = stage.stageWidth - length - margin; scaletxt.y = margin + margin / 2; scaletxt.width = length; scaletxt.autoSize = TextFieldAutoSize.CENTER; /* Scale Group */ scalegrp.addChild(scalebar); scalegrp.addChild(scaletxt); /* Scale group event listeners */ scalegrp.addEventListener(MouseEvent.MOUSE_DOWN, startScaleDrag); scalegrp.addEventListener(MouseEvent.MOUSE_UP, stopScaleDrag); /* Child Nodes */ addChild(loader); addChild(scalegrp); /* Our event listeners */ addEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); addEventListener(MouseEvent.MOUSE_WHEEL, onMouseWheel); } public function startScaleDrag(event:MouseEvent):void { paused = true; scalegrp.startDrag(); event.stopPropagation(); } public function stopScaleDrag(event:MouseEvent):void { paused = false; scalegrp.stopDrag(); //event.stopPropagation(); } public function onMouseDown(event:MouseEvent):void { paused = ! paused; } public function onMouseWheel(event:MouseEvent):void { loader.y += event.delta; } public function onEnterFrame(event:Event):void { if (paused) return; loader.y -= 2; try { if ( -loader.y > (loader.loaderInfo.height + stage.stageHeight)) { loader.y = 0; } } catch (err:Error) { trace(err); } } } }