forked from: Zoom Pan

by moriyak forked from Zoom Pan (diff: 110)
♥2 | Line 51 | Modified 2009-11-24 18:14:31 | MIT License
play

ActionScript3 source code

/**
 * Copyright moriyak ( http://wonderfl.net/user/moriyak )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/ydYR
 */

// forked from shapevent's Zoom Pan
package {

	import flash.display.*;
	import flash.events.*;
	import flash.text.*;
	import flash.geom.*;
	
    [SWF(width = 500, height = 500, frameRate = 30, backgroundColor = 0xFFFFFF)]
    public class Main extends MovieClip
	{
		private var s:Shape;
		private var scale:Number= 1;
		private var dx:Number   = 0;
		private var dy:Number   = 0;
		private var isDown:Boolean;
		
		public function Main()
		{
			// init
			initShape();
			stage.addEventListener(MouseEvent.MOUSE_DOWN, onDown);
		}
		
        // private methods
		private function onDown(evt:MouseEvent):void { this.zoomIn(); }
		
		private function zoomIn():void
		{
			scale *= 1.1;  
			if (scale > 10) scale = 10;
			
			dx += (mouseX - dx);
			dy += (mouseY - dy);
			
			if (dx < 0) dx = 0;
			if (dy < 0) dy = 0;
			if (dx > stage.stageWidth)  dx = stage.stageWidth;
			if (dy > stage.stageHeight) dy = stage.stageHeight;
		   
			// matrix zoom/pan
			var m:Matrix = this.transform.matrix;
			m.identity();
			m.translate(-dx, -dy);
			m.scale(scale, scale);
			m.translate(dx, dy);
			this.transform.matrix = m;
		}
		
        private function initShape():void
		{
			s = new Shape();
			var g:Graphics = s.graphics;
			for (var i:int = 0; i < 5; i++) {
				for (var j:int = 0; j < 5; j++) {
					g.beginFill(0xFFFFFF * Math.random());
					g.drawRect(i * 100, j * 100, 100, 100);
					g.endFill();
				}
			}
			this.addChild(s);
		}
	}
}