You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by yi...@apache.org on 2020/09/30 20:39:13 UTC

[royale-asjs] 02/02: Make BitmapImage an alias for mx Image

This is an automated email from the ASF dual-hosted git repository.

yishayw pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git

commit 3a1bec20172345a3686c9c4728ef6262b9b83150
Author: Yishay Weiss <yi...@yell.com>
AuthorDate: Wed Sep 30 21:38:48 2020 +0100

    Make BitmapImage an alias for mx Image
---
 .../main/royale/spark/primitives/BitmapImage.as    | 2072 +-------------------
 .../src/main/royale/spark/primitives/Graphic.as    |    2 +-
 2 files changed, 5 insertions(+), 2069 deletions(-)

diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/BitmapImage.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/BitmapImage.as
index 9c4fb34..2013f26 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/BitmapImage.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/BitmapImage.as
@@ -19,2073 +19,9 @@
 
 package spark.primitives
 {
+	import mx.controls.Image;
 
-/* import flash.display.Bitmap;
-import flash.display.BitmapData;
-import flash.display.DisplayObject;
-import flash.display.DisplayObjectContainer;
-import flash.display.Graphics;
-import flash.display.Loader;
-import flash.display.LoaderInfo;
-import flash.display.Sprite;
-import flash.events.Event;
-import flash.events.HTTPStatusEvent;
-import flash.events.IOErrorEvent;
-import flash.events.ProgressEvent;
-import flash.events.SecurityErrorEvent;
-import flash.geom.Matrix;
-import flash.geom.Point;
-import flash.geom.Rectangle;
-import flash.net.URLRequest;
-import flash.system.ApplicationDomain;
-import flash.system.Capabilities;
-import flash.system.LoaderContext;
-import flash.utils.ByteArray;
-
-import mx.core.FlexGlobals;
-import mx.core.IInvalidating;
-import mx.core.mx_internal;
-import mx.events.FlexEvent;
-import mx.graphics.BitmapFillMode;
-import mx.graphics.BitmapScaleMode;
-import mx.graphics.BitmapSmoothingQuality;
-import mx.utils.DensityUtil;
-import mx.utils.LoaderUtil;
-
-import spark.core.ContentRequest;
-import spark.core.DisplayObjectSharingMode;
-import spark.core.IContentLoader;
-import spark.layouts.HorizontalAlign;
-import spark.layouts.VerticalAlign;
-import spark.primitives.supportClasses.GraphicElement;
-import spark.utils.MultiDPIBitmapSource;
-
-use namespace mx_internal; */
-import mx.core.mx_internal;
-import org.apache.royale.events.EventDispatcher;
-use namespace mx_internal;
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when content loading is complete. This
- *  event is only dispatched for url and ByteArray based
- *  sources (those sources requiring a Loader).
- *
- *  <p>Note that for content loaded via Loader, both
- *  <code>ready</code> and <code>complete</code> events
- *  are dispatched.</p>  For other source types such as
- *  embeds, only <code>ready</code> is dispatched.
- *
- *  @eventType flash.events.Event.COMPLETE
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="complete", type="flash.events.Event")]
-
-/**
- *  Dispatched when a network request is made over HTTP
- *  and Flash Player or AIR can detect the HTTP status code.
- *
- *  @eventType flash.events.HTTPStatusEvent.HTTP_STATUS
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="httpStatus", type="flash.events.HTTPStatusEvent")]
-
-/**
- *  Dispatched when an input/output error occurs.
- *  @see flash.events.IOErrorEvent
- *
- *  @eventType flash.events.IOErrorEvent.IO_ERROR
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="ioError", type="flash.events.IOErrorEvent")]
-
-/**
- *  Dispatched when content is loading.
- *
- *  <p><strong>Note:</strong>
- *  The <code>progress</code> event is not guaranteed to be dispatched.
- *  The <code>complete</code> event may be received, without any
- *  <code>progress</code> events being dispatched.
- *  This can happen when the loaded content is a local file.</p>
- *
- *  @eventType flash.events.ProgressEvent.PROGRESS
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="progress", type="flash.events.ProgressEvent")]
-
-/**
- *  Dispatched when content loading is complete.  Unlike the
- *  <code>complete</code> event, this event is dispatched for
- *  all source types.
- *
- *  <p>Note that for content loaded via Loader, both
- *  <code>ready</code> and <code>complete</code> events
- *  are dispatched.</p>  For other source types such as
- *  embeds, only <code>ready</code> is dispatched.
- *
- *  @eventType mx.events.FlexEvent.READY
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="ready", type="mx.events.FlexEvent")]
-
-/**
- *  Dispatched when a security error occurs.
- *  @see flash.events.SecurityErrorEvent
- *
- *  @eventType flash.events.SecurityErrorEvent.SECURITY_ERROR
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-//[Event(name="securityError", type="flash.events.SecurityErrorEvent")]
-//
-/**
- *  A BitmapImage element defines a rectangular region in its parent element's
- *  coordinate space, filled with bitmap data drawn from a source file or
- *  source URL.
- *
- *  @includeExample examples/BitmapImageExample.mxml
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 2.0
- *  @productversion Royale 0.9.4
- */
-public class BitmapImage extends EventDispatcher
-{ //extends GraphicElement
-    //include "../core/Version.as";
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    public function BitmapImage()
-    {
-        super();
-
-        // Typically, this should not be mirrored.
-       // layoutDirection = "ltr";
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-
-	
-public function set left(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-	
-public function set right(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-	
-public function set top(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-	
-public function set bottom(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-	
-public function set minWidth(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-	
-public function set minHeight(value:Number):void
-{
-	// stub - this should be removed once BitmapImage extends the right class;
-}
-
-/* 
-    private var _scaleGridBottom:Number;
-    private var _scaleGridLeft:Number;
-    private var _scaleGridRight:Number;
-    private var _scaleGridTop:Number;
-    private var bitmapDataCreated:Boolean;
-    private static var matrix:Matrix = new Matrix();
-    private var cachedSourceGrid:Array;
-    private var cachedDestGrid:Array;
-    private var imageWidth:Number = NaN;
-    private var imageHeight:Number = NaN;
-    private var loadedContent:DisplayObject;
-    private var loadingContent:Object;
-    private var previousUnscaledWidth:Number;
-    private var previousUnscaledHeight:Number;
-    private var sourceInvalid:Boolean;
-    private var loadFailed:Boolean;
-	private var dpiScale:Number = 1;
-	private var _cachedImageDecodePolicy:Boolean;
-	private var _haveCachedImageDecodePolicy:Boolean; */
-	
-	
-	/**
-	 *  Specifies that the image being loaded will be decoded when needed.
-	 * 
-	 *  @see flash.system.ImageDecodingPolicy
-	 * 
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10
-	 *  @playerversion AIR 1.5
-	 *  @productversion Royale 0.9.4
-	 */
-	//public static const ON_DEMAND:String = "onDemand";
-
-	/**
-	 *  Specifies that the image being loaded will be decoded on load.
-	 * 
-	 *  @see flash.system.ImageDecodingPolicy
-	 * 
-	 *  @langversion 3.0
-	 *  @playerversion Flash 10
-	 *  @playerversion AIR 1.5
-	 *  @productversion Royale 0.9.4
-	 */
-	//public static const ON_LOAD:String = "onLoad";
-
-    //----------------------------------
-    //  bitmapData
-    //----------------------------------
-
-   // private var _bitmapData:BitmapData;
-
-    /**
-     *  Returns a copy of the BitmapData object representing
-     *  the currently loaded image content (unscaled).  This property
-     *  is <code>null</code> for untrusted cross domain content.
-     *
-     *  @default null
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.0
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get bitmapData():BitmapData
-    {
-		//We return a copy because when the source of the data changes we destroy the bitmap
-		//If a developer is holding a reference to the actual bitmap they will have an invalid reference
-        return _bitmapData ? _bitmapData.clone() : _bitmapData;
-    } */
-
-    //----------------------------------
-    //  bytesLoaded
-    //----------------------------------
-
-   // private var _bytesLoaded:Number = NaN;
-
-    /**
-     *  The number of bytes of the image already loaded.
-     *  Only relevant for images loaded by request URL.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.0
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get bytesLoaded():Number
-    {
-        return _bytesLoaded;
-    } */
-
-    //----------------------------------
-    //  bytesTotal
-    //----------------------------------
-
-    //private var _bytesTotal:Number = NaN;
-
-    /**
-     *  The total image data in bytes loaded or pending load.
-     *  Only relevant for images loaded by request URL.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.0
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get bytesTotal():Number
-    {
-        return _bytesTotal;
-    } */
-
-    //----------------------------------
-    //  clearOnLoad
-    //----------------------------------
-
-    //private var _clearOnLoad:Boolean = true;
-
-    /**
-     *  Denotes whether or not to clear previous
-     *  image content prior to loading new content.
-     *
-     *  @default true
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.0
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get clearOnLoad():Boolean
-    {
-        return _clearOnLoad;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set clearOnLoad(value:Boolean):void
-    {
-        _clearOnLoad = value;
-    } */
-
-    //----------------------------------
-    //  contentLoaderGrouping
-    //----------------------------------
-
-    //private var _contentLoaderGrouping:String;
-
-    /**
-     *  Optional content grouping identifier to pass to the an
-     *  associated IContentLoader instance's load() method.
-     *  This property is only considered when a valid contentLoader
-     *  is assigned.
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get contentLoaderGrouping():String
-    {
-        return _contentLoaderGrouping;
-    } */
-
-    /**
-     *  @private
-     */
-   /*  public function set contentLoaderGrouping(value:String):void
-    {
-        if (value != _contentLoaderGrouping)
-        {
-            _contentLoaderGrouping = value;
-            invalidateProperties();
-        }
-    } */
-
-    //----------------------------------
-    //  contentLoader
-    //----------------------------------
-
-    /* private var _contentLoader:IContentLoader;
-    private var contentLoaderInvalid:Boolean;
-	*/
-    /**
-     *  Optional custom image loader (e.g. image cache or queue) to
-     *  associate with content loader client.
-     *
-     *  @default null
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get contentLoader():IContentLoader
-    {
-        return _contentLoader;
-    } */
-
-    /**
-     *  @private
-     */
-   /*  public function set contentLoader(value:IContentLoader):void
-    {
-        if (value != _contentLoader)
-        {
-            _contentLoader = value;
-            contentLoaderInvalid = true;
-            invalidateProperties();
-        }
-    } */
-
-    //----------------------------------
-    //  fillMode
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-  /*   protected var _fillMode:String = BitmapFillMode.SCALE;
-
-    [Inspectable(category="General", enumeration="clip,repeat,scale", defaultValue="scale")] */
-
-    /**
-     *  Determines how the bitmap fills in the dimensions. If you set the value
-     *  of this property in a tag, use the string (such as "repeat"). If you set the value of
-     *  this property in ActionScript, use the constant (such as <code>mx.graphics.BitmapFillMode.CLIP</code>).
-     *
-     *  <p>When set to <code>BitmapFillMode.CLIP</code> ("clip"), the bitmap
-     *  ends at the edge of the region.</p>
-     *
-     *  <p>When set to <code>BitmapFillMode.REPEAT</code> ("repeat"), the bitmap
-     *  repeats to fill the region.</p>
-     *
-     *  <p>When set to <code>BitmapFillMode.SCALE</code> ("scale"), the bitmap
-     *  stretches to fill the region.</p>
-     *
-     *  @default <code>BitmapFillMode.SCALE</code>
-     *
-     *  @see mx.graphics.BitmapFillMode
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get fillMode():String
-    {
-        return _fillMode;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set fillMode(value:String):void
-    {
-        if (value != _fillMode)
-        {
-            _fillMode = value;
-            invalidateDisplayList();
-        }
-    } */
-
-    //----------------------------------
-    //  horizontalAlign
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    /* private var _horizontalAlign:String = HorizontalAlign.CENTER;
-
-    [Inspectable(category="General", enumeration="left,right,center", defaultValue="center")] */
-
-    /**
-     *  The horizontal alignment of the content when it does not have
-     *  a one-to-one aspect ratio and <code>scaleMode</code> is set to
-     *  <code>mx.graphics.BitmapScaleMode.LETTERBOX</code>.
-     *
-     *  <p>Can be one of <code>HorizontalAlign.LEFT</code> ("left"),
-     *  <code>HorizontalAlign.RIGHT</code> ("right"), or
-     *  <code>HorizontalAlign.CENTER</code> ("center").</p>
-     *
-     *  <p>This property is only applicable when <code>fillMode</code> is set to
-     *  to <code>mx.graphics.BitmapFillMode.SCALE</code> ("scale").</p>
-     *
-     *  @default <code>HorizontalAlign.CENTER</code>
-     *
-     *  @see mx.graphics.BitmapFillMode
-     *  @see mx.graphics.BitmapScaleMode
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get horizontalAlign():String
-    {
-        return _horizontalAlign;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set horizontalAlign(value:String):void
-    {
-        if (value == _horizontalAlign)
-            return;
-
-        _horizontalAlign = value;
-        invalidateDisplayList();
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function getHorizontalAlignValue():Number
-    {
-        if (_horizontalAlign == HorizontalAlign.LEFT)
-            return 0;
-        else if (_horizontalAlign == HorizontalAlign.RIGHT)
-            return 1;
-        else
-            return 0.5;
-    }
-	 */
-	/**
-	 *  The image decoding policy, set to ON_DEMAND or ON_LOAD.
-	 *  The default is ON_DEMAND.
-	 * 
-	 *  ImageDecodingPolicy also defined ON_DEMAND and ON_LOAD but these
-	 *  are only available under AIR 2.6 and above.
-	 * 
-	 *  Setting to asynchronously decode and load the bitmap images for
-	 *  large image may improve your application’s perceived performance.
-	 * 
-	 *  @langversion 3.0
-	 *  @playerversion AIR 2.6
-	 *  @productversion Royale 0.9.4
-	 */
-	//public var imageDecodingPolicy:String = ON_DEMAND;
-
-    //----------------------------------
-    //  preliminaryHeight
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    //private var _preliminaryHeight:Number = NaN;
-
-    /**
-     *  Provides an estimate to use for height when the "measured" bounds
-     *  of the image is requested by layout, but the image data has
-     *  yet to complete loading. When NaN the measured height is 0 until
-     *  the image has finished loading.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get preliminaryHeight():Number
-    {
-        return _preliminaryHeight;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set preliminaryHeight(value:Number):void
-    {
-        if (value != _preliminaryHeight)
-        {
-            _preliminaryHeight = value;
-            invalidateSize();
-        }
-    } */
-
-    //----------------------------------
-    //  preliminaryWidth
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-   // private var _preliminaryWidth:Number = NaN;
-
-    /**
-     *  Provides an estimate to use for width when the "measured" bounds
-     *  of the image is requested by layout, but the image data has
-     *  yet to complete loading. When NaN the measured width is 0 until
-     *  the image has finished loading.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get preliminaryWidth():Number
-    {
-        return _preliminaryWidth;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set preliminaryWidth(value:Number):void
-    {
-        if (value != _preliminaryWidth)
-        {
-            _preliminaryWidth = value;
-            invalidateSize();
-        }
-    } */
-
-    //----------------------------------
-    //  scaleMode
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-    /* private var _scaleMode:String = BitmapScaleMode.STRETCH;
-
-    [Inspectable(category="General", enumeration="stretch,letterbox,zoom", defaultValue="stretch")] */
-
-    /**
-     *  Determines how the image is scaled when <code>fillMode</code> is set to
-     *  <code>mx.graphics.BitmapFillMode.SCALE</code>.
-     *
-     *  <p>When set to <code>mx.graphics.BitmapScaleMode.STRETCH</code> ("stretch"),
-     *  the image is stretched to fit.</p>
-     *
-     *  <p>When set to <code>BitmapScaleMode.LETTERBOX</code> ("letterbox"),
-     *  the image is scaled with respect to the original unscaled image's
-     *  aspect ratio.</p>
-     *
-     *  <p>When set to <code>BitmapScaleMode.ZOOM</code> ("zoom"),
-     *  the image is scaled to fit with respect to the original unscaled image's
-     *  aspect ratio. This results in cropping on one axis.</p>
-     *
-     *  @default <code>BitmapScaleMode.STRETCH</code>
-     *
-     *  @see mx.graphics.BitmapFillMode
-     *  @see mx.graphics.BitmapScaleMode
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.0
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get scaleMode():String
-    {
-        return _scaleMode;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set scaleMode(value:String):void
-    {
-        if (value == _scaleMode)
-            return;
-
-        _scaleMode = value;
-        invalidateDisplayList();
-    } */
-
-    //----------------------------------
-    //  smooth
-    //----------------------------------
-
-   /*  private var _smooth:Boolean = false;
-
-    [Inspectable(category="General", enumeration="true,false", defaultValue="false")] */
-
-    /**
-     *  @copy flash.display.GraphicsBitmapFill#smooth
-     *
-     *  @default false
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function set smooth(value:Boolean):void
-    {
-        if (value != _smooth)
-        {
-            _smooth = value;
-            invalidateDisplayList();
-        }
-    } */
-
-    /**
-     *  @private
-     */
-   /*  public function get smooth():Boolean
-    {
-        return _smooth;
-    } */
-
-    //----------------------------------
-    //  smoothingQuality
-    //----------------------------------
-
-  /*   private var _smoothingQuality:String = BitmapSmoothingQuality.DEFAULT;
-
-    [Inspectable(category="General", enumeration="default,high", defaultValue="default")] */
-
-    /**
-     *  Determines how the image is down-scaled.  When set to
-     *  <code>BitmapSmoothingQuality.HIGH</code>, the image is resampled (if data
-     *  is from a trusted source) to achieve a higher quality result.
-     *  If set to <code>BitmapSmoothingQuality.DEFAULT</code>, the default stage
-     *  quality for scaled bitmap fills is used.
-     *
-     *  @default <code>BitmapSmoothingQuality.DEFAULT</code>
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function set smoothingQuality(value:String):void
-    {
-        if (value != _smoothingQuality)
-        {
-            _smoothingQuality = value;
-            invalidateDisplayList();
-        }
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function get smoothingQuality():String
-    {
-        return _smoothingQuality;
-    }
-	*/
-    //----------------------------------
-    //  source
-    //----------------------------------
-
-    private var _source:Object;
-
-    [Bindable("sourceChanged")]
-    [Inspectable(category="General")]
-
-    /**
-     *  The source used for the bitmap fill. The fill can render from various
-     *  graphical sources, including the following:
-     *  <ul>
-     *   <li>A Bitmap or BitmapData instance.</li>
-     *   <li>A class representing a subclass of DisplayObject. The BitmapFill
-     *       instantiates the class and creates a bitmap rendering of it.</li>
-     *   <li>An instance of a DisplayObject. The BitmapFill copies it into a
-     *       Bitmap for filling.</li>
-     *   <li>The name of an external image file. </li>
-     *  </ul>
-     *
-     *  <p>If you use an image file for the source, it can be of type PNG, GIF,
-     *  or JPG.</p>
-     *
-     *  <p>To specify an embedded image source, you can use the &#64;Embed directive,
-     *  as the following example shows:
-     *  <pre>
-     *  source="&#64;Embed('&lt;i&gt;image_location&lt;/i&gt;')"
-     *  </pre>
-     *  </p>
-     *
-     *  <p>The image location can be specified via a URL, URLRequest, or file
-     *  reference. If it is a file reference, its location is relative to the
-     *  location of the file that is being compiled.</p>
-     *
-     *  <p>The BitmapImage class is designed to work with embedded images or
-     *  images that are loaded at run time.</p>
-     *
-     *  <p>If the source is a Bitmap or BitmapData instance or is an external
-     *  image file, it is the responsibility of the caller to dispose of the
-     *  source once it is no longer needed. If ImageLoader created the BitmapData
-     *  instance, then it will dispose of the BitmapData once the source has
-     *  changed.</p>
-     *
-     *  @see flash.display.Bitmap
-     *  @see flash.display.BitmapData
-     *  @see mx.graphics.BitmapFill
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    public function get source():Object
-    {
-        return _source;
-    }
-
-    /**
-     *  @private
-     */
-    public function set source(value:Object):void
-    {
-        if (value != _source)
-        {
-            // Remove listeners from any previous load instance and clear
-            // our reference to any existing load-event dispatcher. This ensures
-            // for example that we do not receive further load related events
-            // our previous content before we can consider the new source.
-            /* clearLoadingContent();
-
-            // Remove any event listeners from previous source.
-            removeAddedToStageHandler(_source); */
-
-            _source = value;
-            /* sourceInvalid = true;
-            loadFailed = false;
-            invalidateProperties();
-            dispatchEvent(new Event("sourceChanged")); */
-        }
-    }
-
-    //----------------------------------
-    //  sourceHeight
-    //----------------------------------
-
-    /**
-     *  Provides the unscaled height of the original image data.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get sourceHeight():Number
-    {
-        return imageHeight;
-    } */
-
-    //----------------------------------
-    //  sourceWidth
-    //----------------------------------
-
-    /**
-     *  Provides the unscaled width of the original image data.
-     *
-     *  @default NaN
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get sourceWidth():Number
-    {
-        return imageWidth;
-    } */
-
-    //----------------------------------
-    //  trustedSource
-    //----------------------------------
-
-   // private var _trustedSource:Boolean = true;
-
-    /**
-     *  A read-only flag denoting whether the currently loaded
-     *  content is considered loaded form a source whose security
-     *  policy allows for cross domain image access.
-     *  When <code>false</code>, advanced bitmap operations such as high quality scaling,
-     *  and tiling are not permitted.  This flag is set once an
-     *  image has been fully loaded.
-     *
-     *  @default true
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 9
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* public function get trustedSource():Boolean
-    {
-        return _trustedSource;
-    } */
-
-    //----------------------------------
-    //  verticalAlign
-    //----------------------------------
-
-    /**
-     *  @private
-     */
-   /*  private var _verticalAlign:String = VerticalAlign.MIDDLE;
-
-    [Inspectable(category="General", enumeration="top,bottom,middle", defaultValue="middle")] */
-
-    /**
-     *  The vertical alignment of the content when it does not have
-     *  a one-to-one aspect ratio and scaleMode is set to
-     *  <code>mx.graphics.BitmapScaleMode.LETTERBOX</code>.
-     *
-     *  <p>Can be one of <code>VerticalAlign.TOP</code> ("top"),
-     *  <code>VerticalAlign.BOTTOM</code> ("bottom"), or
-     *  <code>VerticalAlign.MIDDLE</code> ("middle").</p>
-     *
-     *  <p>This property is only applicable when scaleMode is set to
-     *  to <code>BitmapFillMode.SCALE</code> ("scale").</p>
-     *
-     *  @default <code>VerticalAlign.MIDDLE</code>
-     *
-     *  @see mx.graphics.BitmapFillMode
-     *  @see mx.graphics.BitmapScaleMode
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-   /*  public function get verticalAlign():String
-    {
-        return _verticalAlign;
-    } */
-
-    /**
-     *  @private
-     */
-    /* public function set verticalAlign(value:String):void
-    {
-        if (value == _verticalAlign)
-            return;
-
-        _verticalAlign = value;
-        invalidateDisplayList();
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function getVerticalAlignValue():Number
-    {
-        if (_verticalAlign == VerticalAlign.TOP)
-            return 0;
-        else if (_verticalAlign == VerticalAlign.BOTTOM)
-            return 1;
-        else
-            return 0.5;
-    } */
-
-    //--------------------------------------------------------------------------
-    //
-    //  GraphicElement Overrides
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* override protected function commitProperties():void
-    {
-        validateSource();
-        super.commitProperties();
-    } */
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* override protected function measure():void
-    {
-        var app:Object = FlexGlobals.topLevelApplication;
-        if ("applicationDPI" in app && "runtimeDPI" in app && source is MultiDPIBitmapSource)
-            dpiScale = app.runtimeDPI / app.applicationDPI;
-
-        if (loadedContent)
-        {
-            // Return size of our loaded image content.
-            measuredWidth = imageWidth;
-            measuredHeight = imageHeight;
-            if (dpiScale != 1) // density scaling may be in effect
-            {
-                measuredWidth /= dpiScale;
-                measuredHeight /= dpiScale;
-            }
-        }
-        else if (_bitmapData)
-        {
-            // Return size of our bitmap data.
-            measuredWidth = _bitmapData.width;
-            measuredHeight = _bitmapData.height;
-            if (dpiScale != 1) // density scaling may be in effect
-            {
-                measuredWidth /= dpiScale;
-                measuredHeight /= dpiScale;
-            }
-        }
-        else
-        {
-            // If we are loading new content we keep the old measured width/height to avoid
-            // sizing to 0,0 for a frame unnecessarily. Otherwise we fall back to 0 unless
-            // a preliminaryWidth/Height is set.
-            var usePreviousSize:Boolean = !(_source == null || _source == "" || loadFailed);
-            var previousWidth:Number = usePreviousSize ? measuredWidth : 0;
-            var previousHeight:Number = usePreviousSize ? measuredHeight : 0;
-
-            measuredWidth = !isNaN(_preliminaryWidth) && (previousWidth == 0) ?
-                _preliminaryWidth : previousWidth;
-            measuredHeight = !isNaN(_preliminaryHeight) && (previousHeight == 0) ?
-                _preliminaryHeight : previousHeight;
-
-            return;
-        }
-
-        // Consider aspectRatio
-        if (maintainAspectRatio && measuredWidth > 0 && measuredHeight > 0)
-        {
-            if(!isNaN(explicitWidth) && isNaN(explicitHeight) &&
-                isNaN(percentHeight))
-            {
-                measuredHeight = explicitWidth/measuredWidth * measuredHeight;
-            }
-            else if (!isNaN(explicitHeight) && isNaN(explicitWidth) &&
-                isNaN(percentWidth))
-            {
-                measuredWidth = explicitHeight/measuredHeight * measuredWidth;
-            }
-            else if (!isNaN(percentWidth) && isNaN(explicitHeight) &&
-                isNaN(percentHeight) && width > 0)
-            {
-                measuredHeight = width/measuredWidth * measuredHeight;
-            }
-            else if (!isNaN(percentHeight) && isNaN(explicitWidth) &&
-                isNaN(percentWidth) && height > 0)
-            {
-                measuredWidth = height/measuredHeight * measuredWidth;
-            }
-        }
-    } */
-
-    /**
-     *  @inheritDoc
-     *
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     */
-    /* override protected function updateDisplayList(unscaledWidth:Number,
-                                                  unscaledHeight:Number):void
-    {
-        super.updateDisplayList(unscaledWidth, unscaledHeight);
-
-        var adjustedHeight:Number = unscaledHeight;
-        var adjustedWidth:Number = unscaledWidth;
-        var isZoom:Boolean = (_fillMode == BitmapFillMode.SCALE) && 
-                             (_scaleMode == BitmapScaleMode.ZOOM);
-
-        // Consider aspectRatio
-        var aspectRatio:Number = unscaledWidth/unscaledHeight;
-        var imageAspectRatio:Number = imageWidth/imageHeight;
-        if (maintainAspectRatio)
-        {
-            if (!isNaN(imageAspectRatio))
-            {
-                if (imageAspectRatio > aspectRatio)
-                    adjustedHeight = unscaledWidth / imageAspectRatio;
-                else
-                    adjustedWidth = unscaledHeight * imageAspectRatio;
-                
-                if ((!isNaN(percentWidth) && isNaN(percentHeight) && isNaN(explicitHeight)) ||
-                    (!isNaN(percentHeight) && isNaN(percentWidth) && isNaN(explicitWidth)))
-                {
-                    if (Math.abs(aspectRatio - imageAspectRatio) > 0.001)
-                    {
-                        invalidateSize();
-                        return;
-                    }
-                }
-            }
-        }
-
-        if (!_bitmapData || !drawnDisplayObject || !(drawnDisplayObject is Sprite))
-        {
-            if (loadedContent)
-            {
-                // We are hosting a display object so let's scale, align, and clip
-                // as necessary.
-
-                if (_fillMode == BitmapFillMode.SCALE)
-                {
-                    loadedContent.width = adjustedWidth;
-                    loadedContent.height = adjustedHeight;
-                }
-
-                loadedContent.y = loadedContent.x = 0;
-
-                // Align our loaded content as necessary if our width
-                // and/or height is larger than our content height.
-                if (maintainAspectRatio || _fillMode == BitmapFillMode.CLIP || isZoom)
-                {
-                    var contentWidth:Number = (_fillMode == BitmapFillMode.CLIP || isZoom) ?
-                        imageWidth : adjustedWidth;
-                    var contentHeight:Number = (_fillMode == BitmapFillMode.CLIP || isZoom) ?
-                        imageHeight : adjustedHeight;
-
-                    if (unscaledHeight > contentHeight)
-                        loadedContent.y = Math.floor((unscaledHeight - contentHeight)
-                            * getVerticalAlignValue());
-
-                    if (unscaledWidth > contentWidth)
-                        loadedContent.x = Math.floor((unscaledWidth - contentWidth)
-                            * getHorizontalAlignValue());
-                }
-
-                // Setup clip rect if appropriate.
-                loadedContent.scrollRect = (_fillMode == BitmapFillMode.CLIP || isZoom) ?
-                    new Rectangle(0, 0, unscaledWidth, unscaledHeight) : null;
-
-            }
-            return;
-        }
-
-        // The base GraphicElement class has cleared the graphics for us.
-        var g:Graphics = Sprite(drawnDisplayObject).graphics;
-
-        g.lineStyle();
-        var repeatBitmap:Boolean = false;
-        var fillScaleX:Number = 1/dpiScale;
-        var fillScaleY:Number = 1/dpiScale;
-        var roundedDrawX:Number = Math.round(drawX);
-        var roundedDrawY:Number = Math.round(drawY);
-        var fillWidth:Number = adjustedWidth;
-        var fillHeight:Number = adjustedHeight;
-        
-        if (_bitmapData)
-        {
-            switch(_fillMode)
-            {
-                case BitmapFillMode.REPEAT:
-                {
-                    repeatBitmap = true;
-                    break;
-                }
-                case BitmapFillMode.SCALE:
-                {
-                    if (isZoom)
-                    {
-                        var widthRatio:Number = adjustedWidth / _bitmapData.width;
-                        var heightRatio:Number = adjustedHeight / _bitmapData.height;
-                        
-                        if (widthRatio < heightRatio)
-                            fillScaleX = fillScaleY = (adjustedHeight / _bitmapData.height);
-                        else
-                            fillScaleX = fillScaleY = (adjustedWidth / _bitmapData.width);
-                    }
-                    else
-                    {
-                        fillScaleX = adjustedWidth / _bitmapData.width;
-                        fillScaleY = adjustedHeight / _bitmapData.height;
-                    }
-                    break;
-                }
-                case BitmapFillMode.CLIP:
-                {
-                    fillWidth = Math.min(adjustedWidth, _bitmapData.width);
-                    fillHeight = Math.min(adjustedHeight, _bitmapData.height);
-                    break;
-                }
-            }
-        }
-
-        // If no scaleGrid is defined or if fillMode != SCALE, just draw
-        // the entire rect
-        if (_fillMode != BitmapFillMode.SCALE ||
-            isNaN(_scaleGridTop) ||
-            isNaN(_scaleGridBottom) ||
-            isNaN(_scaleGridLeft) ||
-            isNaN(_scaleGridRight))
-        {
-            var sampledScale:Boolean = _smooth &&
-                (_smoothingQuality == BitmapSmoothingQuality.HIGH) &&
-                (_fillMode == BitmapFillMode.SCALE);
-            var sampleWidth:Number = fillWidth;
-            var sampleHeight:Number = fillHeight;
-            
-            if (isZoom)
-            {
-                sampleWidth = _bitmapData.width * fillScaleX;
-                sampleHeight = _bitmapData.height * fillScaleY;
-            }
-
-            var b:BitmapData = sampledScale ? resample(_bitmapData, sampleWidth, sampleHeight) : _bitmapData;
-
-            if (sampledScale && (_fillMode == BitmapFillMode.SCALE))
-            {
-                if (isZoom)
-                {
-                    fillScaleX = fillScaleY = 1;
-                }
-                else if (_fillMode == BitmapFillMode.SCALE)
-                {
-                    fillScaleX = adjustedWidth / b.width;
-                    fillScaleY = adjustedHeight / b.height;
-                }
-            }
-            
-            var cHeight:Number = b.height * fillScaleX;
-            var cWidth:Number = b.width * fillScaleY;
-
-            // Align our bitmap content as necessary if our width
-            // and/or height is larger than our content height.
-            if (maintainAspectRatio || _fillMode == BitmapFillMode.CLIP || isZoom)
-            {
-                if (unscaledHeight > cHeight)
-                    roundedDrawY = roundedDrawY + Math.floor((unscaledHeight - cHeight)
-                        * getVerticalAlignValue());
-
-                if (unscaledWidth > cWidth)
-                    roundedDrawX = roundedDrawX + Math.floor((unscaledWidth - cWidth)
-                        * getHorizontalAlignValue());
-            }
-            
-            var translateX:Number = roundedDrawX;
-            var translateY:Number = roundedDrawY;
-            
-            if (isZoom)
-            {
-                if (cWidth > unscaledWidth)
-                    translateX = translateX + ((unscaledWidth - cWidth) * getHorizontalAlignValue());
-                else if (cHeight > unscaledHeight)
-                    translateY = translateY + ((unscaledHeight - cHeight) * getVerticalAlignValue());
-            }
-
-            matrix.identity();
-            if (!(sampledScale && (maintainAspectRatio || isZoom))) 
-                matrix.scale(fillScaleX, fillScaleY);
-            matrix.translate(translateX, translateY);
-            g.beginBitmapFill(b, matrix, repeatBitmap, _smooth);
-            g.drawRect(roundedDrawX, roundedDrawY, fillWidth, fillHeight);
-            g.endFill();
-        }
-        else
-        {
-            // If we have scaleGrid, we draw 9 sections, each with a different scale factor based
-            // on the grid region.
-
-            if (cachedSourceGrid == null)
-            {
-                // Generate the 16 points of the source (unscaled) grid
-                cachedSourceGrid = [];
-                cachedSourceGrid.push([new Point(0, 0), new Point(_scaleGridLeft, 0),
-                    new Point(_scaleGridRight, 0), new Point(_bitmapData.width, 0)]);
-                cachedSourceGrid.push([new Point(0, _scaleGridTop), new Point(_scaleGridLeft, _scaleGridTop),
-                    new Point(_scaleGridRight, _scaleGridTop), new Point(_bitmapData.width, _scaleGridTop)]);
-                cachedSourceGrid.push([new Point(0, _scaleGridBottom), new Point(_scaleGridLeft, _scaleGridBottom),
-                    new Point(_scaleGridRight, _scaleGridBottom), new Point(_bitmapData.width, _scaleGridBottom)]);
-                cachedSourceGrid.push([new Point(0, _bitmapData.height), new Point(_scaleGridLeft, _bitmapData.height),
-                    new Point(_scaleGridRight, _bitmapData.height), new Point(_bitmapData.width, _bitmapData.height)]);
-            }
-
-            if (cachedDestGrid == null ||
-                previousUnscaledWidth != unscaledWidth ||
-                previousUnscaledHeight != unscaledHeight)
-            {
-                // Generate teh 16 points of the destination (scaled) grid
-                var destScaleGridBottom:Number = unscaledHeight - (_bitmapData.height - _scaleGridBottom);
-                var destScaleGridRight:Number = unscaledWidth - (_bitmapData.width - _scaleGridRight);
-                cachedDestGrid = [];
-                cachedDestGrid.push([new Point(0, 0), new Point(_scaleGridLeft, 0),
-                    new Point(destScaleGridRight, 0), new Point(unscaledWidth, 0)]);
-                cachedDestGrid.push([new Point(0, _scaleGridTop), new Point(_scaleGridLeft, _scaleGridTop),
-                    new Point(destScaleGridRight, _scaleGridTop), new Point(unscaledWidth, _scaleGridTop)]);
-                cachedDestGrid.push([new Point(0, destScaleGridBottom), new Point(_scaleGridLeft, destScaleGridBottom),
-                    new Point(destScaleGridRight, destScaleGridBottom), new Point(unscaledWidth, destScaleGridBottom)]);
-                cachedDestGrid.push([new Point(0, unscaledHeight), new Point(_scaleGridLeft, unscaledHeight),
-                    new Point(destScaleGridRight, unscaledHeight), new Point(unscaledWidth, unscaledHeight)]);
-            }
-
-            var sourceSection:Rectangle = new Rectangle();
-            var destSection:Rectangle = new Rectangle();
-
-            // Iterate over the columns and rows. We draw each of the nine sections at a calculated
-            // scale and translation.
-            for (var rowIndex:int=0; rowIndex < 3; rowIndex++)
-            {
-                for (var colIndex:int = 0; colIndex < 3; colIndex++)
-                {
-                    // Create the source and destination rectangles for the current section
-                    sourceSection.topLeft = cachedSourceGrid[rowIndex][colIndex];
-                    sourceSection.bottomRight = cachedSourceGrid[rowIndex+1][colIndex+1];
-
-                    destSection.topLeft = cachedDestGrid[rowIndex][colIndex];
-                    destSection.bottomRight = cachedDestGrid[rowIndex+1][colIndex+1];
-
-                    matrix.identity();
-                    // Scale the bitmap by the ratio between the source and destination dimensions
-                    matrix.scale(destSection.width / sourceSection.width, destSection.height / sourceSection.height);
-                    // Translate based on the difference between the source and destination coordinates,
-                    // making sure to account for the new scale.
-                    matrix.translate(destSection.x - sourceSection.x * matrix.a, destSection.y - sourceSection.y * matrix.d);
-                    matrix.translate(roundedDrawX, roundedDrawY);
-
-                    // Draw the bitmap for the current section
-                    g.beginBitmapFill(_bitmapData, matrix);
-                    g.drawRect(destSection.x + roundedDrawX, destSection.y + roundedDrawY, destSection.width, destSection.height);
-                    g.endFill();
-                }
-            }
-        }
-
-        previousUnscaledWidth = unscaledWidth;
-        previousUnscaledHeight = unscaledHeight;
-    } */
-
-    /**
-     *  @private
-     */
-    /* override protected function get needsDisplayObject():Boolean
-    {
-        // If we are hosting untrusted content the hosted loader becomes
-        // our display object.
-        return !trustedSource || super.needsDisplayObject;
-    } */
-
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     *  Utility function that sets the underlying bitmapData property.
-     */
-    /* protected function setBitmapData(bitmapData:BitmapData,
-                                     internallyCreated:Boolean = false):void
-    {
-        // Clear previous bitmapData
-        clearBitmapData();
-
-        // Reset imageWidth/Height, as we aren't
-        // loading external content so no reason to
-        // cache our existing image width and height.
-        imageWidth = imageHeight = NaN;
-
-        // Clear any currently loading content.
-        clearLoadingContent();
-
-        if (bitmapData)
-        {
-            bitmapDataCreated = internallyCreated;
-
-            _bitmapData = bitmapData;
-
-            imageWidth = bitmapData.width;
-            imageHeight = bitmapData.height;
-
-            // Flush the cached scale grid points
-            cachedSourceGrid = null;
-            cachedDestGrid = null;
-
-            // Dispatch ready event
-            dispatchEvent(new FlexEvent(FlexEvent.READY));
-        }
-
-        if (!explicitHeight || !explicitWidth)
-            invalidateSize();
-        invalidateDisplayList();
-    } */
-
-    /**
-     *  @private
-     *  Utility method which analyzes our source and either acquires the
-     *  associated bitmap data immediately or queues up a remote request
-     *  as necessary.
-     */
-    /* mx_internal function applySource():void
-    {
-        var value:Object = _source;
-        var bitmapData:BitmapData;
-        var tmpSprite:DisplayObject;
-
-        if (value is MultiDPIBitmapSource)
-            value = (value as MultiDPIBitmapSource).getMultiSource();
-
-        // Clear the previous scaleGrid properties
-        _scaleGridLeft = NaN;
-        _scaleGridRight = NaN;
-        _scaleGridTop = NaN;
-        _scaleGridBottom = NaN;
-        var currentBitmapCreated:Boolean = false;
-
-        // Reset byte counts and _trustedSource
-        _bytesLoaded = NaN;
-        _bytesTotal = NaN;
-        _trustedSource = true;
-
-        // We'll need to reconsider display object sharing.
-        invalidateDisplayObjectSharing();
-        invalidateDisplayList();
-
-        // Remove any previously hosted content prior to loading
-        // new content (if applicable).
-        if (_clearOnLoad)
-            removePreviousContent();
-
-        if (value is Class)
-        {
-            var cls:Class = Class(value);
-            value = new cls();
-            currentBitmapCreated = true;
-        }
-        else if (value is String || value is URLRequest)
-        {
-            loadExternal(value);
-        }
-        else if (value is ByteArray)
-        {
-            loadFromBytes(value as ByteArray);
-        }
-
-        if (value is BitmapData)
-        {
-            bitmapData = value as BitmapData;
-        }
-        else if (value is Bitmap)
-        {
-            bitmapData = value.bitmapData;
-        }
-        else if (value is DisplayObject)
-        {
-            tmpSprite = value as DisplayObject;
-
-            if ((tmpSprite.width == 0 || tmpSprite.height == 0) && !tmpSprite.stage )
-            {
-                // If our source DisplayObject has yet to be assigned a stage,
-                // and doesn't have valid bounds, it is not ready to be captured,
-                // so we defer bitmap capture until it is added to the display list.
-                tmpSprite.addEventListener(Event.ADDED_TO_STAGE, source_addedToStageHandler);
-                return;
-            }
-        }
-        else if (value == null)
-        {
-            // This will set source to null
-        }
-        else
-        {
-            // We're loading external content or we
-            // we have an unsupported source value.
-            return;
-        }
-
-        if (!bitmapData && tmpSprite)
-        {
-            // We must ensure any IInvalidating sources
-            // are properly validated before capturing.
-            if (tmpSprite is IInvalidating)
-                IInvalidating(tmpSprite).validateNow();
-
-            // Return immediately if our input source has 0 bounds else
-            // our BitmapData constructor will RTE.
-            if (tmpSprite.width == 0 || tmpSprite.height == 0)
-                return;
-
-            bitmapData = new BitmapData(tmpSprite.width, tmpSprite.height, true, 0);
-            bitmapData.draw(tmpSprite, new Matrix(), tmpSprite.transform.colorTransform);
-            currentBitmapCreated = true;
-
-            if (tmpSprite.scale9Grid)
-            {
-                _scaleGridLeft = tmpSprite.scale9Grid.left;
-                _scaleGridRight = tmpSprite.scale9Grid.right;
-                _scaleGridTop = tmpSprite.scale9Grid.top;
-                _scaleGridBottom = tmpSprite.scale9Grid.bottom;
-            }
-        }
-
-        // Remove any previously hosted content prior to assigning
-        // new bitmap data (if we haven't already previously).
-        if (!_clearOnLoad)
-            removePreviousContent();
-
-        setBitmapData(bitmapData, currentBitmapCreated);
-    } */
-	
-	
-	/**
-	 * @private
-	 * Returns true if current Flash Player/Air supports image decoding policy.
-	 */
-	/* protected function hasImageDecodingPolicy(loaderContext:LoaderContext):Boolean {
-		// true for one it's true for all
-		if (!_haveCachedImageDecodePolicy) {
-			_cachedImageDecodePolicy =  ("imageDecodingPolicy" in loaderContext);
-			_haveCachedImageDecodePolicy = true;
-		}
-		
-		return _cachedImageDecodePolicy;
-	} */
-
-    /**
-     *  @private
-     */
-    /* mx_internal function loadExternal(source:Object):void
-    {
-        // Ensure we handle unicode characters properly.
-        if (source is String)
-        {
-           var url:String = source as String;
-           source = LoaderUtil.OSToPlayerURI(url, LoaderUtil.isLocal(url));
-        }
-
-        if (contentLoader)
-        {
-            // We defer our load request to the configured content loader.
-            var contentRequest:ContentRequest = contentLoader.load(source, contentLoaderGrouping);
-
-            if (contentRequest.complete)
-            {
-                // No need to attach listeners as we've received a fully complete
-                // request result.
-                contentComplete(contentRequest.content);
-            }
-            else
-            {
-                // Attach load-event listeners to our ContentRequest instance.
-                loadingContent = contentRequest;
-                attachLoadingListeners();
-            }
-        }
-        else
-        {
-            var loader:Loader = new Loader();
-            var loaderContext:LoaderContext = new LoaderContext();
-
-			if (hasImageDecodingPolicy(loaderContext))
-				loaderContext["imageDecodingPolicy"] = imageDecodingPolicy;
-				
-            // Attach load-event listeners to our LoaderInfo instance.
-            loadingContent = loader.contentLoaderInfo;
-            attachLoadingListeners();
-
-            try
-            {
-                loaderContext.checkPolicyFile = true;
-                var urlRequest:URLRequest = source is URLRequest ?
-                    source as URLRequest : new URLRequest(source as String);
-                loader.load(urlRequest, loaderContext);
-            }
-            catch (error:SecurityError)
-            {
-                handleSecurityError(error);
-            }
-        }
-    } */
-
-    /**
-     *  @private
-     */
-    /* mx_internal function loadFromBytes(source:ByteArray):void
-    {
-        var loader:Loader = new Loader();
-        var loaderContext:LoaderContext = new LoaderContext();
-		
-		if (hasImageDecodingPolicy(loaderContext))
-			loaderContext["imageDecodingPolicy"] = imageDecodingPolicy;
-		
-        loadingContent = loader.contentLoaderInfo;
-        attachLoadingListeners();
-
-        try
-        {
-            loader.loadBytes(source as ByteArray, loaderContext);
-        }
-        catch (error:SecurityError)
-        {
-            handleSecurityError(error);
-        }
-    } */
-
-    /**
-     * @private
-     * Utility function used for higher quality image scaling. Essentially we
-     * simply step down our bitmap size by half resulting in a much higher result
-     * though taking potentially multiple passes to accomplish.
-     */
-    /* protected static function resample(bitmapData:BitmapData, newWidth:uint,
-                                       newHeight:uint):BitmapData
-    {
-        var finalScale:Number = Math.max(newWidth/bitmapData.width,
-            newHeight/bitmapData.height);
-
-        var finalData:BitmapData = bitmapData;
-
-        if (finalScale > 1)
-        {
-            finalData = new BitmapData(bitmapData.width * finalScale,
-                bitmapData.height * finalScale, true, 0);
-
-            finalData.draw(bitmapData, new Matrix(finalScale, 0, 0,
-                finalScale), null, null, null, true);
-
-            return finalData;
-        }
-
-        var drop:Number = .5;
-        var initialScale:Number = finalScale;
-
-        while (initialScale/drop < 1)
-            initialScale /= drop;
-
-        var w:Number = Math.floor(bitmapData.width * initialScale);
-        var h:Number = Math.floor(bitmapData.height * initialScale);
-        var bd:BitmapData = new BitmapData(w, h, bitmapData.transparent, 0);
-
-        bd.draw(finalData, new Matrix(initialScale, 0, 0, initialScale),
-            null, null, null, true);
-        finalData = bd;
-
-        for (var scale:Number = initialScale * drop;
-            Math.round(scale * 1000) >= Math.round(finalScale * 1000);
-            scale *= drop)
-        {
-            w = Math.floor(bitmapData.width * scale);
-            h = Math.floor(bitmapData.height * scale);
-            bd = new BitmapData(w, h, bitmapData.transparent, 0);
-
-            bd.draw(finalData, new Matrix(drop, 0, 0, drop), null, null, null, true);
-            finalData.dispose();
-            finalData = bd;
-        }
-
-        return finalData;
-    } */
-
-    /**
-     * @private
-     * Invoked upon completion of a load request.
-     */
-    /* protected function contentComplete(content:Object):void
-    {
-        if (content is LoaderInfo)
-        {
-            // Clear any previous bitmap data or loader instance.
-            setBitmapData(null);
-            removePreviousContent();
-
-            var loaderInfo:LoaderInfo = content as LoaderInfo;
-
-            if (loaderInfo.childAllowsParent)
-            {
-                // For trusted content we adopt the loaded BitmapData.
-                var image:Bitmap = Bitmap(loaderInfo.content);
-                setBitmapData(image.bitmapData);
-            }
-            else
-            {
-                // For untrusted content we must host the acquired Loader
-                // instance directly as our DisplayObject.
-                displayObjectSharingMode = DisplayObjectSharingMode.OWNS_UNSHARED_OBJECT;
-                invalidateDisplayObjectSharing();
-
-                // Create a content holder to use as our display object.
-                var contentHolder:Sprite = new Sprite();
-                setDisplayObject(contentHolder);
-                loadedContent = loaderInfo.loader;
-                contentHolder.addChild(loadedContent);
-
-                // Retain our source image width and height.
-                imageWidth = loaderInfo.width;
-                imageHeight = loaderInfo.height ;
-
-                // Update
-                if (!explicitHeight || !explicitWidth)
-                    invalidateSize();
-                invalidateDisplayList();
-
-                // Denote that we are hosting an untrusted image and as such some
-                // features requiring access to the bitmap data will no longer
-                // function.
-                _trustedSource = false;
-
-                // Dispatch ready event
-                dispatchEvent(new FlexEvent(FlexEvent.READY));
-            }
-        }
-        else
-        {
-            if (content is BitmapData)
-                setBitmapData(content as BitmapData);
-        }
-    } */
-
-    /**
-     * @private
-     * Returns true if are to consider aspect ratio while scaling.
-     */
-    /* private function get maintainAspectRatio():Boolean
-    {
-        return (_scaleMode == BitmapScaleMode.LETTERBOX && _fillMode == BitmapFillMode.SCALE);
-    } */
-
-    /**
-     * @private
-     * Removes any previously loaded content prior to loading new.
-     */
-    /* private function removePreviousContent():void
-    {
-        if (loadedContent && loadedContent.parent)
-        {
-            displayObjectSharingMode = DisplayObjectSharingMode.USES_SHARED_OBJECT;
-            invalidateDisplayObjectSharing();
-            loadedContent.parent.removeChild(loadedContent);
-            loadedContent = null;
-            setDisplayObject(null);
-            imageWidth = imageHeight = NaN;
-        }
-        else if (drawnDisplayObject)
-        {
-            Sprite(drawnDisplayObject).graphics.clear();
-            clearBitmapData();
-        }
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function clearLoadingContent():void
-    {
-        if (loadingContent is LoaderInfo && LoaderInfo(loadingContent).loader)
-        {
-            try
-            {
-                LoaderInfo(loadingContent).loader.close();
-            }
-            catch (e:Error)
-            {
-                // Ignore
-            }
-        }
-
-        removeLoadingListeners();
-        loadingContent = null;
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function clearBitmapData():void
-    {
-        if (_bitmapData)
-        {
-            // Dispose the bitmap if we created it
-            if (bitmapDataCreated)
-                _bitmapData.dispose();
-            _bitmapData = null;
-        }
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function attachLoadingListeners():void
-    {
-        if (loadingContent)
-        {
-            loadingContent.addEventListener(Event.COMPLETE,
-                loader_completeHandler, false, 0, true);
-            loadingContent.addEventListener(IOErrorEvent.IO_ERROR,
-                loader_ioErrorHandler, false, 0, true);
-            loadingContent.addEventListener(ProgressEvent.PROGRESS,
-                loader_progressHandler, false, 0, true);
-            loadingContent.addEventListener(SecurityErrorEvent.SECURITY_ERROR,
-                loader_securityErrorHandler, false, 0, true);
-            loadingContent.addEventListener(HTTPStatusEvent.HTTP_STATUS,
-                dispatchEvent, false, 0, true);
-        }
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function removeLoadingListeners():void
-    {
-        if (loadingContent)
-        {
-            loadingContent.removeEventListener(Event.COMPLETE,
-                loader_completeHandler);
-            loadingContent.removeEventListener(IOErrorEvent.IO_ERROR,
-                loader_ioErrorHandler);
-            loadingContent.removeEventListener(ProgressEvent.PROGRESS,
-                loader_progressHandler);
-            loadingContent.removeEventListener(SecurityErrorEvent.SECURITY_ERROR,
-                loader_securityErrorHandler);
-            loadingContent.removeEventListener(HTTPStatusEvent.HTTP_STATUS,
-                dispatchEvent);
-        }
-    } */
-
-
-    /**
-     *  @private
-     *  Utility method which is invoked to initiate loading of our
-     *  source.
-     */
-    /* mx_internal function validateSource():void
-    {
-        if (sourceInvalid || contentLoaderInvalid)
-        {
-            applySource();
-            sourceInvalid = false;
-            contentLoaderInvalid = false;
-        }
-    } */
-
-    //--------------------------------------------------------------------------
-    //
-    //  Event handlers
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-   /*  mx_internal function loader_completeHandler(event:Event):void
-    {
-        try
-        {
-            var loaderInfo:LoaderInfo = (event.target is ContentRequest) ?
-                event.target.content as LoaderInfo : event.target as LoaderInfo;
-
-            if (loaderInfo.bytesLoaded)
-            {
-                _bytesLoaded = _bytesTotal;
-                contentComplete(loaderInfo);
-            }
-        }
-        catch (error:SecurityError)
-        {
-            handleSecurityError(error);
-        }
-
-        dispatchEvent(event);
-
-        // Remove any event listeners from load-event dispatcher.
-        clearLoadingContent();
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function loader_ioErrorHandler(error:IOErrorEvent):void
-    {
-        // forward the event, only in the case of a listener, else
-        // an RTE will occur.
-        if (hasEventListener(error.type))
-            dispatchEvent(error);
-
-        // clear any current image and remove any event listeners from
-        // load-event  dispatcher.
-        setBitmapData(null);
-        loadFailed = true;
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function loader_securityErrorHandler(error:SecurityErrorEvent):void
-    {
-        dispatchEvent(error);
-
-        // clear any current image and remove any event listeners from
-        // load-event  dispatcher.
-        setBitmapData(null);
-        loadFailed = true;
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function loader_progressHandler(progressEvent:ProgressEvent):void
-    {
-        _bytesLoaded = progressEvent.bytesLoaded;
-        _bytesTotal = progressEvent.bytesTotal;
-
-        // forward the event
-        dispatchEvent(progressEvent);
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function handleSecurityError(error:SecurityError):void
-    {
-        dispatchEvent(new SecurityErrorEvent(SecurityErrorEvent.SECURITY_ERROR,
-            false, false, error.message));
-
-        // clear any current image and remove any event listeners from
-        // load-event  dispatcher.
-        setBitmapData(null);
-        loadFailed = true;
-    } */
-
-    /**
-     *  @private
-     *  Used for deferral of bitmap capture when an assigned source
-     *  has yet to be added to the stage.
-     */
-    /* private function source_addedToStageHandler(event:Event):void
-    {
-        removeAddedToStageHandler(event.target);
-        applySource();
-    } */
-
-    /**
-     *  @private
-     */
-    /* private function removeAddedToStageHandler(target:Object):void
-    {
-        if (target && target is DisplayObject)
-            target.removeEventListener(Event.ADDED_TO_STAGE, source_addedToStageHandler);
-    } */
-	//----------------------------------
-    //  height copied from GraphicElement
-    //----------------------------------
-    
-    /**
-     *  @private
-     *  Storage for the height property.
-     */
-    /* mx_internal */ private var _height:Number = 0;
-
-    [Bindable("propertyChange")]
-    [Inspectable(category="General")]
-    [PercentProxy("percentHeight")]
-
-    /**
-     *  The height of the graphic element.
-     *
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     *  @royalesuppresspublicvarwarning
-	 */
-    public function get height():Number
-    {
-        return _height;
-    }
-
-    /**
-     *  @private
-     */
-    
-    public function set height(value:Number):void
-    {
-       // explicitHeight = value;
-
-        if (_height == value)
-            return;
-
-        var oldValue:Number = _height;
-        _height = value;
-       // dispatchPropertyChangeEvent("height", oldValue, value);
-
-        // Invalidate the display list, since we're changing the actual height
-        // and we're not going to correctly detect whether the layout sets
-        // new actual height different from our previous value.
-       // invalidateDisplayList();
-    }
-	//----------------------------------
-    //  width copied from GraphicElement
-    //----------------------------------
-
-    /**
-     *  @private
-     *  Storage for the width property.
-     */
-     /* mx_internal */ private  var _width:Number = 0;
-
-    [Bindable("propertyChange")]
-    [Inspectable(category="General")]
-    [PercentProxy("percentWidth")]
-
-    /**
-     *  The width of the graphic element.
-     *
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Royale 0.9.4
-     *  @royalesuppresspublicvarwarning
-	*/
-    public function get width():Number
-    {
-        return _width;
-    }
-
-    /**
-     *  @private
-     */
-    public function set width(value:Number):void
-    {
-       // explicitWidth = value;
-
-        if (_width == value)
-            return;
-
-        var oldValue:Number = _width;
-        _width = value;
-
-        // The width is needed for the mirroring transform.
-      /*   if (layoutFeatures)
-        {
-            layoutFeatures.layoutWidth = value;
-            invalidateTransform();
-        }        
-
-        dispatchPropertyChangeEvent("width", oldValue, value);
-
-        // Invalidate the display list, since we're changing the actual width
-        // and we're not going to correctly detect whether the layout sets
-        // new actual width different from our previous value.
-        invalidateDisplayList(); */
-    }
-}
+	public class BitmapImage extends Image
+	{
+	}
 }
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Graphic.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Graphic.as
index 502b83f..9c75f28 100644
--- a/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Graphic.as
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/primitives/Graphic.as
@@ -107,7 +107,7 @@ import spark.layouts.supportClasses.LayoutBase;
  */
 public class Graphic extends Group 
 {
-    include "../core/Version.as";
+    //include "../core/Version.as";
 
     //--------------------------------------------------------------------------
     //