topical media & game development

talk show tell print

actionscript-extra-fisheye-qs-controls-BitmapTile.ax

actionscript-extra-fisheye-qs-controls-BitmapTile.ax [swf] flex


  package qs.controls
  {
  
          import mx.core.UIComponent;
          import flash.display.DisplayObject;
          import flash.filters.DropShadowFilter;
          import flash.net.URLRequest;
          import flash.utils.*;
  
          import mx.core.IDataRenderer;
          import flash.display.*;
          import mx.effects.*;
          import flash.events.Event;
          import mx.core.IDataRenderer;
          import flash.events.ProgressEvent;
          import flash.geom.Rectangle;
          
  
          [Style(name="borderColor", type="Number", inherit="no")]
          [Style(name="borderAlpha", type="Number", inherit="no")]
          [Style(name="borderWidth", type="Number", inherit="no")]
          [Event("loaded")]
          public class @ax-actionscript-extra-fisheye-qs-controls-BitmapTile extends UIComponent implements IDataRenderer
          {
                  private static var _nextId:int = 0;
                  private var _id:int;
                  private var _loader:Loader;
                  private var _loaded:Boolean = false;
                  private var _imageWidth:Number = 100;
                  private var _imageHeight:Number = 100;
                  private const BORDER_WIDTH:Number = 1;
                  private var _border:Shape;
                  
                  [Bindable] public var progress:Number = 0;
                  public function get loaded():Boolean
                  {
                          return _loaded;
                  }
                  
                  private function loadComplete(e:Event):void
                  {
                          _loaded = true;
                          _imageWidth = _loader.width;
                          _imageHeight = _loader.height;
                          addChildAt(_loader,0);
                          invalidateSize();
                          invalidateDisplayList();
                          invalidateSize();
                          dispatchEvent(new Event("loaded"));                        
                  }
                  
                  private var _publicAlpha:Number = 1;
                  private var _fadeValue:Number = 1;
                  private var _data:Object;
  
                  public function get imageBounds():Rectangle
                  {
                          var unscaledWidth:Number = this.unscaledWidth - 2;
                          var unscaledHeight:Number = this.unscaledHeight - 2;
                          var sX:Number = unscaledWidth/_imageWidth;
                          var sY:Number = unscaledHeight/_imageHeight;
                          var scale:Number = Math.min(sX,sY);
                          var tX:Number = 1 + unscaledWidth/2 - (_imageWidth/2)*scale;
                          var tY:Number = 1 + unscaledHeight/2 - (_imageHeight/2)*scale;
                          
                          return new Rectangle(tX,tY,_imageWidth*scale,_imageHeight*scale);
                          _loader.x = tX;
                          _loader.y = tY;
                  }
                  
                  public function set data(value:Object):void
                  {
                          _loaded = false;
                          progress= 0;
                          _data = value;
                          var url:String = String((_data is String)? _data:_data.thumb);
                          _loader.load(new URLRequest(url));
                          _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,loadComplete);        
                          _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,updateProgress);        
                          
                          invalidateDisplayList();
                          invalidateSize();
                  }
                  
                  public function get data():Object { return _data;}
                  
                  public function set fadeValue(value:Number):void
                  {
                          _fadeValue = value;
                          super.alpha = _publicAlpha*_fadeValue;
                  }
                  public function get fadeValue():Number {return _fadeValue;}
  
                  private function updateProgress(e:ProgressEvent):void
                  {
                          progress = e.bytesLoaded / e.bytesTotal;
                  }
                  override public function set alpha(value:Number):void
                  {
                          _publicAlpha = value;
                          super.alpha = _publicAlpha*_fadeValue;
                  }
                  public function @ax-actionscript-extra-fisheye-qs-controls-BitmapTile()
                  {
                          _id= _nextId++;
  
                          _loader = new Loader;
                          
  //                        visible = false;
                          
                          _border = new Shape();
                          addChild(_border);
  
                  }
  
                  override protected function measure():void
                  {
                          measuredWidth = _imageWidth+2;
                          measuredHeight = _imageHeight+2;
                  }
                  override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
                  {
                                  
                          var g:Graphics = _border.graphics;
                          g.clear();
  
                          if(_loaded == false)
                                  return;
                          
                          var borderColor:* = getStyle("borderColor");
                          var borderAlpha:* = getStyle("borderAlpha");
                          var borderWidth:* = getStyle("borderWidth");
                          
                          if(isNaN(borderColor) || borderColor == null)
                                  borderColor = 0xBBBBBB;
                          if(isNaN(borderAlpha) || borderAlpha == null)
                                  borderAlpha = 1;
                          if(isNaN(borderWidth) || borderWidth == null)
                                  borderWidth = BORDER_WIDTH;                                
                                  
                          unscaledWidth -= 2;
                          unscaledHeight -= 2;
                          var sX:Number = unscaledWidth/_imageWidth;
                          var sY:Number = unscaledHeight/_imageHeight;
                          var scale:Number = Math.min(sX,sY);
                          var tX:Number = 1 + unscaledWidth/2 - (_imageWidth/2)*scale;
                          var tY:Number = 1 + unscaledHeight/2 - (_imageHeight/2)*scale;
  
                          _loader.width = _imageWidth*scale;
                          _loader.height = _imageHeight*scale;
                          _loader.x = tX;
                          _loader.y = tY;
                                                          
                          g.lineStyle(borderWidth,borderColor,borderAlpha,false,"normal",CapsStyle.NONE,JointStyle.MITER);
                          g.moveTo(tX+borderWidth/2,tY+borderWidth/2);
                          g.lineTo(tX+_loader.width-borderWidth/2,tY+borderWidth/2);
                          g.lineTo(tX+_loader.width-borderWidth/2,tY+_loader.height-borderWidth/2);
                          g.lineTo(tX+borderWidth/2,tY+_loader.height-borderWidth/2);
                          g.lineTo(tX+borderWidth/2,tY+borderWidth/2);
  
                  }
          }
  }


(C) Æliens 27/08/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.