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

lang/actionscript/swfgmap: round-rect button

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

Legend:

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

    r3110 r3121  
    4949                        addChild(mLayerToggle); 
    5050                */       
    51                         //var rb:RoundRectButton; 
     51                        /* 
     52                        var rb:RoundRectButton = new RoundRectButton(); 
     53                        addChild(rb); 
     54                        rb.x = 8; 
     55                        rb.y = 100;*/ 
    5256                } 
    5357                 
  • lang/actionscript/swfgmap/trunk/gyuque/gmap/ui/RoundRectButton.as

    r3110 r3121  
    66                public function RoundRectButton() 
    77                { 
     8                        var sup:RoundRectButtonSprite = new RoundRectButtonSprite(false, true); 
     9                        upState = sup; 
    810                } 
    911        } 
     
    1315{ 
    1416        import flash.display.*; 
     17        import flash.geom.Matrix; 
    1518         
    16         public function RoundRectButtonSprite() 
     19        protected var mBorderColor:uint; 
     20        protected var mLeftRounded:Boolean; 
     21        protected var mRightRounded:Boolean; 
     22        protected var mR:Number = 6; 
     23        protected const APOS:Number = 0.292893219; 
     24         
     25        private var mGradColors:Array; 
     26        private var mGradAlphas:Array; 
     27        private var mGradRatios:Array; 
     28        private var mGradMatrix:Matrix;  
     29        private var mHighlightBorderColor:uint = 0xffffff; 
     30         
     31        public function RoundRectButtonSprite(leftr:Boolean, rightr:Boolean) 
    1732        { 
     33                createGradients(22); 
     34                 
     35                mLeftRounded  = leftr; 
     36                mRightRounded = rightr; 
     37                redraw(32, 22); 
    1838        } 
    1939         
    20         public function redraw():void 
     40        protected function createGradients(h:Number):void 
    2141        { 
     42                mGradColors = [0xf0f0f0, 0xd0d0d0]; 
     43                mGradAlphas = [1  , 1   ]; 
     44                mGradRatios = [0, 255]; 
     45                mGradMatrix = new Matrix(); 
     46                mGradMatrix.createGradientBox(h, h, Math.PI / 2, 0, 0); 
     47        } 
     48         
     49        public function redraw(w:Number, h:Number):void 
     50        { 
     51                var g:Graphics = graphics; 
    2252                 
     53                g.lineStyle(); 
     54                g.beginGradientFill(GradientType.LINEAR, mGradColors, mGradAlphas, mGradRatios, mGradMatrix); 
     55                drawBorder(g, w, h, 0, false); 
     56                g.endFill(); 
     57 
     58                g.lineStyle(1, mHighlightBorderColor, 0.5, true); 
     59                drawBorder(g, w, h, 1, false); 
     60                 
     61                g.lineStyle(1, mBorderColor, 0.3, true); 
     62                drawBorder(g, w, h, 0, false); 
    2363        } 
     64         
     65        protected function drawBorder(g:Graphics, w:Number, h:Number, padding:Number, opened:Boolean):void 
     66        { 
     67                if (mLeftRounded && mRightRounded) 
     68                { 
     69                        g.moveTo(mR+padding, h-1-padding); 
     70                        roundedLeft(w, h, padding); 
     71                        g.lineTo(w-1-mR-padding, padding); 
     72                        roundedRight(w, h, padding); 
     73                } 
     74                else if (mLeftRounded) 
     75                { 
     76                        g.moveTo(w-1-padding, h-1-padding); 
     77                        g.lineTo(mR+padding, h-1-padding); 
     78                        roundedLeft(w, h, padding); 
     79                        g.lineTo(w-1-padding, padding); 
     80                } 
     81                else if (mRightRounded) 
     82                { 
     83                        g.moveTo(padding, padding); 
     84                        g.lineTo(w-1-mR-padding, padding); 
     85                        roundedRight(w, h, padding); 
     86                        g.lineTo(padding, h-1-padding); 
     87                } 
     88        } 
     89         
     90        protected function roundedLeft(w:Number, h:Number, padding:Number):void 
     91        { 
     92                var A:Number = APOS*mR; 
     93                var g:Graphics = graphics; 
     94                 
     95                g.curveTo(padding+A*2, h-1-padding, padding+A, h-1-padding - A); 
     96                g.curveTo(padding, h-1-padding - A*2, padding, h-1-padding - mR); 
     97                g.lineTo(padding, padding+mR); 
     98                g.curveTo(padding, padding+A*2, padding+A, padding+A); 
     99                g.curveTo(padding+A*2, padding, padding+mR, padding); 
     100        } 
     101 
     102        protected function roundedRight(w:Number, h:Number, padding:Number):void 
     103        { 
     104                var A:Number = APOS*mR; 
     105                var g:Graphics = graphics; 
     106                 
     107                g.curveTo(w-1-padding-A*2, padding    , w-1-padding-A, padding+A); 
     108                g.curveTo(w-1-padding    , padding+A*2, w-1-padding  , padding+mR); 
     109                g.lineTo(w-1-padding, h-1-padding-mR); 
     110                g.curveTo(w-1-padding, h-1-padding-A*2, w-1-padding-A, h-1-padding-A); 
     111                g.curveTo(w-1-padding-A*2, h-1-padding, w-1-padding-mR, h-1-padding); 
     112        } 
     113 
    24114}