package { import flash.display.Sprite; import flash.events.Event; import flash.net.URLLoader; import flash.net.URLLoaderDataFormat; import flash.net.URLRequest; import flash.geom.Rectangle; import org.libspark.swfassist.io.DataInput; import org.libspark.swfassist.io.ByteArrayInputStream; import org.libspark.swfassist.swf.io.ReadingContext; import org.libspark.swfassist.swf.io.SWFReader; import org.libspark.swfassist.swf.structures.SWF; import org.libspark.swfassist.swf.structures.Shape; import org.libspark.swfassist.flash.display.ShapeDrawer; import org.libspark.swfassist.flash.display.ShapeOutlineDrawer; import org.libspark.swfassist.flash.display.VectorGraphics; import org.libspark.swfassist.flash.display.FlashGraphics; import org.libspark.swfassist.flash.display.PenGraphics; import org.libspark.swfassist.inprogress.swf.ShapeCollector; [SWF(backgroundColor=0xffffff)] public class Demo2 extends Sprite { public function Demo2() { var loader:URLLoader = new URLLoader(); loader.dataFormat = URLLoaderDataFormat.BINARY; loader.addEventListener(Event.COMPLETE, completeHandler); loader.load(new URLRequest('')); } private function completeHandler(e:Event):void { var loader:URLLoader = URLLoader(e.target); var input:DataInput = new ByteArrayInputStream(loader.data); var context:ReadingContext = new ReadingContext(); var reader:SWFReader = new SWFReader(); var swf:SWF = reader.readSWF(input, context); var collector:ShapeCollector = new ShapeCollector(); swf.visit(collector); drawShapes(collector.shapes); } private function drawShapes(shapes:Array):void { var drawer:ShapeDrawer = new ShapeOutlineDrawer(); for each (var shape:Shape in shapes) { drawShape(shape, drawer); } } private function drawShape(shape:Shape, drawer:ShapeDrawer):void { var sprite:Sprite = new Sprite(); drawer.graphics = new FlashGraphics(sprite.graphics); drawer.draw(shape); addChild(sprite); var bounds:Rectangle = sprite.getBounds(this); if ((_x + bounds.width) > (stage.stageWidth - 10)) { _x = 10; _y += _maxHeight + 10; _maxHeight = 0; } if (_maxHeight < bounds.height) { _maxHeight = bounds.height; } sprite.x = _x - bounds.x; sprite.y = _y - bounds.y; _x += bounds.width + 10; } private var _x:Number = 10; private var _y:Number = 10; private var _maxHeight:Number = 0; } }