Show
Ignore:
Timestamp:
12/07/07 04:14:27 (13 months ago)
Author:
gyuque
Message:

lang/actionscript/swfgmap: implemented pseudo mouse capturing on Spinner

Location:
lang/actionscript/swfgmap/trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • lang/actionscript/swfgmap/trunk/TestApp.as

    r2666 r2693  
    3030                        spnr.x = 8; 
    3131                        spnr.y = 8; 
    32                         spnr.buttonMode = true; 
    3332                        mSpnr = spnr; 
    3433                } 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/ui/Spinner.as

    r2686 r2693  
    1010                private var mSize:int; 
    1111                private var mBaseRing:Sprite; 
     12                private var mCaptureRing:Sprite; 
    1213                private var mCursor:Sprite; 
     14                 
     15                private var mResetBtn:SpinResetButton; 
    1316                 
    1417                private var mRGradColors:Array; 
     
    3336                        mCursor = new Sprite(); 
    3437                        drawBaseRing(mBaseRing.graphics, mCursor.graphics, graphics); 
     38                         
     39                        mCaptureRing = new Sprite(); 
     40                        mCaptureRing.graphics.beginFill(0); 
     41                        mCaptureRing.graphics.drawCircle(sz/2, sz/2, sz); 
     42                        mCaptureRing.mouseEnabled = false; 
     43                        mCaptureRing.visible = false; 
     44                        addChild(mCaptureRing); 
     45                         
    3546                        mBaseRing.addChild(mCursor); 
    3647                        mCursor.x = sz/2; 
     
    3849                        mCursor.mouseEnabled = false; 
    3950                         
    40                         addChild(mBaseRing); 
    41                          
    4251                        mBaseRing.addEventListener(MouseEvent.MOUSE_MOVE , onRingMouseMove); 
    4352                        mBaseRing.addEventListener(MouseEvent.MOUSE_DOWN , onRingMouseDown); 
    4453                        mBaseRing.addEventListener(MouseEvent.MOUSE_UP   , onRingMouseUp); 
    4554                        mBaseRing.addEventListener(MouseEvent.MOUSE_OUT  , onRingMouseOut); 
     55                         
     56                        mResetBtn = new SpinResetButton(); 
     57                        mResetBtn.x = sz/2; 
     58                        mResetBtn.y = sz/2; 
     59                        addChild(mResetBtn); 
     60                        mBaseRing.buttonMode = true; 
     61                        mBaseRing.useHandCursor = true; 
     62                         
     63                        addChild(mBaseRing); 
    4664                         
    4765                        mValue = 0; 
     
    83101                         
    84102                        mDrag.dragging = true; 
     103                        mBaseRing.hitArea = mCaptureRing; 
    85104                        mDrag.update(e.localX - mSize/2, e.localY - mSize/2); 
    86105                } 
     
    89108                { 
    90109                        e.stopPropagation(); 
    91  
     110                        endDrag(); 
     111                } 
     112 
     113                protected function onRingMouseOut(e:MouseEvent):void 
     114                { 
     115                        e.stopPropagation(); 
     116                        endDrag(); 
     117                } 
     118                 
     119                protected function endDrag():void 
     120                { 
    92121                        mDrag.dragging = false; 
    93                 } 
    94  
    95                 protected function onRingMouseOut(e:MouseEvent):void 
    96                 { 
    97                         e.stopPropagation(); 
    98  
    99                         mDrag.dragging = false; 
     122                        mBaseRing.hitArea = null; 
    100123                } 
    101124                 
     
    167190        } 
    168191} 
     192 
     193class SpinResetButton extends flash.display.SimpleButton 
     194{ 
     195        import flash.display.*; 
     196         
     197        public function SpinResetButton() 
     198        { 
     199                var s:Sprite = new SpinResetButtonSprite(16, true); 
     200                upState = s; 
     201                hitTestState = upState; 
     202                overState = s; 
     203                downState = new SpinResetButtonSprite(16); 
     204                downState.y = 1; 
     205        } 
     206} 
     207 
     208class SpinResetButtonSprite extends flash.display.Sprite 
     209{ 
     210        import flash.display.*; 
     211         
     212        protected var mBGradColors:Array; 
     213        protected var mBGradAlphas:Array; 
     214        protected var mBGradRatios:Array; 
     215        protected var mBGradMatrix:flash.geom.Matrix; 
     216        protected var mBorderColor:uint = 0x999999; 
     217 
     218        protected var mHGradColors:Array; 
     219        protected var mHGradAlphas:Array; 
     220        protected var mHGradRatios:Array; 
     221        protected var mHGradMatrix:flash.geom.Matrix; 
     222         
     223        protected var mSize:Number; 
     224         
     225        public function SpinResetButtonSprite(sz:Number, shadowing:Boolean = false) 
     226        { 
     227                mSize = sz; 
     228                createGradientData(sz); 
     229                var g:Graphics = graphics; 
     230 
     231                if (shadowing) 
     232                        drawShadow(g, sz); 
     233                 
     234                g.beginGradientFill(GradientType.RADIAL, mBGradColors, mBGradAlphas, mBGradRatios, mBGradMatrix); 
     235                g.lineStyle(1, mBorderColor); 
     236                g.drawCircle(0, 0, sz); 
     237                g.endFill(); 
     238                drawHighlight(g, sz); 
     239        } 
     240 
     241        protected function drawShadow(g:Graphics, sz:Number):void 
     242        { 
     243                g.beginFill(0, 0.1); 
     244                g.lineStyle(1, 0, 0.1); 
     245                g.drawCircle(1, 2, sz); 
     246                g.endFill(); 
     247        } 
     248         
     249        protected function drawHighlight(g:Graphics, sz:Number):void 
     250        { 
     251                g.beginGradientFill(GradientType.RADIAL, mHGradColors, mHGradAlphas, mHGradRatios, mHGradMatrix); 
     252                g.lineStyle(); 
     253                g.drawCircle(0, 0, sz*0.9); 
     254        } 
     255         
     256        protected function createGradientData(sz:Number):void 
     257        { 
     258                mBGradColors = [0xf0f0f0, 0xeeeeee, 0xeeeeee, 0xffffff, 0xd0d0d0]; 
     259                mBGradAlphas = [1,1,1,1,1]; 
     260                mBGradRatios = [0, 180, 200, 218, 255]; 
     261                mBGradMatrix = new flash.geom.Matrix(); 
     262                mBGradMatrix.createGradientBox(sz*2, sz*2, 0, -sz, -sz*1.05); 
     263 
     264                mHGradColors = [0xffffff, 0xffffff, 0xffffff]; 
     265                mHGradAlphas = [0,0.4,1]; 
     266                mHGradRatios = [70, 80, 200]; 
     267                mHGradMatrix = new flash.geom.Matrix(); 
     268                mHGradMatrix.createGradientBox(sz*8, sz*4, 0, -sz*3.9, -sz*1.4); 
     269         
     270        } 
     271}