home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Freeware / Adobe Air 1.5 / AdobeAIRInstaller.exe / setup.swf / scripts / mx / graphics / RectangularDropShadow.as next >
Encoding:
Text File  |  2008-10-29  |  11.0 KB  |  348 lines

  1. package mx.graphics
  2. {
  3.    import flash.display.BitmapData;
  4.    import flash.display.Graphics;
  5.    import flash.display.Shape;
  6.    import flash.filters.DropShadowFilter;
  7.    import flash.geom.Matrix;
  8.    import flash.geom.Point;
  9.    import flash.geom.Rectangle;
  10.    import mx.core.FlexShape;
  11.    import mx.core.mx_internal;
  12.    import mx.utils.GraphicsUtil;
  13.    
  14.    use namespace mx_internal;
  15.    
  16.    public class RectangularDropShadow
  17.    {
  18.       mx_internal static const VERSION:String = "3.0.0.0";
  19.       
  20.       private var leftShadow:BitmapData;
  21.       
  22.       private var _tlRadius:Number = 0;
  23.       
  24.       private var _trRadius:Number = 0;
  25.       
  26.       private var _angle:Number = 45;
  27.       
  28.       private var topShadow:BitmapData;
  29.       
  30.       private var _distance:Number = 4;
  31.       
  32.       private var rightShadow:BitmapData;
  33.       
  34.       private var _alpha:Number = 0.4;
  35.       
  36.       private var shadow:BitmapData;
  37.       
  38.       private var _brRadius:Number = 0;
  39.       
  40.       private var _blRadius:Number = 0;
  41.       
  42.       private var _color:int = 0;
  43.       
  44.       private var bottomShadow:BitmapData;
  45.       
  46.       private var changed:Boolean = true;
  47.       
  48.       public function RectangularDropShadow()
  49.       {
  50.          super();
  51.       }
  52.       
  53.       public function get blRadius() : Number
  54.       {
  55.          return _blRadius;
  56.       }
  57.       
  58.       public function set brRadius(param1:Number) : void
  59.       {
  60.          if(_brRadius != param1)
  61.          {
  62.             _brRadius = param1;
  63.             changed = true;
  64.          }
  65.       }
  66.       
  67.       public function set color(param1:int) : void
  68.       {
  69.          if(_color != param1)
  70.          {
  71.             _color = param1;
  72.             changed = true;
  73.          }
  74.       }
  75.       
  76.       public function drawShadow(param1:Graphics, param2:Number, param3:Number, param4:Number, param5:Number) : void
  77.       {
  78.          var _loc15_:Number = NaN;
  79.          var _loc16_:Number = NaN;
  80.          var _loc17_:Number = NaN;
  81.          var _loc18_:Number = NaN;
  82.          var _loc19_:Number = NaN;
  83.          var _loc20_:Number = NaN;
  84.          var _loc21_:Number = NaN;
  85.          var _loc22_:Number = NaN;
  86.          if(changed)
  87.          {
  88.             createShadowBitmaps();
  89.             changed = false;
  90.          }
  91.          param4 = Math.ceil(param4);
  92.          param5 = Math.ceil(param5);
  93.          var _loc6_:int = !!leftShadow ? leftShadow.width : 0;
  94.          var _loc7_:int = !!rightShadow ? rightShadow.width : 0;
  95.          var _loc8_:int = !!topShadow ? topShadow.height : 0;
  96.          var _loc9_:int = !!bottomShadow ? bottomShadow.height : 0;
  97.          var _loc10_:int = _loc6_ + _loc7_;
  98.          var _loc11_:int = _loc8_ + _loc9_;
  99.          var _loc12_:Number = (param5 + _loc11_) / 2;
  100.          var _loc13_:Number = (param4 + _loc10_) / 2;
  101.          var _loc14_:Matrix = new Matrix();
  102.          if(Boolean(leftShadow) || Boolean(topShadow))
  103.          {
  104.             _loc15_ = Math.min(tlRadius + _loc10_,_loc13_);
  105.             _loc16_ = Math.min(tlRadius + _loc11_,_loc12_);
  106.             _loc14_.tx = param2 - _loc6_;
  107.             _loc14_.ty = param3 - _loc8_;
  108.             param1.beginBitmapFill(shadow,_loc14_);
  109.             param1.drawRect(param2 - _loc6_,param3 - _loc8_,_loc15_,_loc16_);
  110.             param1.endFill();
  111.          }
  112.          if(Boolean(rightShadow) || Boolean(topShadow))
  113.          {
  114.             _loc17_ = Math.min(trRadius + _loc10_,_loc13_);
  115.             _loc18_ = Math.min(trRadius + _loc11_,_loc12_);
  116.             _loc14_.tx = param2 + param4 + _loc7_ - shadow.width;
  117.             _loc14_.ty = param3 - _loc8_;
  118.             param1.beginBitmapFill(shadow,_loc14_);
  119.             param1.drawRect(param2 + param4 + _loc7_ - _loc17_,param3 - _loc8_,_loc17_,_loc18_);
  120.             param1.endFill();
  121.          }
  122.          if(Boolean(leftShadow) || Boolean(bottomShadow))
  123.          {
  124.             _loc19_ = Math.min(blRadius + _loc10_,_loc13_);
  125.             _loc20_ = Math.min(blRadius + _loc11_,_loc12_);
  126.             _loc14_.tx = param2 - _loc6_;
  127.             _loc14_.ty = param3 + param5 + _loc9_ - shadow.height;
  128.             param1.beginBitmapFill(shadow,_loc14_);
  129.             param1.drawRect(param2 - _loc6_,param3 + param5 + _loc9_ - _loc20_,_loc19_,_loc20_);
  130.             param1.endFill();
  131.          }
  132.          if(Boolean(rightShadow) || Boolean(bottomShadow))
  133.          {
  134.             _loc21_ = Math.min(brRadius + _loc10_,_loc13_);
  135.             _loc22_ = Math.min(brRadius + _loc11_,_loc12_);
  136.             _loc14_.tx = param2 + param4 + _loc7_ - shadow.width;
  137.             _loc14_.ty = param3 + param5 + _loc9_ - shadow.height;
  138.             param1.beginBitmapFill(shadow,_loc14_);
  139.             param1.drawRect(param2 + param4 + _loc7_ - _loc21_,param3 + param5 + _loc9_ - _loc22_,_loc21_,_loc22_);
  140.             param1.endFill();
  141.          }
  142.          if(leftShadow)
  143.          {
  144.             _loc14_.tx = param2 - _loc6_;
  145.             _loc14_.ty = 0;
  146.             param1.beginBitmapFill(leftShadow,_loc14_);
  147.             param1.drawRect(param2 - _loc6_,param3 - _loc8_ + _loc16_,_loc6_,param5 + _loc8_ + _loc9_ - _loc16_ - _loc20_);
  148.             param1.endFill();
  149.          }
  150.          if(rightShadow)
  151.          {
  152.             _loc14_.tx = param2 + param4;
  153.             _loc14_.ty = 0;
  154.             param1.beginBitmapFill(rightShadow,_loc14_);
  155.             param1.drawRect(param2 + param4,param3 - _loc8_ + _loc18_,_loc7_,param5 + _loc8_ + _loc9_ - _loc18_ - _loc22_);
  156.             param1.endFill();
  157.          }
  158.          if(topShadow)
  159.          {
  160.             _loc14_.tx = 0;
  161.             _loc14_.ty = param3 - _loc8_;
  162.             param1.beginBitmapFill(topShadow,_loc14_);
  163.             param1.drawRect(param2 - _loc6_ + _loc15_,param3 - _loc8_,param4 + _loc6_ + _loc7_ - _loc15_ - _loc17_,_loc8_);
  164.             param1.endFill();
  165.          }
  166.          if(bottomShadow)
  167.          {
  168.             _loc14_.tx = 0;
  169.             _loc14_.ty = param3 + param5;
  170.             param1.beginBitmapFill(bottomShadow,_loc14_);
  171.             param1.drawRect(param2 - _loc6_ + _loc19_,param3 + param5,param4 + _loc6_ + _loc7_ - _loc19_ - _loc21_,_loc9_);
  172.             param1.endFill();
  173.          }
  174.       }
  175.       
  176.       public function get brRadius() : Number
  177.       {
  178.          return _brRadius;
  179.       }
  180.       
  181.       public function get angle() : Number
  182.       {
  183.          return _angle;
  184.       }
  185.       
  186.       private function createShadowBitmaps() : void
  187.       {
  188.          var _loc1_:Number = Math.max(tlRadius,blRadius) + 2 * distance + Math.max(trRadius,brRadius);
  189.          var _loc2_:Number = Math.max(tlRadius,trRadius) + 2 * distance + Math.max(blRadius,brRadius);
  190.          if(_loc1_ < 0 || _loc2_ < 0)
  191.          {
  192.             return;
  193.          }
  194.          var _loc3_:Shape = new FlexShape();
  195.          var _loc4_:Graphics = _loc3_.graphics;
  196.          _loc4_.beginFill(16777215);
  197.          GraphicsUtil.drawRoundRectComplex(_loc4_,0,0,_loc1_,_loc2_,tlRadius,trRadius,blRadius,brRadius);
  198.          _loc4_.endFill();
  199.          var _loc5_:BitmapData = new BitmapData(_loc1_,_loc2_,true,0);
  200.          _loc5_.draw(_loc3_,new Matrix());
  201.          var _loc6_:DropShadowFilter = new DropShadowFilter(distance,angle,color,alpha);
  202.          _loc6_.knockout = true;
  203.          var _loc7_:Rectangle = new Rectangle(0,0,_loc1_,_loc2_);
  204.          var _loc8_:Rectangle = _loc5_.generateFilterRect(_loc7_,_loc6_);
  205.          var _loc9_:Number = _loc7_.left - _loc8_.left;
  206.          var _loc10_:Number = _loc8_.right - _loc7_.right;
  207.          var _loc11_:Number = _loc7_.top - _loc8_.top;
  208.          var _loc12_:Number = _loc8_.bottom - _loc7_.bottom;
  209.          shadow = new BitmapData(_loc8_.width,_loc8_.height);
  210.          shadow.applyFilter(_loc5_,_loc7_,new Point(_loc9_,_loc11_),_loc6_);
  211.          var _loc13_:Point = new Point(0,0);
  212.          var _loc14_:Rectangle = new Rectangle();
  213.          if(_loc9_ > 0)
  214.          {
  215.             _loc14_.x = 0;
  216.             _loc14_.y = tlRadius + _loc11_ + _loc12_;
  217.             _loc14_.width = _loc9_;
  218.             _loc14_.height = 1;
  219.             leftShadow = new BitmapData(_loc9_,1);
  220.             leftShadow.copyPixels(shadow,_loc14_,_loc13_);
  221.          }
  222.          else
  223.          {
  224.             leftShadow = null;
  225.          }
  226.          if(_loc10_ > 0)
  227.          {
  228.             _loc14_.x = shadow.width - _loc10_;
  229.             _loc14_.y = trRadius + _loc11_ + _loc12_;
  230.             _loc14_.width = _loc10_;
  231.             _loc14_.height = 1;
  232.             rightShadow = new BitmapData(_loc10_,1);
  233.             rightShadow.copyPixels(shadow,_loc14_,_loc13_);
  234.          }
  235.          else
  236.          {
  237.             rightShadow = null;
  238.          }
  239.          if(_loc11_ > 0)
  240.          {
  241.             _loc14_.x = tlRadius + _loc9_ + _loc10_;
  242.             _loc14_.y = 0;
  243.             _loc14_.width = 1;
  244.             _loc14_.height = _loc11_;
  245.             topShadow = new BitmapData(1,_loc11_);
  246.             topShadow.copyPixels(shadow,_loc14_,_loc13_);
  247.          }
  248.          else
  249.          {
  250.             topShadow = null;
  251.          }
  252.          if(_loc12_ > 0)
  253.          {
  254.             _loc14_.x = blRadius + _loc9_ + _loc10_;
  255.             _loc14_.y = shadow.height - _loc12_;
  256.             _loc14_.width = 1;
  257.             _loc14_.height = _loc12_;
  258.             bottomShadow = new BitmapData(1,_loc12_);
  259.             bottomShadow.copyPixels(shadow,_loc14_,_loc13_);
  260.          }
  261.          else
  262.          {
  263.             bottomShadow = null;
  264.          }
  265.       }
  266.       
  267.       public function get alpha() : Number
  268.       {
  269.          return _alpha;
  270.       }
  271.       
  272.       public function get color() : int
  273.       {
  274.          return _color;
  275.       }
  276.       
  277.       public function set angle(param1:Number) : void
  278.       {
  279.          if(_angle != param1)
  280.          {
  281.             _angle = param1;
  282.             changed = true;
  283.          }
  284.       }
  285.       
  286.       public function set trRadius(param1:Number) : void
  287.       {
  288.          if(_trRadius != param1)
  289.          {
  290.             _trRadius = param1;
  291.             changed = true;
  292.          }
  293.       }
  294.       
  295.       public function set tlRadius(param1:Number) : void
  296.       {
  297.          if(_tlRadius != param1)
  298.          {
  299.             _tlRadius = param1;
  300.             changed = true;
  301.          }
  302.       }
  303.       
  304.       public function get trRadius() : Number
  305.       {
  306.          return _trRadius;
  307.       }
  308.       
  309.       public function set distance(param1:Number) : void
  310.       {
  311.          if(_distance != param1)
  312.          {
  313.             _distance = param1;
  314.             changed = true;
  315.          }
  316.       }
  317.       
  318.       public function get distance() : Number
  319.       {
  320.          return _distance;
  321.       }
  322.       
  323.       public function get tlRadius() : Number
  324.       {
  325.          return _tlRadius;
  326.       }
  327.       
  328.       public function set alpha(param1:Number) : void
  329.       {
  330.          if(_alpha != param1)
  331.          {
  332.             _alpha = param1;
  333.             changed = true;
  334.          }
  335.       }
  336.       
  337.       public function set blRadius(param1:Number) : void
  338.       {
  339.          if(_blRadius != param1)
  340.          {
  341.             _blRadius = param1;
  342.             changed = true;
  343.          }
  344.       }
  345.    }
  346. }
  347.  
  348.