package com.senocular.display { import com.senocular.events.TransformEvent; import flash.display.CapsStyle; import flash.display.JointStyle; import flash.display.Sprite; import flash.events.Event; import flash.geom.Matrix; import flash.geom.Point; public class TransformToolInternalCursor extends TransformToolCursor { public var offset:Point = new Point(); public var icon:Sprite = new Sprite(); public function TransformToolInternalCursor() { addChild(icon); offset = _mouseOffset; addEventListener(TransformEvent.CONTROL_INIT, init); } private function init(event:Event):void { _transformTool.addEventListener(TransformEvent.NEW_TARGET, maintainTransform); _transformTool.addEventListener(TransformEvent.CONTROL_PREFERENCE, maintainTransform); draw(); } protected function maintainTransform(event:Event):void { offset = _mouseOffset; if (_transformTool.maintainControlForm) { transform.matrix = new Matrix(); var concatMatrix:Matrix = transform.concatenatedMatrix; concatMatrix.invert(); transform.matrix = concatMatrix; offset = concatMatrix.deltaTransformPoint(offset); } updateVisible(event); } protected function drawArc(originX:Number, originY:Number, radius:Number, angle1:Number, angle2:Number, useMove:Boolean = true):void { var diff:Number = angle2 - angle1; var divs:Number = 1 + Math.floor(Math.abs(diff)/(Math.PI/4)); var span:Number = diff/(2*divs); var cosSpan:Number = Math.cos(span); var radiusc:Number = cosSpan ? radius/cosSpan : 0; var i:int; if (useMove) { icon.graphics.moveTo(originX + Math.cos(angle1)*radius, originY - Math.sin(angle1)*radius); }else{ icon.graphics.lineTo(originX + Math.cos(angle1)*radius, originY - Math.sin(angle1)*radius); } for (i=0; i<divs; i++) { angle2 = angle1 + span; angle1 = angle2 + span; icon.graphics.curveTo( originX + Math.cos(angle2)*radiusc, originY - Math.sin(angle2)*radiusc, originX + Math.cos(angle1)*radius, originY - Math.sin(angle1)*radius ); } } protected function getGlobalAngle(vector:Point):Number { var globalMatrix:Matrix = _transformTool.globalMatrix; vector = globalMatrix.deltaTransformPoint(vector); return Math.atan2(vector.y, vector.x) * (180/Math.PI); } override public function position(event:Event = null):void { if (parent) { x = parent.mouseX + offset.x; y = parent.mouseY + offset.y; } } public function draw(rot:int = 0):void { icon.graphics.lineStyle( 1, 0x000000, 1, true, "normal", CapsStyle.NONE, JointStyle.MITER, 3); icon.graphics.beginFill(0xFFFFFF); } } }