home *** CD-ROM | disk | FTP | other *** search
/ Computer Active 2010 August / CA08.iso / Multimedija / shufflr.air / ShufflrClient.swf / scripts / mx / skins / RectangularBorder.as < prev   
Encoding:
Text File  |  2010-06-23  |  9.2 KB  |  269 lines

  1. package mx.skins
  2. {
  3.    import flash.display.DisplayObject;
  4.    import flash.display.Graphics;
  5.    import flash.display.Loader;
  6.    import flash.display.LoaderInfo;
  7.    import flash.display.Shape;
  8.    import flash.events.ErrorEvent;
  9.    import flash.events.Event;
  10.    import flash.events.IOErrorEvent;
  11.    import flash.geom.Rectangle;
  12.    import flash.net.URLRequest;
  13.    import flash.system.ApplicationDomain;
  14.    import flash.system.LoaderContext;
  15.    import flash.utils.getDefinitionByName;
  16.    import mx.core.EdgeMetrics;
  17.    import mx.core.FlexLoader;
  18.    import mx.core.FlexShape;
  19.    import mx.core.IChildList;
  20.    import mx.core.IContainer;
  21.    import mx.core.IRawChildrenContainer;
  22.    import mx.core.IRectangularBorder;
  23.    import mx.core.mx_internal;
  24.    import mx.resources.IResourceManager;
  25.    import mx.resources.ResourceManager;
  26.    import mx.styles.ISimpleStyleClient;
  27.    
  28.    use namespace mx_internal;
  29.    
  30.    public class RectangularBorder extends Border implements IRectangularBorder
  31.    {
  32.       mx_internal static const VERSION:String = "3.5.0.12683";
  33.       
  34.       private var backgroundImage:DisplayObject;
  35.       
  36.       private var backgroundImageHeight:Number;
  37.       
  38.       private var _backgroundImageBounds:Rectangle;
  39.       
  40.       private var backgroundImageStyle:Object;
  41.       
  42.       private var backgroundImageWidth:Number;
  43.       
  44.       private var resourceManager:IResourceManager = ResourceManager.getInstance();
  45.       
  46.       public function RectangularBorder()
  47.       {
  48.          super();
  49.          addEventListener(Event.REMOVED,removedHandler);
  50.       }
  51.       
  52.       public function layoutBackgroundImage() : void
  53.       {
  54.          var _loc4_:Number = NaN;
  55.          var _loc5_:Number = NaN;
  56.          var _loc7_:Number = NaN;
  57.          var _loc8_:Number = NaN;
  58.          var _loc14_:Number = NaN;
  59.          var _loc15_:Graphics = null;
  60.          var _loc1_:DisplayObject = parent;
  61.          var _loc2_:EdgeMetrics = _loc1_ is IContainer ? IContainer(_loc1_).viewMetrics : borderMetrics;
  62.          var _loc3_:* = getStyle("backgroundAttachment") != "fixed";
  63.          if(_backgroundImageBounds)
  64.          {
  65.             _loc4_ = _backgroundImageBounds.width;
  66.             _loc5_ = _backgroundImageBounds.height;
  67.          }
  68.          else
  69.          {
  70.             _loc4_ = width - _loc2_.left - _loc2_.right;
  71.             _loc5_ = height - _loc2_.top - _loc2_.bottom;
  72.          }
  73.          var _loc6_:Number = getBackgroundSize();
  74.          if(isNaN(_loc6_))
  75.          {
  76.             _loc7_ = 1;
  77.             _loc8_ = 1;
  78.          }
  79.          else
  80.          {
  81.             _loc14_ = _loc6_ * 0.01;
  82.             _loc7_ = _loc14_ * _loc4_ / backgroundImageWidth;
  83.             _loc8_ = _loc14_ * _loc5_ / backgroundImageHeight;
  84.          }
  85.          backgroundImage.scaleX = _loc7_;
  86.          backgroundImage.scaleY = _loc8_;
  87.          var _loc9_:Number = Math.round(0.5 * (_loc4_ - backgroundImageWidth * _loc7_));
  88.          var _loc10_:Number = Math.round(0.5 * (_loc5_ - backgroundImageHeight * _loc8_));
  89.          backgroundImage.x = _loc2_.left;
  90.          backgroundImage.y = _loc2_.top;
  91.          var _loc11_:Shape = Shape(backgroundImage.mask);
  92.          _loc11_.x = _loc2_.left;
  93.          _loc11_.y = _loc2_.top;
  94.          if(_loc3_ && _loc1_ is IContainer)
  95.          {
  96.             _loc9_ -= IContainer(_loc1_).horizontalScrollPosition;
  97.             _loc10_ -= IContainer(_loc1_).verticalScrollPosition;
  98.          }
  99.          backgroundImage.alpha = getStyle("backgroundAlpha");
  100.          backgroundImage.x += _loc9_;
  101.          backgroundImage.y += _loc10_;
  102.          var _loc12_:Number = width - _loc2_.left - _loc2_.right;
  103.          var _loc13_:Number = height - _loc2_.top - _loc2_.bottom;
  104.          if(_loc11_.width != _loc12_ || _loc11_.height != _loc13_)
  105.          {
  106.             _loc15_ = _loc11_.graphics;
  107.             _loc15_.clear();
  108.             _loc15_.beginFill(16777215);
  109.             _loc15_.drawRect(0,0,_loc12_,_loc13_);
  110.             _loc15_.endFill();
  111.          }
  112.       }
  113.       
  114.       public function set backgroundImageBounds(param1:Rectangle) : void
  115.       {
  116.          if(Boolean(_backgroundImageBounds) && Boolean(param1) && _backgroundImageBounds.equals(param1))
  117.          {
  118.             return;
  119.          }
  120.          _backgroundImageBounds = param1;
  121.          invalidateDisplayList();
  122.       }
  123.       
  124.       private function getBackgroundSize() : Number
  125.       {
  126.          var _loc3_:int = 0;
  127.          var _loc1_:Number = NaN;
  128.          var _loc2_:Object = getStyle("backgroundSize");
  129.          if(Boolean(_loc2_) && _loc2_ is String)
  130.          {
  131.             _loc3_ = int(_loc2_.indexOf("%"));
  132.             if(_loc3_ != -1)
  133.             {
  134.                _loc1_ = Number(_loc2_.substr(0,_loc3_));
  135.             }
  136.          }
  137.          return _loc1_;
  138.       }
  139.       
  140.       private function removedHandler(param1:Event) : void
  141.       {
  142.          var _loc2_:IChildList = null;
  143.          if(backgroundImage)
  144.          {
  145.             _loc2_ = parent is IRawChildrenContainer ? IRawChildrenContainer(parent).rawChildren : IChildList(parent);
  146.             _loc2_.removeChild(backgroundImage.mask);
  147.             _loc2_.removeChild(backgroundImage);
  148.             backgroundImage = null;
  149.          }
  150.       }
  151.       
  152.       private function initBackgroundImage(param1:DisplayObject) : void
  153.       {
  154.          backgroundImage = param1;
  155.          if(param1 is Loader)
  156.          {
  157.             backgroundImageWidth = Loader(param1).contentLoaderInfo.width;
  158.             backgroundImageHeight = Loader(param1).contentLoaderInfo.height;
  159.          }
  160.          else
  161.          {
  162.             backgroundImageWidth = backgroundImage.width;
  163.             backgroundImageHeight = backgroundImage.height;
  164.             if(param1 is ISimpleStyleClient)
  165.             {
  166.                ISimpleStyleClient(param1).styleName = styleName;
  167.             }
  168.          }
  169.          var _loc2_:IChildList = parent is IRawChildrenContainer ? IRawChildrenContainer(parent).rawChildren : IChildList(parent);
  170.          var _loc3_:Shape = new FlexShape();
  171.          _loc3_.name = "backgroundMask";
  172.          _loc3_.x = 0;
  173.          _loc3_.y = 0;
  174.          _loc2_.addChild(_loc3_);
  175.          var _loc4_:int = int(_loc2_.getChildIndex(this));
  176.          _loc2_.addChildAt(backgroundImage,_loc4_ + 1);
  177.          backgroundImage.mask = _loc3_;
  178.       }
  179.       
  180.       public function get backgroundImageBounds() : Rectangle
  181.       {
  182.          return _backgroundImageBounds;
  183.       }
  184.       
  185.       public function get hasBackgroundImage() : Boolean
  186.       {
  187.          return backgroundImage != null;
  188.       }
  189.       
  190.       private function completeEventHandler(param1:Event) : void
  191.       {
  192.          if(!parent)
  193.          {
  194.             return;
  195.          }
  196.          var _loc2_:DisplayObject = DisplayObject(LoaderInfo(param1.target).loader);
  197.          initBackgroundImage(_loc2_);
  198.          layoutBackgroundImage();
  199.          dispatchEvent(param1.clone());
  200.       }
  201.       
  202.       override protected function updateDisplayList(param1:Number, param2:Number) : void
  203.       {
  204.          var newStyle:Object;
  205.          var cls:Class = null;
  206.          var newStyleObj:DisplayObject = null;
  207.          var loader:Loader = null;
  208.          var loaderContext:LoaderContext = null;
  209.          var message:String = null;
  210.          var unscaledWidth:Number = param1;
  211.          var unscaledHeight:Number = param2;
  212.          if(!parent)
  213.          {
  214.             return;
  215.          }
  216.          newStyle = getStyle("backgroundImage");
  217.          if(newStyle != backgroundImageStyle)
  218.          {
  219.             removedHandler(null);
  220.             backgroundImageStyle = newStyle;
  221.             if(Boolean(newStyle) && Boolean(newStyle as Class))
  222.             {
  223.                cls = Class(newStyle);
  224.                initBackgroundImage(new cls());
  225.             }
  226.             else if(Boolean(newStyle) && newStyle is String)
  227.             {
  228.                try
  229.                {
  230.                   cls = Class(getDefinitionByName(String(newStyle)));
  231.                }
  232.                catch(e:Error)
  233.                {
  234.                }
  235.                if(cls)
  236.                {
  237.                   newStyleObj = new cls();
  238.                   initBackgroundImage(newStyleObj);
  239.                }
  240.                else
  241.                {
  242.                   loader = new FlexLoader();
  243.                   loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeEventHandler);
  244.                   loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorEventHandler);
  245.                   loader.contentLoaderInfo.addEventListener(ErrorEvent.ERROR,errorEventHandler);
  246.                   loaderContext = new LoaderContext();
  247.                   loaderContext.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
  248.                   loader.load(new URLRequest(String(newStyle)),loaderContext);
  249.                }
  250.             }
  251.             else if(newStyle)
  252.             {
  253.                message = resourceManager.getString("skins","notLoaded",[newStyle]);
  254.                throw new Error(message);
  255.             }
  256.          }
  257.          if(backgroundImage)
  258.          {
  259.             layoutBackgroundImage();
  260.          }
  261.       }
  262.       
  263.       private function errorEventHandler(param1:Event) : void
  264.       {
  265.       }
  266.    }
  267. }
  268.  
  269.