You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ah...@apache.org on 2018/08/02 00:44:31 UTC

[royale-asjs] 28/29: spark image

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

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

commit d77bc9a5db784fd003c459befa7529ed51679ad3
Author: Alex Harui <ah...@apache.org>
AuthorDate: Wed Aug 1 16:10:42 2018 -0700

    spark image
---
 .../src/main/resources/spark-royale-manifest.xml   |    1 +
 .../src/main/royale/spark/components/Image.as      | 1339 ++++++++++++++++++++
 2 files changed, 1340 insertions(+)

diff --git a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
index b1faebe..0e69f14 100644
--- a/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
+++ b/frameworks/projects/SparkRoyale/src/main/resources/spark-royale-manifest.xml
@@ -69,6 +69,7 @@
     	<component id="DataGroup" class="spark.components.DataGroup"/>
 	<component id="VerticalLayout" class="spark.layouts.VerticalLayout"/>
 	<component id="BitmapImage" class="spark.primitives.BitmapImage"/>
+    <component id="Image" class="spark.components.Image"/>
     
     <!-- Text Layout Framework (TLF) -->
     <component id="a" class="org.apache.royale.textLayout.elements.LinkElement" lookupOnly="true"/>
diff --git a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Image.as b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Image.as
new file mode 100644
index 0000000..74d5a38
--- /dev/null
+++ b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Image.as
@@ -0,0 +1,1339 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package spark.components
+{
+/*
+import flash.events.Event;
+import flash.events.HTTPStatusEvent;
+import flash.events.IOErrorEvent;
+import flash.events.ProgressEvent;
+import flash.events.SecurityErrorEvent;
+import flash.display.BitmapData;
+
+import mx.core.mx_internal;
+import mx.events.FlexEvent;
+import mx.graphics.BitmapScaleMode;
+import mx.utils.BitFlagUtil;
+
+import spark.components.supportClasses.Range;
+    import spark.core.IContentLoader;
+*/
+import spark.components.supportClasses.SkinnableComponent;
+import spark.primitives.BitmapImage;
+
+//use namespace mx_internal;
+
+//--------------------------------------
+//  SkinStates
+//--------------------------------------
+
+/**
+ *  The uninitialized state of the Image control.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+[SkinState("uninitialized")]
+
+/**
+ *  The preloading state of the Image control. 
+ *  The <code>enableLoadingState</code> style must
+ *  be set to <code>true</code> to enable this component state.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4.5
+ */
+//[SkinState("loading")]
+
+/**
+ *  The ready state of the Image control.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10.1
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+//[SkinState("ready")]
+
+/**
+ *  The invalid state of the Image control. 
+ *  This means that the image could not be 
+ *  successfully loaded.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+//[SkinState("invalid")]
+
+/**
+ *  The disabled state of the Image control.
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+//[SkinState("disabled")]
+
+//--------------------------------------
+//  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 by 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.5
+ *  @productversion Flex 4.5
+ */
+[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.5
+ *  @productversion Flex 4.5
+ */
+[Event(name="httpStatus", type="flash.events.HTTPStatusEvent")]
+
+/**
+ *  Dispatched when an input or output error occurs.
+ *  @see flash.events.IOErrorEvent
+ *
+ *  @eventType flash.events.IOErrorEvent.IO_ERROR
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+[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.5
+ *  @productversion Flex 4.5
+ */
+[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.5
+ *  @productversion Flex 4.5
+ */
+[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.5
+ *  @productversion Flex 4.5
+ */
+[Event(name="securityError", type="flash.events.SecurityErrorEvent")]
+
+//-----------------------------------
+//  Styles
+//-----------------------------------
+
+/**
+ *  The alpha value of the background for this component.
+ * 
+ *  @default NaN
+ * 
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+//[Style(name="backgroundAlpha", type="Number", inherit="no", theme="spark, mobile", minValue="0.0", maxValue="1.0")]
+
+/**
+ *  The background color for this component.
+ *   
+ *  @default NaN
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+//[Style(name="backgroundColor", type="uint", format="Color", inherit="no", theme="spark, mobile")]
+
+/**
+ *  When <code>true</code>, enables the <code>loading</code> skin state.
+ *  @default false
+ * 
+ *  @langversion 3.0
+ *  @playerversion Flash 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 4.5
+ */
+//[Style(name="enableLoadingState", type="Boolean", inherit="no")]
+
+/**
+ *  Style equivalent to BitmapImage's <code>smoothingQuality</code> property.
+ *  When set to <code>BitmapSmoothingQuality.BEST</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 9
+ *  @playerversion AIR 1.1
+ *  @productversion Flex 4.5
+ */
+//[Style(name="smoothingQuality", type="String", inherit="no", enumeration="default,high")]
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+//[IconFile("Image.png")]
+
+/**
+ *  The Spark Image control is a skinnable component that provides a customizable
+ *  loading state, chrome, and error state.  
+ *  The Image control lets you import JPEG, PNG, and GIF files 
+ *  at runtime. You can also embed any of these files at compile time
+ *  by using <code>&#64;Embed(source='filename')</code>.
+ *
+ *  <p><strong>Note: </strong>Flex also includes the SWFLoader control for loading Flex applications. 
+ *  You typically use the Image control for loading static graphic files and SWF files, 
+ *  and use the SWFLoader control for loading Flex applications. The Image control 
+ *  is also designed to be used in custom item renderers and item editors. </p>
+ * 
+ *  <p><strong>Note: </strong>Flex also includes the BitmapImage class. This class is 
+ *  used for embedding images into skins and FXG components. </p>
+ *
+ *  <p>Embedded images load immediately, because they are already part of the 
+ *  Flex SWF file. However, they add to the size of your application and slow down 
+ *  the application initialization process. Embedded images also require you to 
+ *  recompile your applications whenever your image files change.</p> 
+ *  
+ *  <p>The alternative to embedding a resource is to load the resource at runtime. 
+ *  You can load a resource from the local file system in which the SWF file runs, 
+ *  or you can access a remote resource, typically though an HTTP request over a network. 
+ *  These images are independent of your Flex application, so you can change them without 
+ *  causing a recompile operation as long as the names of the modified images remain the same. 
+ *  The referenced images add no additional overhead to an application's initial loading time. 
+ *  However, you might experience a delay when you use the images and load them 
+ *  into Flash Player or AIR. </p>
+ *  
+ *  <p>The default skin provides a chromeless image skin with a generic progress 
+ *  bar based preloader and broken image icon to reflect invalid content.</p>
+ *
+ *  <p>To use this component in a list-based component, such as a List or DataGrid, 
+ *  create an item renderer.
+ *  For information about creating an item renderer, see 
+ *  <a href="http://help.adobe.com/en_US/flex/using/WS4bebcd66a74275c3-fc6548e124e49b51c4-8000.html">
+ *  Custom Spark item renderers</a>. </p>
+ *
+ *  <p>The Image control has the following default characteristics:</p>
+ *     <table class="innertable">
+ *        <tr>
+ *           <th>Characteristic</th>
+ *           <th>Description</th>
+ *        </tr>
+ *        <tr>
+ *           <td>Default size</td>
+ *           <td>Wide enough to hold the associated source content</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Minimum size</td>
+ *           <td>0 pixels wide by 0 pixels high</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Maximum size</td>
+ *           <td>10000 pixels wide and 10000 pixels high</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Default skin class</td>
+ *           <td>spark.skins.spark.ImageSkin</td>
+ *        </tr>
+ *     </table>
+ *
+ *  @mxml <p>The <code>&lt;s:Image&gt;</code> tag inherits all of the tag 
+ *  attributes of its superclass and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;s:Image 
+ *    <strong>Properties</strong>
+ *    clearOnLoad="true"
+ *    contentLoader="null"
+ *    contentLoaderGrouping="null"
+ *    fillMode="scale"
+ *    horizontalAlign="center"
+ *    preliminaryHeight="NaN"
+ *    preliminaryWidth="NaN"
+ *    scaleMode="letterbox"
+ *    smooth="false"
+ *    source="null
+ *    verticalAlign="middle"
+ * 
+ *    <strong>Styles</strong>
+ *    backgroundAlpha="NaN"
+ *    backgroundColor="NaN"
+ *    enableLoadingState="false"
+ *    smoothingQuality="default"
+ * 
+ *    <strong>Events</strong>
+ *    complete="<i>No default</i>"
+ *    httpStatus="<i>No default</i>"
+ *    ioError="<i>No default</i>"
+ *    progress="<i>No default</i>"
+ *    ready="<i>No default</i>"
+ *    securityError="<i>No default</i>"
+ *  /&gt;
+ *  </pre>
+ *
+ *  @see spark.skins.spark.ImageSkin
+ *  @see mx.controls.SWFLoader
+ *  
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+public class Image extends SkinnableComponent
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+    /*
+    mx_internal static const CLEAR_ON_LOAD_PROPERTY_FLAG:uint = 1 << 0;
+    mx_internal static const CONTENT_LOADER_PROPERTY_FLAG:uint = 1 << 1;
+    mx_internal static const CONTENT_LOADER_GROUPING_PROPERTY_FLAG:uint = 1 << 2;
+    mx_internal static const FILL_MODE_PROPERTY_FLAG:uint = 1 << 3;
+    mx_internal static const PRELIMINARY_WIDTH_PROPERTY_FLAG:uint = 1 << 4;
+    mx_internal static const PRELIMINARY_HEIGHT_PROPERTY_FLAG:uint = 1 << 5;
+    mx_internal static const HORIZONTAL_ALIGN_PROPERTY_FLAG:uint = 1 << 6;
+    mx_internal static const SCALE_MODE_PROPERTY_FLAG:uint = 1 << 7;
+    mx_internal static const SMOOTH_PROPERTY_FLAG:uint = 1 << 8;
+    mx_internal static const SMOOTHING_QUALITY_PROPERTY_FLAG:uint = 1 << 9;
+    mx_internal static const SOURCE_PROPERTY_FLAG:uint = 1 << 10;
+    mx_internal static const SOURCE_WIDTH_PROPERTY_FLAG:uint = 1 << 11;
+    mx_internal static const SOURCE_HEIGHT_PROPERTY_FLAG:uint = 1 << 12;
+    mx_internal static const TRUSTED_SOURCE_PROPERTY_FLAG:uint = 1 << 13;
+    mx_internal static const VERTICAL_ALIGN_PROPERTY_FLAG:uint = 1 << 14;
+    */
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Constructor. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public function Image()
+    {
+        super();
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Variables 
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    //protected var _loading:Boolean = false;
+    
+    /**
+     *  @private
+     */
+    //protected var _ready:Boolean = false;
+    
+    /**
+     *  @private
+     */
+    //protected var _invalid:Boolean = false;
+    
+    /**
+     *  @private
+     */
+    //mx_internal var imageDisplayProperties:Object = 
+    //    {visible: true, scaleMode: BitmapScaleMode.LETTERBOX, trustedSource: true};
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Skin parts
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  imageDisplay
+    //----------------------------------
+    
+    //[SkinPart(required="true")]
+    
+    /**
+     *  A required skin part that defines image content.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    //public var imageDisplay:BitmapImage;  
+    
+    //----------------------------------
+    //  progressIndicator
+    //----------------------------------
+    
+    //[SkinPart(required="false")]
+    
+    /**
+     *  An optional skin part that displays the current loading progress.
+     *  As a convenience the progressIndicator value is automatically updated
+     *  with the percentage complete while loading.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    //public var progressIndicator:Range;  
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  bitmapData
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#bitmapData
+     * 
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get bitmapData():BitmapData 
+    {
+        return imageDisplay ? imageDisplay.bitmapData : null; 
+    }
+     */
+    
+    //----------------------------------
+    //  bytesLoaded
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#bytesLoaded
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get bytesLoaded():Number 
+    {
+        return imageDisplay ? imageDisplay.bytesLoaded : NaN; 
+    }
+     */
+    
+    //----------------------------------
+    //  bytesTotal
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#bytesTotal
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get bytesTotal():Number 
+    {
+        return imageDisplay ? imageDisplay.bytesTotal : NaN;
+    }
+     */
+    
+    //----------------------------------
+    //  clearOnLoad
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#clearOnLoad
+     *  @default true
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get clearOnLoad():Boolean 
+    {
+        if (imageDisplay)
+            return imageDisplay.clearOnLoad;
+        else
+            return imageDisplayProperties.clearOnLoad;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set clearOnLoad(value:Boolean):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.clearOnLoad = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                CLEAR_ON_LOAD_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.clearOnLoad = value;
+    }
+     */
+    
+    //----------------------------------
+    //  contentLoader
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#contentLoader
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get contentLoader():IContentLoader 
+    {
+        if (imageDisplay)
+            return imageDisplay.contentLoader;
+        else
+            return imageDisplayProperties.contentLoader;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set contentLoader(value:IContentLoader):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.contentLoader = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                CONTENT_LOADER_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.contentLoader = value;
+    }
+     */
+        
+    //----------------------------------
+    //  contentLoaderGrouping
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#contentLoaderGrouping
+     *  @default null
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get contentLoaderGrouping():String 
+    {
+        if (imageDisplay)
+            return imageDisplay.contentLoaderGrouping;
+        else
+            return imageDisplayProperties.contentLoaderGrouping;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set contentLoaderGrouping(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.contentLoaderGrouping = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                CONTENT_LOADER_GROUPING_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.contentLoaderGrouping = value;
+    }
+     */
+    
+    //----------------------------------
+    //  fillMode
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="clip,repeat,scale", defaultValue="scale")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#fillMode
+     *  @default <code>BitmapFillMode.SCALE</code>
+     *
+     *  @see mx.graphics.BitmapFillMode
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get fillMode():String
+    {
+        if (imageDisplay)
+            return imageDisplay.fillMode;
+        else
+            return imageDisplayProperties.fillMode;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set fillMode(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.fillMode = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                FILL_MODE_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.fillMode = value;
+    }
+     */
+
+    //----------------------------------
+    //  horizontalAlign
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="left,right,center", defaultValue="center")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#horizontalAlign
+     *  @default <code>HorizontalAlign.CENTER</code>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get horizontalAlign():String
+    {
+        if (imageDisplay)
+            return imageDisplay.horizontalAlign;
+        else
+            return imageDisplayProperties.horizontalAlign;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set horizontalAlign(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.horizontalAlign = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                HORIZONTAL_ALIGN_PROPERTY_FLAG, value != null);
+        }
+        else
+            imageDisplayProperties.horizontalAlign = value;
+    }
+     */
+    
+    //----------------------------------
+    //  preliminaryHeight
+    //----------------------------------
+    
+    [Inspectable(category="General", defaultValue="NaN")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#preliminaryHeight
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get preliminaryHeight():Number
+    {
+        if (imageDisplay)
+            return imageDisplay.preliminaryHeight;
+        else
+            return imageDisplayProperties.preliminaryHeight;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set preliminaryHeight(value:Number):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.preliminaryHeight = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                PRELIMINARY_HEIGHT_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.preliminaryHeight = value;
+    }
+     */
+    
+    //----------------------------------
+    //  preliminaryWidth
+    //----------------------------------
+    
+    [Inspectable(category="General", defaultValue="NaN")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#preliminaryWidth
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get preliminaryWidth():Number
+    {
+        if (imageDisplay)
+            return imageDisplay.preliminaryWidth;
+        else
+            return imageDisplayProperties.preliminaryWidth;
+    }
+     */
+        
+    /**
+     *  @private
+    public function set preliminaryWidth(value:Number):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.preliminaryWidth = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                PRELIMINARY_WIDTH_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.preliminaryWidth = value;
+    }
+     */
+                
+    //----------------------------------
+    //  scaleMode
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="stretch,letterbox,zoom", defaultValue="letterbox")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#scaleMode
+     *  @default <code>BitmapScaleMode.LETTERBOX</code>
+     *
+     *  @see mx.graphics.BitmapFillMode
+     *  @see mx.graphics.BitmapScaleMode
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get scaleMode():String
+    {
+        if (imageDisplay)
+            return imageDisplay.scaleMode;
+        else
+            return imageDisplayProperties.scaleMode;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set scaleMode(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.scaleMode = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                SCALE_MODE_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.scaleMode = value;
+    }
+     */
+       
+    //----------------------------------
+    //  smooth
+    //----------------------------------
+    
+    [Inspectable(category="General", defaultValue="false")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#smooth
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function set smooth(value:Boolean):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.smooth = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                SMOOTH_PROPERTY_FLAG, true);
+        }
+        else
+            imageDisplayProperties.smooth = value;
+    }
+     */
+    
+    /**
+     *  @private
+    public function get smooth():Boolean          
+    {
+        if (imageDisplay)
+            return imageDisplay.smooth;
+        else
+            return imageDisplayProperties.smooth;
+    }
+     */
+    
+    //----------------------------------
+    //  source
+    //----------------------------------
+    
+    [Bindable("sourceChanged")]
+    [Inspectable(category="General")]
+    
+    /**
+     *  @private
+     */
+    public function get source():Object          
+    {
+        /*
+        if (imageDisplay)
+            return imageDisplay.source;
+        else
+            return imageDisplayProperties.source;
+        */
+        return null;
+    }
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#source
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public function set source(value:Object):void
+    {
+        if (source == value)
+            return;
+        
+        /*
+        _loading = false;
+        _invalid = false;
+        _ready = false;
+        
+        if (imageDisplay)
+        {
+            imageDisplay.source = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                SOURCE_PROPERTY_FLAG, value != null);
+        }
+        else
+            imageDisplayProperties.source = value;
+        
+        invalidateSkinState();
+        dispatchEvent(new Event("sourceChanged"));
+        */
+    }
+       
+    //----------------------------------
+    //  sourceHeight
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#sourceHeight
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get sourceHeight():Number
+    {
+        if (imageDisplay)
+            return imageDisplay.sourceHeight;
+        else
+            return NaN;
+    }
+     */
+    
+    //----------------------------------
+    //  sourceWidth
+    //----------------------------------
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#sourceWidth
+     *  @default NaN
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get sourceWidth():Number
+    {
+        if (imageDisplay)
+            return imageDisplay.sourceWidth;
+        else
+            return NaN;
+    }
+     */
+    
+    //----------------------------------
+    //  trustedSource
+    //----------------------------------
+        
+    /**
+     *  @copy spark.primitives.BitmapImage#trustedSource
+     *  @default true
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get trustedSource():Boolean          
+    {
+        if (imageDisplay)
+            return imageDisplay.trustedSource;
+        else
+            return imageDisplayProperties.trustedSource;
+    }
+     */
+    
+    //----------------------------------
+    //  verticalAlign
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="top,bottom,middle", defaultValue="middle")]
+    
+    /**
+     *  @copy spark.primitives.BitmapImage#verticalAlign
+     *  @default <code>HorizontalAlign.MIDDLE</code>
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+    public function get verticalAlign():String
+    {
+        if (imageDisplay)
+            return imageDisplay.verticalAlign;
+        else
+            return imageDisplayProperties.verticalAlign;
+    }
+     */
+    
+    /**
+     *  @private
+    public function set verticalAlign(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.verticalAlign = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                VERTICAL_ALIGN_PROPERTY_FLAG, value != null);
+        }
+        else
+            imageDisplayProperties.verticalAlign = value;
+    }
+     */
+        
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+    override protected function partAdded(partName:String, instance:Object):void
+    {
+        super.partAdded(partName, instance);
+        
+        if (instance == imageDisplay)
+        {
+            imageDisplay.addEventListener(IOErrorEvent.IO_ERROR, imageDisplay_ioErrorHandler, false, 0, true);
+            imageDisplay.addEventListener(ProgressEvent.PROGRESS, imageDisplay_progressHandler, false, 0, true);
+            imageDisplay.addEventListener(FlexEvent.READY, imageDisplay_readyHandler, false, 0, true);
+            imageDisplay.addEventListener(Event.COMPLETE, dispatchEvent, false, 0, true);
+            imageDisplay.addEventListener(SecurityErrorEvent.SECURITY_ERROR, dispatchEvent, false, 0, true);
+            imageDisplay.addEventListener(HTTPStatusEvent.HTTP_STATUS, dispatchEvent, false, 0, true);
+            
+            var newImageDisplayProperties:uint = 0;
+            
+            if (imageDisplayProperties.clearOnLoad !== undefined)
+            {
+                imageDisplay.clearOnLoad = imageDisplayProperties.clearOnLoad;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    CLEAR_ON_LOAD_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.contentLoader !== undefined)
+            {
+                imageDisplay.contentLoader = imageDisplayProperties.contentLoader;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    CONTENT_LOADER_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.contentLoaderGrouping !== undefined)
+            {
+                imageDisplay.contentLoaderGrouping = imageDisplayProperties.contentLoaderGrouping;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    CONTENT_LOADER_GROUPING_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.fillMode !== undefined)
+            {
+                imageDisplay.fillMode = imageDisplayProperties.fillMode;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    FILL_MODE_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.preliminaryHeight !== undefined)
+            {
+                imageDisplay.preliminaryHeight = imageDisplayProperties.preliminaryHeight;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    PRELIMINARY_HEIGHT_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.preliminaryWidth !== undefined)
+            {
+                imageDisplay.preliminaryWidth = imageDisplayProperties.preliminaryWidth;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    PRELIMINARY_WIDTH_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.smooth !== undefined)
+            {
+                imageDisplay.smooth = imageDisplayProperties.smooth;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    SMOOTH_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.source !== undefined)
+            {
+                imageDisplay.source = imageDisplayProperties.source;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    SOURCE_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.smoothingQuality !== undefined)
+            {
+                imageDisplay.smoothingQuality = imageDisplayProperties.smoothingQuality;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    SMOOTHING_QUALITY_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.scaleMode !== undefined)
+            {
+                imageDisplay.scaleMode = imageDisplayProperties.scaleMode;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    SCALE_MODE_PROPERTY_FLAG, true);
+            }
+                        
+            if (imageDisplayProperties.verticalAlign !== undefined)
+            {
+                imageDisplay.verticalAlign = imageDisplayProperties.verticalAlign;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    VERTICAL_ALIGN_PROPERTY_FLAG, true);
+            }
+            
+            if (imageDisplayProperties.horizontalAlign !== undefined)
+            {
+                imageDisplay.horizontalAlign = imageDisplayProperties.horizontalAlign;
+                newImageDisplayProperties = BitFlagUtil.update(newImageDisplayProperties, 
+                    HORIZONTAL_ALIGN_PROPERTY_FLAG, true);
+            }
+            
+            imageDisplayProperties = newImageDisplayProperties;
+            
+            // This mx_internal method is invoked now so that we initiate loading of our
+            // source property prior to commitProperties. If we were to just wait
+            // until commitProperties, the order that commitProperties is invoked
+            // on multiple MXML Image instances does not match child order and as
+            // such can be astonishing, especially when a queued loader is active.
+            imageDisplay.validateSource();
+        }
+        else if (instance == progressIndicator)
+        {
+            if (_loading && progressIndicator && imageDisplay)
+                progressIndicator.value = percentComplete(imageDisplay.bytesLoaded, imageDisplay.bytesTotal);
+        }
+    }
+     */
+    
+    /**
+     *  @private
+    override protected function partRemoved(partName:String, instance:Object):void
+    {
+        super.partRemoved(partName, instance);
+        
+        if (instance == imageDisplay)
+        {
+            imageDisplay.removeEventListener(IOErrorEvent.IO_ERROR, imageDisplay_ioErrorHandler);
+            imageDisplay.removeEventListener(ProgressEvent.PROGRESS, imageDisplay_progressHandler);
+            imageDisplay.removeEventListener(FlexEvent.READY, imageDisplay_readyHandler);
+            imageDisplay.removeEventListener(Event.COMPLETE, dispatchEvent);
+            imageDisplay.removeEventListener(SecurityErrorEvent.SECURITY_ERROR, dispatchEvent);
+            imageDisplay.removeEventListener(HTTPStatusEvent.HTTP_STATUS, dispatchEvent);
+            
+            var newImageDisplayProperties:Object = {};
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, CLEAR_ON_LOAD_PROPERTY_FLAG))
+                newImageDisplayProperties.clearOnLoad = imageDisplay.clearOnLoad;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, CONTENT_LOADER_PROPERTY_FLAG))
+                newImageDisplayProperties.contentLoader = imageDisplay.contentLoader;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, CONTENT_LOADER_GROUPING_PROPERTY_FLAG))
+                newImageDisplayProperties.contentLoaderGrouping = imageDisplay.contentLoaderGrouping;
+                
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, FILL_MODE_PROPERTY_FLAG))
+                newImageDisplayProperties.fillMode = imageDisplay.fillMode;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, PRELIMINARY_HEIGHT_PROPERTY_FLAG))
+                newImageDisplayProperties.preliminaryHeight = imageDisplay.preliminaryHeight;
+                
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, PRELIMINARY_WIDTH_PROPERTY_FLAG))
+                newImageDisplayProperties.preliminaryWidth = imageDisplay.preliminaryWidth;
+                
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, SOURCE_PROPERTY_FLAG))
+                newImageDisplayProperties.source = imageDisplay.source;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, SMOOTH_PROPERTY_FLAG))
+                newImageDisplayProperties.smooth = imageDisplay.smooth;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, SMOOTHING_QUALITY_PROPERTY_FLAG))
+                newImageDisplayProperties.smoothingQuality = imageDisplay.smoothingQuality;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, SCALE_MODE_PROPERTY_FLAG))
+                newImageDisplayProperties.scaleMode = imageDisplay.scaleMode;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, TRUSTED_SOURCE_PROPERTY_FLAG))
+                newImageDisplayProperties.trustedSource = imageDisplay.trustedSource;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, VERTICAL_ALIGN_PROPERTY_FLAG))
+                newImageDisplayProperties.verticalAlign = imageDisplay.verticalAlign;
+            
+            if (BitFlagUtil.isSet(imageDisplayProperties as uint, HORIZONTAL_ALIGN_PROPERTY_FLAG))
+                newImageDisplayProperties.horizontalAlign = imageDisplay.horizontalAlign;
+            
+            // Reset our previous image display source to null on the chance that it is busy
+            // loading something.
+            imageDisplay.source = null;
+            
+            imageDisplayProperties = newImageDisplayProperties;
+        }
+    }
+     */
+    
+    /**
+     *  @private
+    override protected function getCurrentSkinState():String
+    {
+        var enableLoadingState:Boolean = getStyle("enableLoadingState");
+        
+        if (_invalid)
+            return "invalid";
+        else if (!enabled)
+            return "disabled";
+        else if (_loading && enableLoadingState) 
+            return "loading";
+        else if (imageDisplay && imageDisplay.source && _ready)
+            return "ready";
+        else
+            return "uninitialized";
+    }
+     */
+    
+    /**
+     *  @private
+    override public function styleChanged(styleProp:String):void
+    {
+        var allStyles:Boolean = (styleProp == null || styleProp == "styleName");
+        super.styleChanged(styleProp);
+        
+        if (allStyles || styleProp == "enableLoadingState")
+        {
+            invalidateSkinState();
+        }
+        
+        if (allStyles || styleProp == "smoothingQuality")
+        {
+            smoothQuality = getStyle("smoothingQuality");
+        }
+    }
+     */
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     *  Private smoothing quality setter used to push our smoothingQuality
+     *  style value to our image display instance.
+    private function set smoothQuality(value:String):void
+    {
+        if (imageDisplay)
+        {
+            imageDisplay.smoothingQuality = value;
+            imageDisplayProperties = BitFlagUtil.update(imageDisplayProperties as uint, 
+                SMOOTHING_QUALITY_PROPERTY_FLAG, value != null);
+        }
+        else
+            imageDisplayProperties.smoothingQuality = value;
+    }
+     */
+    
+    /**
+     *  @private
+    private function percentComplete(bytesLoaded:Number, bytesTotal:Number):Number
+    {
+        var value:Number = Math.ceil((bytesLoaded / bytesTotal) * 100.0);
+        return isNaN(value) ? 0 : value;
+    }
+     */  
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+    private function imageDisplay_ioErrorHandler(error:IOErrorEvent):void
+    {
+        _invalid = true;
+        _loading = false;
+        invalidateSkinState();
+        
+        if (hasEventListener(error.type))
+            dispatchEvent(error);
+    }
+     */
+    
+    /**
+     *  @private
+    private function imageDisplay_progressHandler(event:ProgressEvent):void
+    {
+        if (!_loading)
+            invalidateSkinState();
+
+        if (progressIndicator)
+            progressIndicator.value = percentComplete(event.bytesLoaded, event.bytesTotal);
+
+        _loading = true;
+        
+        dispatchEvent(event);
+    }
+     */
+    
+    /**
+     *  @private
+    private function imageDisplay_readyHandler(event:Event):void
+    {
+        invalidateSkinState();
+        _loading = false;
+        _ready = true;
+        dispatchEvent(event);
+    }    
+     */
+}
+    
+}