WheelScale.as
package {
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Point;
public class WheelScale extends Sprite
{
private var canvas:Sprite;
public function WheelScale()
{
canvas=createRect();
canvas.addEventListener(MouseEvent.MOUSE_WHEEL, onWheel);
}
private function onWheel(event:MouseEvent):void {
if (event.delta>1) {
trace("wheel up");
scaleAt(2, event.localX, event.localY);
//this.scaleX=this.scaleX*2;
//this.scaleY=this.scaleY*2;
} else {
trace("wheel down");
scaleAt(0.5, event.localX, event.localY);
//this.scaleX=this.scaleX*0.5;
//this.scaleY=this.scaleY*0.5;
}
}
private function createRect():Sprite {
var sprite:Sprite=new Sprite();
addChild(sprite);
var g:Graphics=sprite.graphics;
g.beginFill(0xffffff,1);
g.drawRect(10,50,300,200);
g.endFill();
g.lineStyle(1,0xff0000);
for(var i:int=1; i<10; i++) {
g.drawRect(10,50,30*i,20*i);
}
//sprite.scaleX=4;
//sprite.scaleY=4;
return sprite;
}
private function scaleAt(scale:Number, localX:Number, localY:Number):void {
var m:Matrix=new Matrix();
var gPoint:Point=canvas.localToGlobal(new Point(localX, localY));
m.translate(-gPoint.x, -gPoint.y);
m.scale(scale,scale);
m.translate(gPoint.x, gPoint.y);
trace("scale matrix: "+m);
var oldM:Matrix=canvas.transform.matrix;
trace("before matrix: "+oldM);
oldM.concat(m);
trace("after matrix: "+oldM);
canvas.transform.matrix=oldM;
}
}
}