You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by jm...@apache.org on 2013/10/08 17:22:40 UTC

[01/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - - UPDATED htps://issues.apache.org/jira/browse/FLEX-33800 (asdoc disclaimer for experimental classes) Added [Experimental] metadata to experimental classes

Updated Branches:
  refs/heads/release4.11.0 28ba4b74b -> 4e004f508


- UPDATED htps://issues.apache.org/jira/browse/FLEX-33800 (asdoc disclaimer for experimental classes)
Added [Experimental] metadata to experimental classes


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/05ae41d6
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/05ae41d6
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/05ae41d6

Branch: refs/heads/release4.11.0
Commit: 05ae41d6f756cd09b2471a8d9bf5df5b499499de
Parents: 949dd4e
Author: mamsellem <ma...@systar.com>
Authored: Sun Oct 6 18:26:56 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Sun Oct 6 18:26:56 2013 +0200

----------------------------------------------------------------------
 .../projects/experimental/src/spark/components/Alert.as     | 3 +++
 .../experimental/src/spark/components/ArrowDirection.as     | 2 ++
 .../src/spark/components/BorderDataNavigator.as             | 3 +++
 .../projects/experimental/src/spark/components/CallOut.as   | 3 +++
 .../experimental/src/spark/components/CallOutButton.as      | 3 +++
 .../experimental/src/spark/components/CallOutPosition.as    | 5 ++++-
 .../experimental/src/spark/components/ColorPicker.as        | 5 ++++-
 .../experimental/src/spark/components/DataAccordion.as      | 8 +++++---
 .../experimental/src/spark/components/DataNavigator.as      | 9 ++++++---
 .../experimental/src/spark/components/DataNavigatorGroup.as | 5 ++++-
 .../experimental/src/spark/components/InlineScroller.as     | 7 +++++--
 .../projects/experimental/src/spark/components/Menu.as      | 5 ++++-
 .../projects/experimental/src/spark/components/MenuBar.as   | 5 ++++-
 .../experimental/src/spark/components/ProgressBar.as        | 5 ++++-
 .../projects/experimental/src/spark/containers/Accordion.as | 7 +++++--
 .../experimental/src/spark/containers/DeferredGroup.as      | 7 +++++--
 .../experimental/src/spark/containers/DividedGroup.as       | 5 ++++-
 .../projects/experimental/src/spark/containers/Divider.as   | 6 +++++-
 .../experimental/src/spark/containers/HDividerGroup.as      | 6 +++++-
 .../projects/experimental/src/spark/containers/Navigator.as | 9 +++++----
 .../experimental/src/spark/containers/NavigatorGroup.as     | 6 ++++--
 .../experimental/src/spark/containers/VDividerGroup.as      | 6 +++++-
 .../containers/supportClazzes/DeferredCreationPolicy.as     | 6 ++++--
 .../experimental/src/spark/events/ColorChangeEvent.as       | 6 +++++-
 .../projects/experimental/src/spark/events/MenuEvent.as     | 5 ++++-
 .../experimental/src/spark/layouts/AccordionLayout.as       | 7 +++++--
 .../experimental/src/spark/layouts/CarouselLayout.as        | 5 ++++-
 .../experimental/src/spark/layouts/CoverflowLayout.as       | 7 +++++--
 .../experimental/src/spark/layouts/InlineScrollerLayout.as  | 7 +++++--
 .../experimental/src/spark/layouts/RolodexLayout.as         | 5 ++++-
 .../projects/experimental/src/spark/layouts/StackLayout.as  | 7 +++++--
 .../experimental/src/spark/layouts/TimeMachineLayout.as     | 5 ++++-
 .../layouts/supportClasses/AnimationNavigatorLayoutBase.as  | 5 ++++-
 .../src/spark/layouts/supportClasses/INavigatorLayout.as    | 5 ++++-
 .../src/spark/layouts/supportClasses/LayoutAxis.as          | 6 ++++--
 .../src/spark/layouts/supportClasses/NavigatorLayoutBase.as | 8 +++++---
 .../PerspectiveAnimationNavigatorLayoutBase.as              | 5 ++++-
 .../supportClasses/PerspectiveNavigatorLayoutBase.as        | 5 ++++-
 .../src/spark/managers/INavigatorBrowserManager.as          | 5 ++++-
 .../src/spark/managers/NavigatorBrowserManager.as           | 7 +++++--
 .../src/spark/managers/NavigatorBrowserManagerImpl.as       | 5 ++++-
 .../experimental/src/spark/supportClasses/INavigator.as     | 7 +++++--
 .../experimental/src/spark/utils/ColorPickerUtil.as         | 6 +++++-
 .../components/itemRenderers/IMobileGridCellRenderer.as     | 2 ++
 .../components/itemRenderers/IMobileGridTextCellRenderer.as | 2 ++
 .../itemRenderers/MobileGridBitmapCellRenderer.as           | 2 ++
 .../components/itemRenderers/MobileGridTextCellRenderer.as  | 2 ++
 .../components/supportClasses/ListMultiPartColumnLayout.as  | 3 +++
 .../src/spark/components/supportClasses/MobileGridColumn.as | 2 ++
 .../src/spark/components/supportClasses/MobileGridHeader.as | 3 +++
 .../components/supportClasses/MobileGridRowRenderer.as      | 3 +++
 .../src/spark/events/MobileGridHeaderEvent.as               | 2 ++
 .../src/spark/layouts/MobileGridLayout.as                   | 2 ++
 .../experimental_mobile/src/spark/utils/MobileGridUtil.as   | 4 ++--
 54 files changed, 210 insertions(+), 61 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/Alert.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/Alert.as b/frameworks/projects/experimental/src/spark/components/Alert.as
index 75d46b6..770b454 100644
--- a/frameworks/projects/experimental/src/spark/components/Alert.as
+++ b/frameworks/projects/experimental/src/spark/components/Alert.as
@@ -80,6 +80,9 @@ package spark.components {
 
     [ResourceBundle("alert")]
 
+    // for asdoc
+    [Experimental]
+
     /**
      *  The Alert control is a pop-up dialog box that can contain a message,
      *  a title, buttons (any combination of OK, Cancel, Yes, and No) and an icon.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/ArrowDirection.as b/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
index 0c76292..4c4d8ac 100644
--- a/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
+++ b/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
@@ -18,6 +18,8 @@
 ////////////////////////////////////////////////////////////////////////////////
 package spark.components
 {
+   // for asdoc
+  [Experimental]
 	/**
 	 *  Enumeration of arrow directions for use in visual components.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/BorderDataNavigator.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/BorderDataNavigator.as b/frameworks/projects/experimental/src/spark/components/BorderDataNavigator.as
index 2c9dcb0..ec467db 100644
--- a/frameworks/projects/experimental/src/spark/components/BorderDataNavigator.as
+++ b/frameworks/projects/experimental/src/spark/components/BorderDataNavigator.as
@@ -22,6 +22,9 @@ package spark.components
 	import mx.graphics.IStroke;
 	import spark.components.DataNavigator;
 
+    // for asdoc
+    [Experimental]
+
 	public class BorderDataNavigator extends DataNavigator
 	{
 		public function BorderDataNavigator()

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/CallOut.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOut.as b/frameworks/projects/experimental/src/spark/components/CallOut.as
index 37d6d81..e216259 100644
--- a/frameworks/projects/experimental/src/spark/components/CallOut.as
+++ b/frameworks/projects/experimental/src/spark/components/CallOut.as
@@ -39,6 +39,9 @@ package spark.components
 	
 	
 	use namespace mx_internal;
+
+    // for asdoc
+    [Experimental]
 	
 	//--------------------------------------
 	//  Styles

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/CallOutButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOutButton.as b/frameworks/projects/experimental/src/spark/components/CallOutButton.as
index c2f8d24..fd825c3 100644
--- a/frameworks/projects/experimental/src/spark/components/CallOutButton.as
+++ b/frameworks/projects/experimental/src/spark/components/CallOutButton.as
@@ -36,6 +36,9 @@ package spark.components
 	import spark.components.supportClasses.IDropDownContainer;
 	
 	use namespace mx_internal;
+
+    // for asdoc
+    [Experimental]
 	
 	[Event(name="close", type="spark.events.DropDownEvent")]
 	[Event(name="open", type="spark.events.DropDownEvent")]

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOutPosition.as b/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
index 01dc9e1..a25826a 100644
--- a/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
+++ b/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
@@ -18,7 +18,10 @@
 ////////////////////////////////////////////////////////////////////////////////
 package spark.components
 {
-	/**
+    // for asdoc
+    [Experimental]
+
+/**
 	 *  The CalloutPosition calss defines the enumeration of 
 	 *  horizontal and vertical positions of the Callout component
 	 *  relative to the owner.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/ColorPicker.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/ColorPicker.as b/frameworks/projects/experimental/src/spark/components/ColorPicker.as
index d4ad1a5..a340a10 100644
--- a/frameworks/projects/experimental/src/spark/components/ColorPicker.as
+++ b/frameworks/projects/experimental/src/spark/components/ColorPicker.as
@@ -29,7 +29,10 @@ package spark.components {
     import spark.primitives.Line;
     import spark.utils.ColorPickerUtil;
 
-    /**
+    // for asdoc
+    [Experimental]
+
+/**
      * Dispatched when a color is chosen
      *
      *  @langversion 3.0

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/DataAccordion.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/DataAccordion.as b/frameworks/projects/experimental/src/spark/components/DataAccordion.as
index b52479c..173b4b2 100644
--- a/frameworks/projects/experimental/src/spark/components/DataAccordion.as
+++ b/frameworks/projects/experimental/src/spark/components/DataAccordion.as
@@ -27,10 +27,12 @@ package spark.components
 	import spark.layouts.AccordionLayout;
 	
 	import mx.utils.BitFlagUtil;
-	
 
-	
-	/**
+
+    // for asdoc
+    [Experimental]
+
+/**
 	 *  An Spark DataAccordion navigator displays a list of items,
 	 *  but only one of them at a time is fully visible.
 	 *  It creates and manages navigator buttons, which you use

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/DataNavigator.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/DataNavigator.as b/frameworks/projects/experimental/src/spark/components/DataNavigator.as
index 86d2214..e88cd88 100644
--- a/frameworks/projects/experimental/src/spark/components/DataNavigator.as
+++ b/frameworks/projects/experimental/src/spark/components/DataNavigator.as
@@ -42,10 +42,13 @@ package spark.components
 	
 	import spark.layouts.supportClasses.AnimationNavigatorLayoutBase;
 	import spark.layouts.supportClasses.INavigatorLayout;
-	
+
 	use namespace mx_internal;
-	
-	//--------------------------------------
+
+    // for asdoc
+    [Experimental]
+
+//--------------------------------------
 	//  Events
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/DataNavigatorGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/DataNavigatorGroup.as b/frameworks/projects/experimental/src/spark/components/DataNavigatorGroup.as
index 3267b10..db5d290 100644
--- a/frameworks/projects/experimental/src/spark/components/DataNavigatorGroup.as
+++ b/frameworks/projects/experimental/src/spark/components/DataNavigatorGroup.as
@@ -38,7 +38,10 @@ package spark.components
 	
 	use namespace mx_internal;
 
-	//--------------------------------------
+    // for asdoc
+    [Experimental]
+
+//--------------------------------------
 	//  Events
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/InlineScroller.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/InlineScroller.as b/frameworks/projects/experimental/src/spark/components/InlineScroller.as
index cb01a86..9f09a38 100644
--- a/frameworks/projects/experimental/src/spark/components/InlineScroller.as
+++ b/frameworks/projects/experimental/src/spark/components/InlineScroller.as
@@ -22,8 +22,11 @@ package spark.components
 	import spark.components.supportClasses.Skin;
 	
 	import spark.layouts.InlineScrollerLayout;
-	
-	/**
+
+    // for asdoc
+    [Experimental]
+
+/**
 	 *  The InlineScroller component displays a single scrollable component, 
 	 *  called a viewport, and horizontal and vertical scroll bars. 
 	 *  The viewport must implement the IViewport interface.  Its skin

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/Menu.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/Menu.as b/frameworks/projects/experimental/src/spark/components/Menu.as
index 426345c..37c89f8 100644
--- a/frameworks/projects/experimental/src/spark/components/Menu.as
+++ b/frameworks/projects/experimental/src/spark/components/Menu.as
@@ -40,7 +40,10 @@ package spark.components
 	import spark.events.MenuEvent;
 	import spark.skins.MenuSkin;
 
-	/**
+    // for asdoc
+    [Experimental]
+
+/**
 	 * Plain simple Menu class, based upon list.
 	 * It is used as standalone and in combination with MenuBar
 	 *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/MenuBar.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/MenuBar.as b/frameworks/projects/experimental/src/spark/components/MenuBar.as
index fefae19..4596f9d 100644
--- a/frameworks/projects/experimental/src/spark/components/MenuBar.as
+++ b/frameworks/projects/experimental/src/spark/components/MenuBar.as
@@ -39,7 +39,10 @@ package spark.components
     import spark.events.MenuEvent;
     import spark.skins.MenuBarSkin;
 
-	/**
+    // for asdoc
+    [Experimental]
+
+/**
 	 * Plain simple MenuBar class, based upon list.
 	 *
 	 *  @langversion 3.0

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/components/ProgressBar.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/ProgressBar.as b/frameworks/projects/experimental/src/spark/components/ProgressBar.as
index e8eb9ed..7470842 100644
--- a/frameworks/projects/experimental/src/spark/components/ProgressBar.as
+++ b/frameworks/projects/experimental/src/spark/components/ProgressBar.as
@@ -31,7 +31,10 @@ package spark.components {
     import spark.components.supportClasses.SkinnableComponent;
     import spark.core.IDisplayText;
 
-    /**
+    // for asdoc
+    [Experimental]
+
+/**
      * Plain and simple progress bar
      *
      * @author Bogdan Dinu (http://www.badu.ro)

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/Accordion.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/Accordion.as b/frameworks/projects/experimental/src/spark/containers/Accordion.as
index f9f3690..eec61d5 100644
--- a/frameworks/projects/experimental/src/spark/containers/Accordion.as
+++ b/frameworks/projects/experimental/src/spark/containers/Accordion.as
@@ -27,8 +27,11 @@ package spark.containers
 	import spark.layouts.supportClasses.INavigatorLayout;
 	
 	import mx.utils.BitFlagUtil;
-	
-	/**
+
+    // for asdoc
+    [Experimental]
+
+/**
 	 *  An Spark Accordion navigator container has a collection IVisualElements,
 	 *  but only one of them at a time is fully visible.
 	 *  It creates and manages navigator buttons, which you use

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as b/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
index 1bb6553..722f80d 100644
--- a/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
@@ -53,8 +53,11 @@ package spark.containers
 	import spark.containers.supportClazzes.DeferredCreationPolicy;
 	
 	use namespace mx_internal;
-	
-	//--------------------------------------
+
+// for asdoc
+[Experimental]
+
+//--------------------------------------
 	//  Events
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/DividedGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/DividedGroup.as b/frameworks/projects/experimental/src/spark/containers/DividedGroup.as
index e7da31f..ca5e046 100644
--- a/frameworks/projects/experimental/src/spark/containers/DividedGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/DividedGroup.as
@@ -28,7 +28,10 @@ package spark.containers
 
 	import spark.components.Group;
 
-	[Exclude(name="layout", kind="property")]
+// for asdoc
+[Experimental]
+
+[Exclude(name="layout", kind="property")]
 	[DefaultProperty("children")]
 	[ResourceBundle("dividers")]
 	/**

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/Divider.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/Divider.as b/frameworks/projects/experimental/src/spark/containers/Divider.as
index 7d92f88..1f009d9 100644
--- a/frameworks/projects/experimental/src/spark/containers/Divider.as
+++ b/frameworks/projects/experimental/src/spark/containers/Divider.as
@@ -21,7 +21,11 @@ package spark.containers
 	import mx.core.IVisualElement;
 
 	import spark.components.Group;
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	*  @langversion 3.0
 	*  @playerversion Flash 10.1
 	*  @playerversion AIR 2.5

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/HDividerGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/HDividerGroup.as b/frameworks/projects/experimental/src/spark/containers/HDividerGroup.as
index 7d8f145..570565f 100644
--- a/frameworks/projects/experimental/src/spark/containers/HDividerGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/HDividerGroup.as
@@ -24,7 +24,11 @@ package spark.containers
 	import mx.core.IVisualElement;
 
 	import spark.layouts.HorizontalLayout;
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.1
 	 *  @playerversion AIR 2.5

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/Navigator.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/Navigator.as b/frameworks/projects/experimental/src/spark/containers/Navigator.as
index 6743bb3..09a5994 100644
--- a/frameworks/projects/experimental/src/spark/containers/Navigator.as
+++ b/frameworks/projects/experimental/src/spark/containers/Navigator.as
@@ -41,10 +41,11 @@ package spark.containers
 	import spark.supportClasses.INavigator;
 	
 	use namespace mx_internal;
-	
-	
-	
-	//--------------------------------------
+
+// for asdoc
+[Experimental]
+
+//--------------------------------------
 	//  Styles
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as b/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as
index 3a4cb9f..c352d47 100644
--- a/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as
@@ -35,9 +35,11 @@ package spark.containers
 	import spark.layouts.StackLayout;
 	import spark.layouts.supportClasses.AnimationNavigatorLayoutBase;
 	import spark.layouts.supportClasses.INavigatorLayout;
-	
 
-	//--------------------------------------
+// for asdoc
+[Experimental]
+
+//--------------------------------------
 	//  Events
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/VDividerGroup.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/VDividerGroup.as b/frameworks/projects/experimental/src/spark/containers/VDividerGroup.as
index 5a547ff..55486f4 100644
--- a/frameworks/projects/experimental/src/spark/containers/VDividerGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/VDividerGroup.as
@@ -24,7 +24,11 @@ package spark.containers
 	import mx.core.IVisualElement;
 
 	import spark.layouts.VerticalLayout;
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  @langversion 3.0
 	 *  @playerversion Flash 10.1
 	 *  @playerversion AIR 2.5

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/containers/supportClazzes/DeferredCreationPolicy.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/containers/supportClazzes/DeferredCreationPolicy.as b/frameworks/projects/experimental/src/spark/containers/supportClazzes/DeferredCreationPolicy.as
index 0d8d2d2..0c6c11f 100644
--- a/frameworks/projects/experimental/src/spark/containers/supportClazzes/DeferredCreationPolicy.as
+++ b/frameworks/projects/experimental/src/spark/containers/supportClazzes/DeferredCreationPolicy.as
@@ -18,9 +18,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 package spark.containers.supportClazzes
 {
-	
 
-	/**
+    // for asdoc
+    [Experimental]
+
+/**
 	 *  The DeferredCreationPolicy class defines the constant values
 	 *  for the <code>creationPolicy</code> property of the DeferedGroup class.
 	 *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/events/ColorChangeEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/events/ColorChangeEvent.as b/frameworks/projects/experimental/src/spark/events/ColorChangeEvent.as
index 5bae91f..16bef2f 100644
--- a/frameworks/projects/experimental/src/spark/events/ColorChangeEvent.as
+++ b/frameworks/projects/experimental/src/spark/events/ColorChangeEvent.as
@@ -19,7 +19,11 @@
 package spark.events
 {
 	import flash.events.Event;
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 * @author Bogdan Dinu (http://www.badu.ro)
 	 */
 	public class ColorChangeEvent extends Event

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/events/MenuEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/events/MenuEvent.as b/frameworks/projects/experimental/src/spark/events/MenuEvent.as
index 9436e34..9a77444 100644
--- a/frameworks/projects/experimental/src/spark/events/MenuEvent.as
+++ b/frameworks/projects/experimental/src/spark/events/MenuEvent.as
@@ -22,7 +22,10 @@ package spark.events {
     import spark.components.List;
     import spark.components.Menu;
 
-    /**
+// for asdoc
+[Experimental]
+
+/**
      * @author Bogdan Dinu (http://www.badu.ro)
      */
     public class MenuEvent extends IndexChangeEvent {

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/AccordionLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/AccordionLayout.as b/frameworks/projects/experimental/src/spark/layouts/AccordionLayout.as
index 5d5084f1..ed63703 100644
--- a/frameworks/projects/experimental/src/spark/layouts/AccordionLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/AccordionLayout.as
@@ -35,8 +35,11 @@ package spark.layouts
 	import spark.layouts.supportClasses.LayoutAxis;
 
 	use namespace mx_internal;
-	
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  An AccordionLayout class arranges the layout elements in a vertical
 	 *  or horizontal sequence, with one of them at a time fully visible.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/CarouselLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/CarouselLayout.as b/frameworks/projects/experimental/src/spark/layouts/CarouselLayout.as
index 123febf..fb44853 100644
--- a/frameworks/projects/experimental/src/spark/layouts/CarouselLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/CarouselLayout.as
@@ -32,7 +32,10 @@ package spark.layouts
 	
 	import spark.layouts.supportClasses.PerspectiveAnimationNavigatorLayoutBase;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  A CarouselLayout class arranges the layout elements in a
 	 *  sequence along an arc, with one of them at a time selected.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/CoverflowLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/CoverflowLayout.as b/frameworks/projects/experimental/src/spark/layouts/CoverflowLayout.as
index b9d3ab8..f4ce5c0 100644
--- a/frameworks/projects/experimental/src/spark/layouts/CoverflowLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/CoverflowLayout.as
@@ -32,8 +32,11 @@ package spark.layouts
 	import spark.primitives.supportClasses.GraphicElement;
 	
 	import spark.layouts.supportClasses.PerspectiveAnimationNavigatorLayoutBase;
-	
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  A CoverflowLayout class arranges the layout elements in a
 	 *  linear along with unselected items having a different z and rotation.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/InlineScrollerLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/InlineScrollerLayout.as b/frameworks/projects/experimental/src/spark/layouts/InlineScrollerLayout.as
index 7177dd7..205f461 100644
--- a/frameworks/projects/experimental/src/spark/layouts/InlineScrollerLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/InlineScrollerLayout.as
@@ -31,8 +31,11 @@ package spark.layouts
 	import spark.core.IViewport;
 	import spark.layouts.supportClasses.LayoutBase;
 	import spark.layouts.supportClasses.LayoutElementHelper;
-	
-	[ExcludeClass]
+
+// for asdoc
+[Experimental]
+
+[ExcludeClass]
 	
 	/**
 	 *  @private

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/RolodexLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/RolodexLayout.as b/frameworks/projects/experimental/src/spark/layouts/RolodexLayout.as
index c7428d4..44dec5d 100644
--- a/frameworks/projects/experimental/src/spark/layouts/RolodexLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/RolodexLayout.as
@@ -25,7 +25,10 @@ package spark.layouts
 	import spark.layouts.HorizontalAlign;
 	import spark.layouts.VerticalAlign;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  The RolodexLayout class arranges the layout elements in a depth sequence,
 	 *  front to back, with optional depths between the elements and optional aligment
 	 *  of the sequence of elements.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/StackLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/StackLayout.as b/frameworks/projects/experimental/src/spark/layouts/StackLayout.as
index fee7e0d..0efe3c5 100644
--- a/frameworks/projects/experimental/src/spark/layouts/StackLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/StackLayout.as
@@ -45,8 +45,11 @@ package spark.layouts
 	import spark.layouts.supportClasses.NavigatorLayoutBase;
 
 	use namespace mx_internal;
-	
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  An StackLayout class shows a single element at a time..
 	 * 
 	 *  <p>The horizontal position of the shown element is determined by the layout's

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/TimeMachineLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/TimeMachineLayout.as b/frameworks/projects/experimental/src/spark/layouts/TimeMachineLayout.as
index ec649d8..876d50e 100644
--- a/frameworks/projects/experimental/src/spark/layouts/TimeMachineLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/TimeMachineLayout.as
@@ -29,7 +29,10 @@ package spark.layouts
 	import spark.layouts.supportClasses.AnimationNavigatorLayoutBase;
 	import spark.layouts.supportClasses.PerspectiveAnimationNavigatorLayoutBase;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  The TimeMachineLayout class arranges the layout elements in a depth sequence,
 	 *  front to back, with optional depths between the elements and optional aligment
 	 *  the sequence of elements.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
index 7cbafe4..9b77301 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
@@ -27,7 +27,10 @@ package spark.layouts.supportClasses
 	
 	import spark.components.supportClazzes.AnimationTarget;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  A AnimationNavigatorLayoutBase class is a base class for navigator layouts
 	 *  that can animation between indices.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/INavigatorLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/INavigatorLayout.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/INavigatorLayout.as
index 5f4e28c..0c5ff1d 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/INavigatorLayout.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/INavigatorLayout.as
@@ -23,7 +23,10 @@ package spark.layouts.supportClasses
 	import mx.core.ISelectableList;
 	import mx.core.IVisualElement;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  The INavigatorLayout interface indicates that the implementor
 	 * 	is an LayoutBase that supports a <code>selectedIndex</code> property.
 	 *  

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/LayoutAxis.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/LayoutAxis.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/LayoutAxis.as
index 445b111..538cc68 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/LayoutAxis.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/LayoutAxis.as
@@ -18,9 +18,11 @@
 ////////////////////////////////////////////////////////////////////////////////
 package spark.layouts.supportClasses
 {
-	
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  The DeferredCreationPolicy class defines the constant values
 	 *  for the <code>creationPolicy</code> property of the DeferedGroup class.
 	 *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/NavigatorLayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/NavigatorLayoutBase.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/NavigatorLayoutBase.as
index ce3e7bc..8971163 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/NavigatorLayoutBase.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/NavigatorLayoutBase.as
@@ -37,9 +37,11 @@ package spark.layouts.supportClasses
 	import spark.primitives.supportClasses.GraphicElement;
 	
 	use namespace mx_internal;
-	
-	
-	//--------------------------------------
+
+// for asdoc
+[Experimental]
+
+//--------------------------------------
 	//  Events
 	//--------------------------------------
 	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveAnimationNavigatorLayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveAnimationNavigatorLayoutBase.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveAnimationNavigatorLayoutBase.as
index 7a5a338..53e52ed 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveAnimationNavigatorLayoutBase.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveAnimationNavigatorLayoutBase.as
@@ -27,7 +27,10 @@ package spark.layouts.supportClasses
 	import spark.layouts.VerticalAlign;
 	import spark.primitives.Rect;
 
-	public class PerspectiveAnimationNavigatorLayoutBase extends AnimationNavigatorLayoutBase
+// for asdoc
+[Experimental]
+
+public class PerspectiveAnimationNavigatorLayoutBase extends AnimationNavigatorLayoutBase
 	{
 		
 		

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveNavigatorLayoutBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveNavigatorLayoutBase.as b/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveNavigatorLayoutBase.as
index 83986f9..810f667 100644
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveNavigatorLayoutBase.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/PerspectiveNavigatorLayoutBase.as
@@ -25,7 +25,10 @@ package spark.layouts.supportClasses
 	import spark.layouts.HorizontalAlign;
 	import spark.layouts.VerticalAlign;
 
-	public class PerspectiveNavigatorLayoutBase extends NavigatorLayoutBase
+// for asdoc
+[Experimental]
+
+public class PerspectiveNavigatorLayoutBase extends NavigatorLayoutBase
 	{
 		
 		private var _projectionChanged	: Boolean;

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/managers/INavigatorBrowserManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/managers/INavigatorBrowserManager.as b/frameworks/projects/experimental/src/spark/managers/INavigatorBrowserManager.as
index 5b12b7f..d90e0fe 100644
--- a/frameworks/projects/experimental/src/spark/managers/INavigatorBrowserManager.as
+++ b/frameworks/projects/experimental/src/spark/managers/INavigatorBrowserManager.as
@@ -20,7 +20,10 @@ package spark.managers
 {
 	import spark.layouts.supportClasses.INavigatorLayout;
 
-	/**
+// for asdoc
+[Experimental]
+
+/**
 	 *  The interface that the shared instance of the NavigtorBrowserManager
 	 *  implements, which is accessed with the <code>NavigtorBrowserManager.getInstance()</code> method.
 	 * 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManager.as b/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManager.as
index 4ab47e8..a9ab07a 100644
--- a/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManager.as
+++ b/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManager.as
@@ -20,8 +20,11 @@ package spark.managers
 {
 	
 	import mx.core.Singleton;
-	
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *  @private
 	 *  The NavigatorBrowserManager is a Singleton manager that acts as
 	 *  a proxy between the BrowserManager and INavigatorLayout instances

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManagerImpl.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManagerImpl.as b/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManagerImpl.as
index 79213de..a910334 100644
--- a/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManagerImpl.as
+++ b/frameworks/projects/experimental/src/spark/managers/NavigatorBrowserManagerImpl.as
@@ -34,7 +34,10 @@ package spark.managers
 	
 	import spark.layouts.supportClasses.INavigatorLayout;
 
-	[ExcludeClass]
+// for asdoc
+[Experimental]
+
+[ExcludeClass]
 	/**
 	 *  @private
 	 *  The NavigatorBrowserManager is a Singleton manager that acts as

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/supportClasses/INavigator.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/supportClasses/INavigator.as b/frameworks/projects/experimental/src/spark/supportClasses/INavigator.as
index a67c3f0..a1e4791 100644
--- a/frameworks/projects/experimental/src/spark/supportClasses/INavigator.as
+++ b/frameworks/projects/experimental/src/spark/supportClasses/INavigator.as
@@ -26,8 +26,11 @@ package spark.supportClasses
 	import spark.components.supportClasses.GroupBase;
 	
 	import spark.layouts.supportClasses.INavigatorLayout;
-	
-	public interface INavigator extends ISelectableList, IVisualElement
+
+// for asdoc
+[Experimental]
+
+public interface INavigator extends ISelectableList, IVisualElement
 	{
 		
 		function get layout():INavigatorLayout;

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental/src/spark/utils/ColorPickerUtil.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/utils/ColorPickerUtil.as b/frameworks/projects/experimental/src/spark/utils/ColorPickerUtil.as
index 7158a49..f65103d 100644
--- a/frameworks/projects/experimental/src/spark/utils/ColorPickerUtil.as
+++ b/frameworks/projects/experimental/src/spark/utils/ColorPickerUtil.as
@@ -20,7 +20,11 @@ package spark.utils
 {
 	import mx.collections.ArrayList;
 	import mx.collections.IList;
-	/**
+
+// for asdoc
+[Experimental]
+
+/**
 	 *
 	 */
 	public class ColorPickerUtil

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridCellRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridCellRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridCellRenderer.as
index abac1db..c42790f 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridCellRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridCellRenderer.as
@@ -22,6 +22,8 @@ package spark.components.itemRenderers
 import mx.core.IDataRenderer;
 import mx.styles.IStyleClient;
 
+[Experimental]
+
 /**
  * This is the base interface that all mobile grid cell renderers must implement.
  * <p>Contrary to desktop DataGrid control, there is no default implementation for this interface,

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridTextCellRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridTextCellRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridTextCellRenderer.as
index 694ed1c..fcc6247 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridTextCellRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/IMobileGridTextCellRenderer.as
@@ -19,6 +19,8 @@
 package spark.components.itemRenderers
 {
 
+[Experimental]
+
 /**  Extends IMobileGridCellRenderers with APIs for rendering text in MobileGrid cells.
  *  <p>Typically , implementors will set the text to render using labelField and/or labelFunction this way:      </p>
  *  <code> text = UIComponentUtils.itemToLabel(value, _labelField, _labelFunction); </code>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridBitmapCellRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridBitmapCellRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridBitmapCellRenderer.as
index 8ed04c4..58da36f 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridBitmapCellRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridBitmapCellRenderer.as
@@ -27,6 +27,8 @@ import spark.primitives.BitmapImage;
 
 use namespace mx_internal;
 
+[Experimental]
+
 /** Default lightweight  class for rendering embedded Bitmaps  or Multi-DPI Bitmaps in a MobileGrid cell .
  *You define the icon to be used in each cell by setting either iconField or iconFunction properties.
  *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridTextCellRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridTextCellRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridTextCellRenderer.as
index e547df1..ca6c84d 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridTextCellRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/itemRenderers/MobileGridTextCellRenderer.as
@@ -29,6 +29,8 @@ import spark.utils.LabelUtil;
 
 use namespace mx_internal;
 
+[Experimental]
+
 /** Default lightweight  class for rendering formatted text in MobileGrid cells .
  * <p> You don't have to use this render explicitly as it will be used by default for MobileGrid text cells. </p>
  *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
index 96021f1..8249203 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/ListMultiPartColumnLayout.as
@@ -27,6 +27,9 @@ import spark.core.IGraphicElement;
 
 use namespace  mx_internal;
 
+// for asdoc
+[Experimental]
+
 /** @private
  *    this class is responsible for laying out grid cells in a given MobileGrid row.
  *    It will make sure that cell content is aligned according to the column widths.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
index 23b9f87..b847c2a 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridColumn.as
@@ -32,6 +32,8 @@ import spark.components.itemRenderers.IMobileGridCellRenderer;
 import spark.components.itemRenderers.IMobileGridTextCellRenderer;
 import spark.components.itemRenderers.MobileGridTextCellRenderer;
 
+[Experimental]
+
 /**
  *  The MobileGridColumn class defines  a column to display in a MobileGrid control.
  * <p> The MobileGridColumn class specifies the characteristics of the column to display,

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
index 7ef2232..7f2a7cd 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridHeader.as
@@ -32,6 +32,9 @@ import spark.utils.MultiDPIBitmapSource;
 
 use namespace  mx_internal;
 
+// for asdoc
+[Experimental]
+
 [Event(name="sortChange", type="spark.events.MobileGridHeaderEvent")]
 
 /**  @private

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
index 34dca29..fc65c44 100644
--- a/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
+++ b/frameworks/projects/experimental_mobile/src/spark/components/supportClasses/MobileGridRowRenderer.as
@@ -32,6 +32,9 @@ import spark.core.ISharedDisplayObject;
 
 use namespace mx_internal;
 
+// for asdoc
+[Experimental]
+
 /**  @private
  *  This is the base class for multi-part renderers that manages a vector of part renderers.
  *  This class is responsible for creating and storing  the actual renderers from their descriptors

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as b/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
index c660941..30141d7 100644
--- a/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
+++ b/frameworks/projects/experimental_mobile/src/spark/events/MobileGridHeaderEvent.as
@@ -20,6 +20,8 @@ package spark.events
 {
 import flash.events.Event;
 
+[Experimental]
+
 /**
  *  The MobileGridHeaderEvent class represents events that are dispatched when
  the user clicks  on the header of a column in the DataGrid to sort it.

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/layouts/MobileGridLayout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/layouts/MobileGridLayout.as b/frameworks/projects/experimental_mobile/src/spark/layouts/MobileGridLayout.as
index 185488c..ea18d7c 100644
--- a/frameworks/projects/experimental_mobile/src/spark/layouts/MobileGridLayout.as
+++ b/frameworks/projects/experimental_mobile/src/spark/layouts/MobileGridLayout.as
@@ -26,6 +26,8 @@ import spark.utils.MobileGridUtil;
 
 use namespace  mx_internal;
 
+[Experimental]
+
 /**
  * Internal class used for laying out rows, columns and headers of a MobileGrid component.
  *

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/05ae41d6/frameworks/projects/experimental_mobile/src/spark/utils/MobileGridUtil.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/src/spark/utils/MobileGridUtil.as b/frameworks/projects/experimental_mobile/src/spark/utils/MobileGridUtil.as
index 41a8344..a382bc5 100644
--- a/frameworks/projects/experimental_mobile/src/spark/utils/MobileGridUtil.as
+++ b/frameworks/projects/experimental_mobile/src/spark/utils/MobileGridUtil.as
@@ -25,8 +25,6 @@ import mx.managers.SystemManager;
 
 import spark.components.Application;
 
-//TODO merge with spark.utils.DensityUtil
-
 /**
  * @private
  * Utility class for MobileGrid
@@ -37,6 +35,8 @@ import spark.components.Application;
 
  */
 
+    // for asdoc
+[Experimental]
 
 public class MobileGridUtil
 {


[09/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - fix case

Posted by jm...@apache.org.
fix case


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/320dea37
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/320dea37
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/320dea37

Branch: refs/heads/release4.11.0
Commit: 320dea37decdf67b724a5dd4aac1f94ec97ceb4f
Parents: 9f7b72f
Author: Tom Chiverton <to...@apache.org>
Authored: Mon Oct 7 21:50:02 2013 +0100
Committer: Tom Chiverton <to...@apache.org>
Committed: Mon Oct 7 21:50:02 2013 +0100

----------------------------------------------------------------------
 frameworks/projects/experimental_mobile/compile-config.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/320dea37/frameworks/projects/experimental_mobile/compile-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/compile-config.xml b/frameworks/projects/experimental_mobile/compile-config.xml
index 7a21013..fd8db97 100644
--- a/frameworks/projects/experimental_mobile/compile-config.xml
+++ b/frameworks/projects/experimental_mobile/compile-config.xml
@@ -27,7 +27,7 @@
             <path-element>../../libs/framework.swc</path-element>
             <path-element>../../libs/apache.swc</path-element>
             <path-element>../../libs/spark.swc</path-element>
-            <path-element>../../libs/textlayout.swc</path-element>
+            <path-element>../../libs/textLayout.swc</path-element>
             <path-element>../../libs/mobile/mobilecomponents.swc</path-element>
             <path-element>../../themes/Mobile/mobile.swc</path-element>
         </external-library-path>


[18/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - UPDATED https://issues.apache.org/jira/browse/FLEX-33350 - updated asdoc for Callout related classes so that they don't appear with AIR icon - updated references to mobile only platform - remove

Posted by jm...@apache.org.
UPDATED https://issues.apache.org/jira/browse/FLEX-33350
- updated asdoc for Callout related classes so that they don't appear with AIR icon
- updated references to mobile only platform
- removed broken image link in Callout asdoc


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/df8e5d1d
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/df8e5d1d
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/df8e5d1d

Branch: refs/heads/release4.11.0
Commit: df8e5d1d3dc832c03c253f6eb63429d447740a4b
Parents: 086add2
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 09:00:33 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 09:00:33 2013 +0200

----------------------------------------------------------------------
 .../src/spark/components/ArrowDirection.as      |  6 +++++
 .../spark/src/spark/components/Callout.as       | 25 +++++++++++++-------
 .../spark/src/spark/components/CalloutButton.as | 16 ++++++++++++-
 .../src/spark/components/CalloutPosition.as     |  7 ++++++
 .../spark/src/spark/skins/spark/CalloutSkin.as  |  1 +
 .../skins/spark/supportClasses/CalloutArrow.as  |  1 +
 6 files changed, 46 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/components/ArrowDirection.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/ArrowDirection.as b/frameworks/projects/spark/src/spark/components/ArrowDirection.as
index 2ef7c4c..771ed3c 100644
--- a/frameworks/projects/spark/src/spark/components/ArrowDirection.as
+++ b/frameworks/projects/spark/src/spark/components/ArrowDirection.as
@@ -25,6 +25,7 @@ package spark.components
  *  @see spark.components.Callout#arrowDirection
  * 
  *  @langversion 3.0
+ *  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */
@@ -40,6 +41,7 @@ public class ArrowDirection
      *  Arrow points right.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -49,6 +51,7 @@ public class ArrowDirection
      *  Arrow points up.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -58,6 +61,7 @@ public class ArrowDirection
      *  Arrow points left.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -67,6 +71,7 @@ public class ArrowDirection
      *  Arrow points down.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -76,6 +81,7 @@ public class ArrowDirection
      *  No arrow direciton.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/components/Callout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/Callout.as b/frameworks/projects/spark/src/spark/components/Callout.as
index 85593dd..7b0d137 100644
--- a/frameworks/projects/spark/src/spark/components/Callout.as
+++ b/frameworks/projects/spark/src/spark/components/Callout.as
@@ -59,6 +59,7 @@ use namespace mx_internal;
  *  @default ContentBackgroundAppearance.INSET
  *  
  *  @langversion 3.0
+ *  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */ 
@@ -69,7 +70,7 @@ use namespace mx_internal;
  *  @default 0
  *
  *  @langversion 3.0
- *  @playerversion Flash 10
+ *  @playerversion Flash 11
  *  @playerversion AIR 3.8
  *  @productversion Flex 4.11
  */
@@ -83,7 +84,7 @@ use namespace mx_internal;
  *  @default NaN
  *
  *  @langversion 3.0
- *  @playerversion Flash 10
+ *  @playerversion Flash 11
  *  @playerversion AIR 3.8
  *  @productversion Flex 4.11
  */
@@ -101,11 +102,6 @@ use namespace mx_internal;
  *  Callout also adds an optional <code>arrow</code> skin part that visually
  *  displays the direction toward the owner.
  *
- *  <p>The following image shows a Callout container labeled 'Settings':</p>
- *
- * <p>
- *  <img src="../../images/ca_calloutViewNav_ca.png" alt="Callout container" />
- * </p>
  *
  *  <p>You can also use the CalloutButton control to open a callout container. 
  *  The CalloutButton control encapsulates in a single control the callout container 
@@ -160,7 +156,9 @@ use namespace mx_internal;
  *     <tr><td>Default size</td><td>Large enough to display its children</td></tr>
  *     <tr><td>Minimum size</td><td>0 pixels</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.mobile.CalloutSkin</td></tr>
+ *     <tr><td>Default skin class</td>
+ *     <td>spark.skins.mobile.CalloutSkin<br/>
+ *           spark.skins.spark.CalloutSkin on desktops</td></tr>
  *     </table>
  *
  *  @mxml <p>The <code>&lt;s:Callout&gt;</code> tag inherits all of the tag
@@ -185,7 +183,8 @@ use namespace mx_internal;
  *  @includeExample examples/CalloutExample.mxml -noswf
  *
  *  @langversion 3.0
- *  @playerversion AIR 3
+ *  @playerversion Flash 11
+ *  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */
 public class Callout extends SkinnablePopUpContainer
@@ -209,6 +208,7 @@ public class Callout extends SkinnablePopUpContainer
      *  Constructor.
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -231,6 +231,7 @@ public class Callout extends SkinnablePopUpContainer
      *  contentGroup.
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -269,6 +270,7 @@ public class Callout extends SkinnablePopUpContainer
      *  @see spark.components.CalloutPosition
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -308,6 +310,7 @@ public class Callout extends SkinnablePopUpContainer
      *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -346,6 +349,7 @@ public class Callout extends SkinnablePopUpContainer
      *  @see spark.components.CalloutPosition
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -385,6 +389,7 @@ public class Callout extends SkinnablePopUpContainer
      *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -431,6 +436,7 @@ public class Callout extends SkinnablePopUpContainer
      *  @see spark.components.ArrowDirection
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -852,6 +858,7 @@ public class Callout extends SkinnablePopUpContainer
      *  share the same coordinate space.</p>
      *
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/components/CalloutButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/CalloutButton.as b/frameworks/projects/spark/src/spark/components/CalloutButton.as
index 7eec462..9585a3c 100644
--- a/frameworks/projects/spark/src/spark/components/CalloutButton.as
+++ b/frameworks/projects/spark/src/spark/components/CalloutButton.as
@@ -126,7 +126,8 @@ use namespace mx_internal;
  *        </tr>
  *        <tr>
  *           <td>Default skin class</td>
- *           <td>spark.skins.mobile.CalloutButtonSkin</td>
+ *           <td>spark.skins.mobile.CalloutButtonSkin on mobile platforms <br/>
+ *           spark.skins.spark.CalloutButtonSkin on desktops</td>
  *        </tr>
  *     </table>
  *
@@ -159,6 +160,7 @@ use namespace mx_internal;
  *  @includeExample examples/CalloutButtonExample.mxml -noswf
  *  
  *  @langversion 3.0
+ *  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */
@@ -200,6 +202,7 @@ public class CalloutButton extends Button
      *  Constructor.
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -227,6 +230,7 @@ public class CalloutButton extends Button
      *  instance.
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -277,6 +281,7 @@ public class CalloutButton extends Button
      *  @see spark.components.Callout
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -313,6 +318,7 @@ public class CalloutButton extends Button
      *  @default BasicLayout
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -346,6 +352,7 @@ public class CalloutButton extends Button
      *  @copy spark.components.Callout#horizontalPosition
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -382,6 +389,7 @@ public class CalloutButton extends Button
      *  @copy spark.components.Callout#verticalPosition
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -433,6 +441,7 @@ public class CalloutButton extends Button
      *  @see #calloutDestructionPolicy
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -472,6 +481,7 @@ public class CalloutButton extends Button
      *  the DropDownController instance is created in the constructor.
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -508,6 +518,7 @@ public class CalloutButton extends Button
      *  @copy spark.components.supportClasses.DropDownController#isOpen
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -538,6 +549,7 @@ public class CalloutButton extends Button
      *  @default auto
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -689,6 +701,7 @@ public class CalloutButton extends Button
      *  Initializes the dropDown and changes the skin state to open. 
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */ 
@@ -701,6 +714,7 @@ public class CalloutButton extends Button
      *  Changes the skin state to normal.
      *  
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/components/CalloutPosition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/CalloutPosition.as b/frameworks/projects/spark/src/spark/components/CalloutPosition.as
index a0b6e7d..625f523 100644
--- a/frameworks/projects/spark/src/spark/components/CalloutPosition.as
+++ b/frameworks/projects/spark/src/spark/components/CalloutPosition.as
@@ -30,6 +30,7 @@ package spark.components
  *  @see spark.components.Callout#verticalPosition
  * 
  *  @langversion 3.0
+ *  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */
@@ -40,6 +41,7 @@ public final class CalloutPosition
      *  Position the trailing edge of the callout before the leading edge of the owner.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -49,6 +51,7 @@ public final class CalloutPosition
      *  Position the leading edge of the callout at the leading edge of the owner.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -58,6 +61,7 @@ public final class CalloutPosition
      *  Position the horizontalCenter of the callout to the horizontalCenter of the owner.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -67,6 +71,7 @@ public final class CalloutPosition
      *  Position the trailing edge of the callout at the trailing edge of the owner.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -76,6 +81,7 @@ public final class CalloutPosition
      *  Position the leading edge of the callout after the trailing edge of the owner.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */
@@ -86,6 +92,7 @@ public final class CalloutPosition
      *  requires the least amount of resizing to fit.
      * 
      *  @langversion 3.0
+     *  @playerversion Flash 11
      *  @playerversion AIR 3
      *  @productversion Flex 4.6
      */

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as b/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
index d3b1357..972f464 100644
--- a/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
+++ b/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
@@ -64,6 +64,7 @@ use namespace mx_internal;
  *  @see spark.components.Callout
  *  
  *  @langversion 3.0
+ *  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */ 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/df8e5d1d/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as b/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
index 825fd1e..9a22c67 100644
--- a/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
+++ b/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
@@ -46,6 +46,7 @@ use namespace mx_internal;
  *  @see spark.skin.mobile.CalloutSkin
  *
  *  @langversion 3.0
+*  @playerversion Flash 11
  *  @playerversion AIR 3
  *  @productversion Flex 4.6
  */


[05/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - temp commit move experimental callout to spark

Posted by jm...@apache.org.
temp commit move experimental callout to spark


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/0d6e7b32
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/0d6e7b32
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/0d6e7b32

Branch: refs/heads/release4.11.0
Commit: 0d6e7b32f9f708bc871160a60b9cdc2e9a7bb7a6
Parents: 05ae41d
Author: mamsellem <ma...@systar.com>
Authored: Mon Oct 7 21:36:00 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Mon Oct 7 21:36:00 2013 +0200

----------------------------------------------------------------------
 .../projects/mobilecomponents/manifest.xml      |    2 -
 .../src/MobileComponentsClasses.as              |    2 +-
 .../src/MobileComponentsClassesAIR2.as          |    1 -
 .../src/spark/components/ArrowDirection.as      |   84 -
 .../src/spark/components/Callout.as             | 1669 ------------------
 .../src/spark/components/Callout.png            |  Bin 410 -> 0 bytes
 .../src/spark/components/CalloutButton.as       |  807 ---------
 .../src/spark/components/CalloutPosition.as     |   96 -
 .../components/ContentBackgroundAppearance.as   |   72 -
 .../spark/core/ContainerDestructionPolicy.as    |   62 -
 frameworks/projects/spark/src/SparkClasses.as   |    2 +
 .../src/spark/components/ArrowDirection.as      |   84 +
 .../spark/src/spark/components/Callout.as       | 1669 ++++++++++++++++++
 .../spark/src/spark/components/Callout.png      |  Bin 0 -> 410 bytes
 .../spark/src/spark/components/CalloutButton.as |  807 +++++++++
 .../src/spark/components/CalloutPosition.as     |   96 +
 .../components/ContentBackgroundAppearance.as   |   72 +
 .../spark/core/ContainerDestructionPolicy.as    |   62 +
 frameworks/spark-manifest.xml                   |    2 +
 19 files changed, 2795 insertions(+), 2794 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/manifest.xml b/frameworks/projects/mobilecomponents/manifest.xml
index 06cc74b..810bfea 100644
--- a/frameworks/projects/mobilecomponents/manifest.xml
+++ b/frameworks/projects/mobilecomponents/manifest.xml
@@ -25,8 +25,6 @@
 -->
 <componentPackage>
     <component id="ActionBar" class="spark.components.ActionBar"/>
-    <component id="Callout" class="spark.components.Callout"/>
-    <component id="CalloutButton" class="spark.components.CalloutButton"/>
     <component id="CrossFadeViewTransition" class="spark.transitions.CrossFadeViewTransition"/>
     <component id="DateSpinner" class="spark.components.DateSpinner"/>
     <component id="DateSpinnerItemRenderer" class="spark.components.calendarClasses.DateSpinnerItemRenderer"/>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/MobileComponentsClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/MobileComponentsClasses.as b/frameworks/projects/mobilecomponents/src/MobileComponentsClasses.as
index f213281..7da878a 100644
--- a/frameworks/projects/mobilecomponents/src/MobileComponentsClasses.as
+++ b/frameworks/projects/mobilecomponents/src/MobileComponentsClasses.as
@@ -35,6 +35,6 @@ internal class MobileComponentsClasses
     import spark.components.supportClasses.StyleableStageText; StyleableStageText;
     import spark.components.supportClasses.StyleableTextField; StyleableTextField;
     import spark.components.ActionBarDefaultButtonAppearance; ActionBarDefaultButtonAppearance;
-    import spark.components.ContentBackgroundAppearance; ContentBackgroundAppearance;
+
 }
 }

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/MobileComponentsClassesAIR2.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/MobileComponentsClassesAIR2.as b/frameworks/projects/mobilecomponents/src/MobileComponentsClassesAIR2.as
index 17f8e56..d5468cd 100644
--- a/frameworks/projects/mobilecomponents/src/MobileComponentsClassesAIR2.as
+++ b/frameworks/projects/mobilecomponents/src/MobileComponentsClassesAIR2.as
@@ -34,6 +34,5 @@ internal class MobileComponentsClassesAIR2
     import spark.preloaders.SplashScreen; SplashScreen;
     import spark.components.supportClasses.StyleableTextField; StyleableTextField;
     import spark.components.ActionBarDefaultButtonAppearance; ActionBarDefaultButtonAppearance;
-    import spark.components.ContentBackgroundAppearance; ContentBackgroundAppearance;
 }
 }

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/ArrowDirection.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/ArrowDirection.as b/frameworks/projects/mobilecomponents/src/spark/components/ArrowDirection.as
deleted file mode 100644
index 2ef7c4c..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/components/ArrowDirection.as
+++ /dev/null
@@ -1,84 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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
-{
-/**
- *  Enumeration of arrow directions for use in visual components.
- * 
- *  @see spark.components.Callout#arrowDirection
- * 
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-public class ArrowDirection
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Arrow points right.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const RIGHT:String = "right";
-    
-    /**
-     *  Arrow points up.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const UP:String = "up";
-    
-    /**
-     *  Arrow points left.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const LEFT:String = "left";
-    
-    /**
-     *  Arrow points down.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const DOWN:String = "down";
-    
-    /**
-     *  No arrow direciton.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const NONE:String = "none";
-}
-}

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/Callout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/Callout.as b/frameworks/projects/mobilecomponents/src/spark/components/Callout.as
deleted file mode 100644
index 8615ab5..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/components/Callout.as
+++ /dev/null
@@ -1,1669 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.display.DisplayObject;
-import flash.display.DisplayObjectContainer;
-import flash.events.Event;
-import flash.geom.ColorTransform;
-import flash.geom.Matrix;
-import flash.geom.Point;
-import flash.geom.Rectangle;
-
-import mx.core.DPIClassification;
-import mx.core.FlexGlobals;
-import mx.core.ILayoutElement;
-import mx.core.IVisualElement;
-import mx.core.LayoutDirection;
-import mx.core.UIComponent;
-import mx.core.mx_internal;
-import mx.events.ResizeEvent;
-import mx.managers.SystemManager;
-import mx.utils.MatrixUtil;
-import mx.utils.PopUpUtil;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Styles
-//--------------------------------------
-
-/**
- *  Appearance of the <code>contentGroup</code>. 
- *  Valid MXML values are <code>inset</code>, 
- *  <code>flat</code>, and <code>none</code>.
- *
- *  <p>In ActionScript, you can use the following constants
- *  to set this property:
- *  <code>ContentBackgroundAppearance.INSET</code>,
- *  <code>ContentBackgroundAppearance.FLAT</code> and
- *  <code>ContentBackgroundAppearance.NONE</code>.</p>
- *
- *  @default ContentBackgroundAppearance.INSET
- *  
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */ 
-[Style(name="contentBackgroundAppearance", type="String", enumeration="inset,flat,none", inherit="no")]
-
-//--------------------------------------
-//  Other metadata
-//--------------------------------------
-
-[IconFile("Callout.png")]
-
-/**
- *  The Callout container is a SkinnablePopUpContainer that functions as a pop-up
- *  with additional owner-relative positioning options similar to PopUpAnchor.
- *  Callout also adds an optional <code>arrow</code> skin part that visually
- *  displays the direction toward the owner.
- *
- *  <p>The following image shows a Callout container labeled 'Settings':</p>
- *
- * <p>
- *  <img src="../../images/ca_calloutViewNav_ca.png" alt="Callout container" />
- * </p>
- *
- *  <p>You can also use the CalloutButton control to open a callout container. 
- *  The CalloutButton control encapsulates in a single control the callout container 
- *  and all of the logic necessary to open and close the callout. 
- *  The CalloutButton control is then said to the be the owner, or host, 
- *  of the callout.</p>
- *
- *  <p>Callout uses the <code>horizontalPosition</code> and
- *  <code>verticalPosition</code> properties to determine the position of the
- *  Callout relative to the owner that is specified by the <code>open()</code>
- *  method. 
- *  Both properties can be set to <code>CalloutPosition.AUTO</code> which selects a
- *  position based on the aspect ratio of the screen for the Callout to fit
- *  with minimal overlap with the owner and and minimal adjustments at the
- *  screen bounds.</p>
- *
- *  <p>Once positioned, the Callout positions the arrow on the side adjacent
- *  to the owner, centered as close as possible on the horizontal or vertical
- *  center of the owner as appropriate. The arrow is hidden in cases where
- *  the Callout position is not adjacent to any edge.</p>
- *
- *  <p>You do not create a Callout container as part of the normal layout
- *  of its parent container.
- *  Instead, it appears as a pop-up container on top of its parent.
- *  Therefore, you do not create it directly in the MXML code of your application.</p>
- *
- *  <p>Instead, you create is as an MXML component, often in a separate MXML file.
- *  To show the component create an instance of the MXML component, and
- *  then call the <code>open()</code> method.
- *  You can also set the size and position of the component when you open it.</p>
- *
- *  <p>To close the component, call the <code>close()</code> method.
- *  If the pop-up needs to return data to a handler, you can add an event listener for
- *  the <code>PopUp.CLOSE</code> event, and specify the returned data in
- *  the <code>close()</code> method.</p>
- *
- *  <p>The Callout is initially in its <code>closed</code> skin state.
- *  When it opens, it adds itself as a pop-up to the PopUpManager,
- *  and transition to the <code>normal</code> skin state.
- *  To define open and close animations, use a custom skin with transitions between
- *  the <code>closed</code> and <code>normal</code> skin states.</p>
- * 
- *  <p>Callout changes the default inheritance behavior seen in Flex components 
- *  and instead, inherits styles from the top-level application. This prevents
- *  Callout's contents from unintentionally inheriting styles from an owner
- *  (i.e. Button or TextInput) where the default appearance was desired and
- *  expected.</p>
- *
- *  <p>The Callout container has the following default characteristics:</p>
- *     <table class="innertable">
- *     <tr><th>Characteristic</th><th>Description</th></tr>
- *     <tr><td>Default size</td><td>Large enough to display its children</td></tr>
- *     <tr><td>Minimum size</td><td>0 pixels</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.mobile.CalloutSkin</td></tr>
- *     </table>
- *
- *  @mxml <p>The <code>&lt;s:Callout&gt;</code> tag inherits all of the tag
- *  attributes of its superclass and adds the following tag attributes:</p>
- *
- *  <pre>
- *  &lt;s:Callout
- *    <strong>Properties</strong>
- *    horizontalPosition="auto"
- *    verticalPosition="auto"
- *
- *    <strong>Styles</strong>
- *    contentBackgroundAppearance="inset"
- *  /&gt;
- *  </pre>
- *
- *  @see spark.components.CalloutButton
- *  @see spark.skins.mobile.CalloutSkin
- *  @see spark.components.ContentBackgroundAppearance
- *  @see spark.components.CalloutPosition
- *
- *  @includeExample examples/CalloutExample.mxml -noswf
- *
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-public class Callout extends SkinnablePopUpContainer
-{
-
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-
-    private static var decomposition:Vector.<Number> = new <Number>[0,0,0,0,0];
-
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Constructor.
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function Callout()
-    {
-        super();
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Skin parts
-    //
-    //--------------------------------------------------------------------------
-
-    [Bindable]
-    [SkinPart(required="false")]
-
-    /**
-     *  An optional skin part that visually connects the owner to the
-     *  contentGroup.
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public var arrow:UIComponent;
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Variables
-    //
-    //--------------------------------------------------------------------------
-    
-    private var invalidatePositionFlag:Boolean = false;
-
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-
-    //----------------------------------
-    //  horizontalPosition
-    //----------------------------------
-
-    private var _horizontalPosition:String = CalloutPosition.AUTO;
-
-    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-
-    /**
-     *  Horizontal position of the callout relative to the owner.
-     *
-     *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
-     *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
-     *  and <code>"auto"</code> (default).</p>
-     *
-     *  @default CalloutPosition.AUTO
-     *  @see spark.components.CalloutPosition
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get horizontalPosition():String
-    {
-        return _horizontalPosition;
-    }
-
-    /**
-     *  @private
-     */
-    public function set horizontalPosition(value:String):void
-    {
-        if (value == _horizontalPosition)
-            return;
-
-        _horizontalPosition = value;
-
-        invalidatePosition();
-    }
-
-    //----------------------------------
-    //  actualHorizontalPosition
-    //----------------------------------
-
-    private var _actualHorizontalPosition:String;
-
-    /**
-     *  Fully resolved horizontal position after evaluating CalloutPosition.AUTO.
-     * 
-     *  <p>Update this property in <code>commitProperties()</code> when the
-     *  explicit <code>horizontalPosition</code> is CalloutPosition.AUTO. 
-     *  This property must be updated in <code>updatePopUpPosition()</code>
-     *  when attempting to reposition the Callout.</p> 
-     *  
-     *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
-     *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    protected function get actualHorizontalPosition():String
-    {
-        if (_actualHorizontalPosition)
-            return _actualHorizontalPosition;
-
-        return horizontalPosition;
-    }
-
-    /**
-     *  @private
-     */
-    protected function set actualHorizontalPosition(value:String):void
-    {
-        _actualHorizontalPosition = value;
-    }
-
-    //----------------------------------
-    //  verticalPosition
-    //----------------------------------
-
-    private var _verticalPosition:String = CalloutPosition.AUTO;
-
-    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-
-    /**
-     *  Vertical position of the callout relative to the owner.
-     *
-     *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
-     *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
-     *  and <code>"auto"</code> (default).</p>
-     *
-     *  @default CalloutPosition.AUTO
-     *  @see spark.components.CalloutPosition
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get verticalPosition():String
-    {
-        return _verticalPosition;
-    }
-
-    /**
-     *  @private
-     */
-    public function set verticalPosition(value:String):void
-    {
-        if (value == _verticalPosition)
-            return;
-
-        _verticalPosition = value;
-
-        invalidatePosition();
-    }
-
-    //----------------------------------
-    //  actualVerticalPosition
-    //----------------------------------
-
-    private var _actualVerticalPosition:String;
-    
-    /**
-     *  Fully resolved vertical position after evaluating CalloutPosition.AUTO.
-     * 
-     *  <p>Update this property in <code>commitProperties()</code> when the
-     *  explicit <code>verticalPosition</code> is CalloutPosition.AUTO. 
-     *  This property must be updated in <code>updatePopUpPosition()</code>
-     *  when attempting to reposition the Callout.</p> 
-     *  
-     *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
-     *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    protected function get actualVerticalPosition():String
-    {
-        if (_actualVerticalPosition)
-            return _actualVerticalPosition;
-
-        return verticalPosition;
-    }
-
-    /**
-     *  @private
-     */
-    protected function set actualVerticalPosition(value:String):void
-    {
-        _actualVerticalPosition = value;
-    }
-
-    //----------------------------------
-    //  arrowDirection
-    //----------------------------------
-
-    private var _arrowDirection:String = ArrowDirection.NONE;
-    
-    /**
-     *  @private
-     *  Indicates if arrow direction was flipped automatically.
-     */
-    private var arrowDirectionAdjusted:Boolean = false;
-
-    /**
-     *  A read-only property that indicates the direction from the callout
-     *  towards the owner.
-     *
-     *  <p>This value is computed based on the callout position given by
-     *  <code>horizontalPosition</code> and <code>verticalPosition</code>.
-     *  Exterior and interior positions will point from the callout towards
-     *  the edge of the owner. Corner and absolute center positions are not
-     *  supported and will return a value of <code>"none".</code></p>
-     * 
-     *  @default none
-     *
-     *  @see spark.components.ArrowDirection
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get arrowDirection():String
-    {
-        return _arrowDirection;
-    }
-    
-    /**
-     *  @private
-     *  Invalidate skin when the arrowDirection changes. Dispatches an 
-     *  "arrowDirectionChanged" event when the property is set.
-     */
-    mx_internal function setArrowDirection(value:String):void
-    {
-        if (_arrowDirection == value)
-            return;
-        
-        _arrowDirection = value;
-        
-        // Instead of using skin states for each arrowDirection, the
-        // skin must override commitProperties() and account for
-        // arrowDirection on it's own.
-        skin.invalidateProperties();
-        
-        // adjust margins based on arrow direction
-        switch (arrowDirection)
-        {
-            case ArrowDirection.DOWN:
-            {
-                // Set the marginBottom to zero to place the arrow adjacent to the keyboard
-                softKeyboardEffectMarginBottom = 0;
-                softKeyboardEffectMarginTop = margin;
-                break;
-            }
-            case ArrowDirection.UP:
-            {
-                // Arrow should already be adjacent to the owner or the top of
-                // the screen.
-                softKeyboardEffectMarginTop = 0;
-                softKeyboardEffectMarginBottom = margin;
-                break;
-            }
-            default:
-            {
-                softKeyboardEffectMarginBottom = margin;
-                softKeyboardEffectMarginTop = margin;
-                break;
-            }
-        }
-        
-        if (hasEventListener("arrowDirectionChanged"))
-            dispatchEvent(new Event("arrowDirectionChanged"));
-    }
-    
-    //----------------------------------
-    //  margin
-    //----------------------------------
-    
-    private var _margin:Number = NaN;
-    
-    /**
-     *  @private
-     *  Defines a margin around the Callout to nudge it's position away from the
-     *  edge of the screen.
-     */
-    mx_internal function get margin():Number
-    {
-        if (isNaN(_margin))
-        {
-            var dpi:Number = FlexGlobals.topLevelApplication["applicationDPI"];
-            
-            if (dpi)
-            {
-                switch (dpi)
-                {
-					case DPIClassification.DPI_640:
-					{
-						_margin = 32;
-						break;
-					}
-					case DPIClassification.DPI_480:
-					{
-						_margin = 24;
-						break;
-					}
-                    case DPIClassification.DPI_320:
-                    {
-                        _margin = 16;
-                        break;
-                    }
-					case DPIClassification.DPI_240:
-					{
-						_margin = 12;
-						break;
-					}
-					case DPIClassification.DPI_120:
-					{
-						_margin = 6;
-						break;
-					}
-                    default:
-                    {
-                        // default DPI_160
-                        _margin = 8;
-                        break;
-                    }
-                }
-            }
-            else
-            {
-                _margin = 8;
-            }
-        }
-        
-        return _margin;
-    }
-    
-    private var _explicitMoveForSoftKeyboard:Boolean = false;
-    
-    /**
-     *  @private
-     */
-    override public function get moveForSoftKeyboard():Boolean
-    {
-        // If no explicit setting, then automatically disable move when
-        // pointing up towards the owner.
-        if (!_explicitMoveForSoftKeyboard && 
-            (arrowDirection == ArrowDirection.UP))
-        {
-            return false;
-        }
-        
-        return super.moveForSoftKeyboard;
-    }
-    
-    /**
-     *  @private
-     */
-    override public function set moveForSoftKeyboard(value:Boolean):void
-    {
-        super.moveForSoftKeyboard = value;
-        
-        _explicitMoveForSoftKeyboard = true;
-    }
-    
-    //----------------------------------
-    //  calloutMaxWidth
-    //----------------------------------
-    
-    private var _calloutMaxWidth:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    mx_internal function get calloutMaxWidth():Number
-    {
-        return _calloutMaxWidth;
-    }
-    
-    /**
-     *  @private
-     */
-    mx_internal function set calloutMaxWidth(value:Number):void
-    {
-        if (_calloutMaxWidth == value)
-            return;
-        
-        _calloutMaxWidth = value;
-        
-        invalidateMaxSize();
-    }
-
-    
-    //----------------------------------
-    //  calloutMaxHeight
-    //----------------------------------
-    
-    private var _calloutMaxHeight:Number = NaN;
-    
-    /**
-     *  @private
-     */
-    mx_internal function get calloutMaxHeight():Number
-    {
-        return _calloutMaxHeight;
-    }
-    
-    /**
-     *  @private
-     */
-    mx_internal function set calloutMaxHeight(value:Number):void
-    {
-        if (_calloutMaxHeight == value)
-            return;
-        
-        _calloutMaxHeight = value;
-        
-        invalidateMaxSize();
-    }
-
-
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    override public function get explicitMaxWidth():Number
-    {
-        if (!isNaN(super.explicitMaxWidth))
-            return super.explicitMaxWidth;
-        
-        return calloutMaxWidth;
-    }
-    
-    /**
-     *  @private
-     */
-    override public function get explicitMaxHeight():Number
-    {
-        if (!isNaN(super.explicitMaxHeight))
-            return super.explicitMaxHeight;
-        
-        return calloutMaxHeight;
-    }
-
-    /**
-     *  @private
-     */
-    override protected function commitProperties():void
-    {
-        super.commitProperties();
-        
-        // Do not commit position changes if closed (no owner) or owner was 
-        // removed from the display list.
-        if (!owner || !owner.parent)
-            return;
-        
-        // Compute actual positions when using AUTO
-        commitAutoPosition();
-        
-        // Compute max size based on actual positions
-        commitMaxSize();
-        
-        if (arrow)
-        {
-            // arrowDirection can be set in 2 ways: (1) horizontalPostion/verticalPosition
-            // changes and (2) flipping the axis to fit on screen. 
-            if (!arrowDirectionAdjusted)
-            {
-                // Invalidate only when the arrow direction changes
-                var direction:String = determineArrowPosition(actualHorizontalPosition,
-                    actualVerticalPosition);
-                
-                if (arrowDirection != direction)
-                {
-                    setArrowDirection(direction);
-                    
-                    if (arrow)
-                        arrow.visible = (arrowDirection != ArrowDirection.NONE);
-                }
-            }
-            
-            // Always reset the arrow position
-            invalidateDisplayList();
-        }
-    }
-
-    /**
-     *  @private
-     *  Re-position the pop-up using actualHorizontalPosition and
-     *  actualVerticalPosition. 
-     */
-    override public function updatePopUpPosition():void
-    {
-        if (!owner || !systemManager)
-            return;
-        
-        var popUpPoint:Point = calculatePopUpPosition();
-        var ownerComponent:UIComponent = owner as UIComponent;
-        var concatenatedColorTransform:ColorTransform = 
-            (ownerComponent) ? ownerComponent.$transform.concatenatedColorTransform : null;
-        
-        PopUpUtil.applyPopUpTransform(owner, concatenatedColorTransform,
-                                      systemManager, this, popUpPoint);
-    }
-
-    /**
-     *  @private
-     *
-     *  Cooperative layout
-     *  @see spark.components.supportClasses.TrackBase#partAdded
-     */
-    override protected function partAdded(partName:String, instance:Object):void
-    {
-        super.partAdded(partName, instance);
-
-        if (instance == arrow)
-            arrow.addEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
-    }
-
-    /**
-     *  @private
-     */
-    override protected function partRemoved(partName:String, instance:Object):void
-    {
-        super.partRemoved(partName, instance);
-
-        if (instance == arrow)
-            arrow.removeEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
-    }
-
-    /**
-     *  @private
-     */
-    override public function open(owner:DisplayObjectContainer, modal:Boolean=false):void
-    {
-        if (isOpen)
-            return;
-        
-        // reset state
-        invalidatePositionFlag = false;
-        arrowDirectionAdjusted = false;
-
-        // Add to PopUpManager, calls updatePopUpPosition(), and change state
-        super.open(owner, modal);
-        
-        // Reposition the callout when the screen changes
-        var systemManagerParent:SystemManager = this.parent as SystemManager;
-        
-        if (systemManagerParent)
-            systemManagerParent.addEventListener(Event.RESIZE, systemManager_resizeHandler);
-    }
-    
-    /**
-     *  @private
-     */
-    override public function close(commit:Boolean=false, data:*=null):void
-    {
-        if (!isOpen)
-            return;
-        
-        var systemManagerParent:SystemManager = this.parent as SystemManager;
-        
-        if (systemManagerParent)
-            systemManagerParent.removeEventListener(Event.RESIZE, systemManager_resizeHandler);
-        
-        super.close(commit, data);
-    }
-    
-    /**
-     *  @private
-     */
-    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
-    {
-        super.updateDisplayList(unscaledWidth, unscaledHeight);
-        
-        // Callout can be respositioned while open via SystemManager resize or
-        // explicit changes to horizontalPostion and verticalPosition.
-        if (isOpen && invalidatePositionFlag)
-        {
-            updatePopUpPosition();
-            invalidatePositionFlag = false;
-        }
-
-        // Position the arrow
-        updateSkinDisplayList();
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    private function invalidatePosition():void
-    {
-        arrowDirectionAdjusted = false;
-        
-        invalidateProperties();
-        
-        if (isOpen)
-            invalidatePositionFlag = true;
-    }
-    
-    /**
-     *  @private
-     *  Force a new measurement when callout should use it's screen-constrained
-     *  max size.
-     */
-    private function invalidateMaxSize():void
-    {
-        // calloutMaxWidth and calloutMaxHeight don't invalidate 
-        // explicitMaxWidth or explicitMaxHeight. If callout's max size changes
-        // and explicit max sizes aren't set, then invalidate size here so that
-        // callout's max size is applied.
-        if (!canSkipMeasurement() && !isMaxSizeSet)
-            skin.invalidateSize();
-    }
-
-    /**
-     *  Sets the bounds of <code>arrow</code>, whose geometry isn't fully
-     *  specified by the skin's layout.
-     *
-     *  <p>Subclasses can override this method to update the arrow's size,
-     *  position, and visibility, based on the computed
-     *  <code>arrowDirection</code>.</p>
-     *
-     *  <p>By default, this method aligns the arrow on the shorter of either
-     *  the <code>arrow</code> bounds or the <code>owner</code> bounds. This
-     *  implementation assumes that the <code>arrow</code> and the Callout skin
-     *  share the same coordinate space.</p>
-     *
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    protected function updateSkinDisplayList():void
-    {
-        var ownerVisualElement:IVisualElement = owner as IVisualElement;
-
-        // Sanity check to verify owner is still on the display list. If not,
-        // leave the arrow in the current position.
-        if (!arrow || !ownerVisualElement ||
-            (arrowDirection == ArrowDirection.NONE) ||
-            (!ownerVisualElement.parent))
-            return;
-
-        var isStartPosition:Boolean = false;
-        var isMiddlePosition:Boolean = false;
-        var isEndPosition:Boolean = false;
-
-        var position:String = (isArrowVertical) ? actualHorizontalPosition : actualVerticalPosition;
-
-        isStartPosition = (position == CalloutPosition.START);
-        isMiddlePosition = (position == CalloutPosition.MIDDLE);
-        isEndPosition = (position == CalloutPosition.END);
-
-        var isEndOfCallout:Boolean = (arrowDirection == ArrowDirection.DOWN)
-            || (arrowDirection == ArrowDirection.RIGHT);
-
-        var calloutWidth:Number = getLayoutBoundsWidth();
-        var calloutHeight:Number = getLayoutBoundsHeight();
-        var arrowWidth:Number = arrow.getLayoutBoundsWidth();
-        var arrowHeight:Number = arrow.getLayoutBoundsHeight();
-
-        // arrow X/Y in pop-up coordinates
-        var arrowX:Number = 0;
-        var arrowY:Number = 0;
-
-        // Max arrow positions
-        var maxArrowX:Number = calloutWidth - arrowWidth;
-        var maxArrowY:Number = calloutHeight - arrowHeight;
-        
-        // Find the registration point of the owner
-        var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
-        var regPoint:Point = owner.localToGlobal(new Point());
-        regPoint = sandboxRoot.globalToLocal(regPoint);
-
-        if (isArrowVertical)
-        {
-            // Vertical arrows need horizontal alignment
-            var ownerX:Number = regPoint.x;
-            var ownerVisibleWidth:Number = (ownerVisualElement)
-                ? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
-
-            // Edge cases when start/end of owner is not visible
-            if ((ownerX < 0) && (ownerVisibleWidth < screen.width))
-                ownerVisibleWidth = Math.max(ownerVisibleWidth + ownerX, 0);
-            else if ((ownerX >= 0) && ((ownerX + ownerVisibleWidth) >= screen.width))
-                ownerVisibleWidth = Math.max(screen.width - ownerX, 0);
-
-            ownerVisibleWidth = Math.min(ownerVisibleWidth, screen.width);
-
-            if (calloutWidth <= ownerVisibleWidth)
-            {
-                arrowX = (calloutWidth - arrowWidth) / 2;
-            }
-            else // if (calloutWidth > ownerWidth)
-            {
-                // Center the arrow on the owner
-                arrowX = (ownerVisibleWidth - arrowWidth) / 2;
-                
-                // Add owner offset
-                if (ownerX > 0)
-                    arrowX += Math.abs(ownerX - getLayoutBoundsX());
-                
-                if (ownerX < margin)
-                    arrowX -= (margin - ownerX);
-            }
-            
-            // arrow should not extend past the callout bounds
-            arrowX = Math.max(Math.min(maxArrowX, arrowX), 0);
-
-            // Move the arrow to the bottom of the callout
-            if (isEndOfCallout)
-                arrowY = calloutHeight - arrowHeight;
-        }
-        else
-        {
-            // Horizontal arrows need vertical alignment
-            var ownerY:Number = regPoint.y;
-            var ownerVisibleHeight:Number = (ownerVisualElement)
-                ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
-
-            // Edge cases when start/end of owner is not visible
-            if ((ownerY < 0) && (ownerVisibleHeight < screen.height))
-                ownerVisibleHeight = Math.max(ownerVisibleHeight + ownerY, 0);
-            else if ((ownerY >= 0) && ((ownerY + ownerVisibleHeight) >= screen.height))
-                ownerVisibleHeight = Math.max(screen.height - ownerY, 0);
-
-            ownerVisibleHeight = Math.min(ownerVisibleHeight, screen.height);
-
-            if (calloutHeight <= ownerVisibleHeight)
-            {
-                arrowY = (calloutHeight - arrowHeight) / 2;
-            }
-            else // if (calloutHeight > ownerHeight)
-            {
-                // Center the arrow on the owner
-                arrowY = (ownerVisibleHeight - arrowHeight) / 2;
-                
-                // Add owner offset
-                if (ownerY > 0)
-                    arrowY += Math.abs(ownerY - getLayoutBoundsY());
-                
-                if (ownerY < margin)
-                    ownerY -= (margin - ownerY);
-            }
-            
-            // arrow should not extend past the callout bounds
-            arrowY = Math.max(Math.min(maxArrowY, arrowY), 0);
-
-            // Move the arrow to the end of the callout
-            if (isEndOfCallout)
-                arrowX = calloutWidth - arrowWidth;
-        }
-
-        arrow.setLayoutBoundsPosition(Math.floor(arrowX), Math.floor(arrowY));
-        arrow.invalidateDisplayList();
-    }
-    
-    /**
-     *  @private
-     * 
-     *  Flip or clear the adjusted position when the callout bounds are outside
-     *  the screen bounds.
-     */
-    mx_internal function adjustCalloutPosition(actualPosition:String, preferredPosition:String,
-                                               calloutStart:Number, calloutEnd:Number,
-                                               screenStart:Number, screenEnd:Number,
-                                               ownerStart:Number, ownerEnd:Number,
-                                               revert:Boolean=false):String
-    {
-        if (!actualPosition)
-            return null;
-        
-        var adjustedPosition:String = null;
-        var calloutSize:Number = calloutEnd - calloutStart;
-        
-        // Exterior space
-        var exteriorSpaceStart:Number = Math.max(0, ownerStart - screenStart);
-        var exteriorSpaceEnd:Number = Math.max(0, ownerEnd - screenEnd);
-        
-        // Fallback to interior positions if using AUTO and callout can not
-        // fit in either exterior positions
-        var useInterior:Boolean = (preferredPosition == CalloutPosition.AUTO) &&
-            (exteriorSpaceStart < calloutSize) &&
-            (exteriorSpaceEnd < calloutSize);
-        var isExterior:Boolean = false;
-        
-        // Flip to opposite position
-        switch (actualPosition)
-        {
-            case CalloutPosition.BEFORE:
-            {
-                isExterior = true;
-                
-                if (calloutStart < screenStart)
-                    adjustedPosition = CalloutPosition.AFTER;
-                
-                break;
-            }
-            case CalloutPosition.AFTER:
-            {
-                isExterior = true;
-                
-                if (calloutEnd > screenEnd)
-                    adjustedPosition = CalloutPosition.BEFORE;
-                
-                break;
-            }
-            case CalloutPosition.END:
-            {
-                if (calloutStart < screenStart)
-                    adjustedPosition = CalloutPosition.START;
-                break;
-            }
-            case CalloutPosition.START:
-            {
-                if (calloutEnd > screenEnd)
-                    adjustedPosition = CalloutPosition.END;
-                break;
-            }
-            // case CalloutPosition.MIDDLE:
-            // Nudge instead of flipping
-        }
-        
-        // Use interior position if exterior flipping was necessary
-        if (useInterior && adjustedPosition && isExterior)
-        {
-            // Choose the exterior position with the most available space.
-            // Note that START grows towards the exterior END and vice versa.
-            adjustedPosition = (exteriorSpaceEnd >= exteriorSpaceStart) ? 
-                CalloutPosition.START : CalloutPosition.END;
-        }
-        
-        // Return null to revert the adjusted position
-        // Otherwise, return the incoming position
-        if (revert)
-            return (adjustedPosition) ? null : actualPosition;
-        
-        // Adjusted position or null if the callout already fits
-        return adjustedPosition;
-    }
-    
-    /**
-     *  @private
-     * 
-     *  Nudge the callout position to fit on screen. Prefer top/left positions
-     *  and allow overflow to get clipped on the bottom/right.
-     */
-    mx_internal function nudgeToFit(calloutStart:Number, calloutEnd:Number,
-                                    screenStart:Number, screenEnd:Number,
-                                    scaleFactor:Number):Number
-    {
-        var position:Number = 0;
-        
-        if (calloutStart < screenStart)
-            position += (screenStart - calloutStart) / scaleFactor;
-        else if (calloutEnd > screenEnd)
-            position -= (calloutEnd - screenEnd) / scaleFactor;
-        
-        return position;
-    }
-
-    /**
-     *  @private
-     *
-     *  Basically the same as PopUpAnchor, but with more position options
-     *  including exterior, interior and corner positions.
-     * 
-     *  Nudging to fit the screen accounts for <code>margin</code> so that
-     *  the Callout is not positioned in the margin.
-     * 
-     *  <code>arrowDirection</code> will change if required for the callout
-     *  to fit.
-     *
-     *  @see #margin
-     */
-    mx_internal function calculatePopUpPosition():Point
-    {
-        // This implementation doesn't handle rotation
-        var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
-        var matrix:Matrix = MatrixUtil.getConcatenatedMatrix(owner, sandboxRoot);
-
-        var regPoint:Point = new Point();
-
-        if (!matrix)
-            return regPoint;
-        
-        var adjustedHorizontalPosition:String;
-        var adjustedVerticalPosition:String;
-        var calloutBounds:Rectangle = determinePosition(actualHorizontalPosition,
-            actualVerticalPosition, matrix, regPoint);
-        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-
-        // Position the callout in the opposite direction if it
-        // does not fit on the screen.
-        if (screen)
-        {
-            adjustedHorizontalPosition = adjustCalloutPosition(
-                actualHorizontalPosition, horizontalPosition,
-                calloutBounds.left, calloutBounds.right,
-                screen.left, screen.right,
-                ownerBounds.left, ownerBounds.right);
-
-            adjustedVerticalPosition = adjustCalloutPosition(
-                actualVerticalPosition, verticalPosition,
-                calloutBounds.top, calloutBounds.bottom,
-                screen.top, screen.bottom,
-                ownerBounds.top, ownerBounds.bottom);
-        }
-
-        var oldArrowDirection:String = arrowDirection;
-        var actualArrowDirection:String = null;
-        
-        // Reset arrowDirectionAdjusted
-        arrowDirectionAdjusted = false;
-
-        // Get the new registration point based on the adjusted position
-        if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
-        {
-            var adjustedRegPoint:Point = new Point();
-            var tempHorizontalPosition:String = (adjustedHorizontalPosition)
-                ? adjustedHorizontalPosition : actualHorizontalPosition;
-            var tempVerticalPosition:String = (adjustedVerticalPosition)
-                ? adjustedVerticalPosition : actualVerticalPosition;
-
-            // Adjust arrow direction after adjusting position
-            actualArrowDirection = determineArrowPosition(tempHorizontalPosition,
-                tempVerticalPosition);
-
-            // All position flips gaurantee an arrowDirection change
-            setArrowDirection(actualArrowDirection);
-            arrowDirectionAdjusted = true;
-
-            if (arrow)
-                arrow.visible = (arrowDirection != ArrowDirection.NONE);
-
-            // Reposition the arrow
-            updateSkinDisplayList();
-
-            var adjustedBounds:Rectangle = determinePosition(tempHorizontalPosition,
-                tempVerticalPosition, matrix, adjustedRegPoint);
-
-            if (screen)
-            {
-                // If we adjusted the position but the callout still doesn't fit,
-                // then revert to the original position.
-                adjustedHorizontalPosition = adjustCalloutPosition(
-                    adjustedHorizontalPosition, horizontalPosition,
-                    adjustedBounds.left, adjustedBounds.right,
-                    screen.left, screen.right,
-                    ownerBounds.left, ownerBounds.right,
-                    true);
-                
-                adjustedVerticalPosition = adjustCalloutPosition(
-                    adjustedVerticalPosition, verticalPosition,
-                    adjustedBounds.top, adjustedBounds.bottom,
-                    screen.top, screen.bottom, 
-                    ownerBounds.top, ownerBounds.bottom,
-                    true);
-            }
-
-            if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
-            {
-                regPoint = adjustedRegPoint;
-                calloutBounds = adjustedBounds;
-
-                // Temporarily set actual positions to reposition the arrow
-                if (adjustedHorizontalPosition)
-                    actualHorizontalPosition = adjustedHorizontalPosition;
-
-                if (adjustedVerticalPosition)
-                    actualVerticalPosition = adjustedVerticalPosition;
-
-                // Reposition the arrow with the new actual position
-                updateSkinDisplayList();
-            }
-            else
-            {
-                // Restore previous arrow direction *before* reversing the
-                // adjusted positions
-                setArrowDirection(oldArrowDirection);
-                arrowDirectionAdjusted = false;
-
-                // Reposition the arrow to the original position
-                updateSkinDisplayList();
-            }
-        }
-
-        MatrixUtil.decomposeMatrix(decomposition, matrix, 0, 0);
-        var concatScaleX:Number = decomposition[3];
-        var concatScaleY:Number = decomposition[4];
-
-        // If the callout still doesn't fit, then nudge it
-        // so it is completely on the screen. Make sure to include scale.
-        var screenTop:Number = screen.top;
-        var screenBottom:Number = screen.bottom;
-        var screenLeft:Number = screen.left;
-        var screenRight:Number = screen.right;
-        
-        // Allow zero margin on the the side with the arrow
-        switch (arrowDirection)
-        {
-            case ArrowDirection.UP:
-            {
-                screenBottom -= margin;
-                screenLeft += margin;
-                screenRight -= margin
-                break;
-            }
-            case ArrowDirection.DOWN:
-            {
-                screenTop += margin;
-                screenLeft += margin;
-                screenRight -= margin
-                break;
-            }
-            case ArrowDirection.LEFT:
-            {
-                screenTop += margin;
-                screenBottom -= margin;
-                screenRight -= margin
-                break;
-            }
-            case ArrowDirection.RIGHT:
-            {
-                screenTop += margin;
-                screenBottom -= margin;
-                screenLeft += margin;
-                break;
-            }
-            default:
-            {
-                screenTop += margin;
-                screenBottom -= margin;
-                screenLeft += margin;
-                screenRight -= margin
-                break;
-            }
-        }
-        
-        regPoint.y += nudgeToFit(calloutBounds.top, calloutBounds.bottom,
-            screenTop, screenBottom, concatScaleY);
-        
-        regPoint.x += nudgeToFit(calloutBounds.left, calloutBounds.right,
-            screenLeft, screenRight, concatScaleX);
-
-        // Compute the stage coordinates of the upper,left corner of the PopUp, taking
-        // the postTransformOffsets - which include mirroring - into account.
-        // If we're mirroring, then the implicit assumption that x=left will fail,
-        // so we compensate here.
-
-        if (layoutDirection == LayoutDirection.RTL)
-            regPoint.x += calloutBounds.width;
-        return MatrixUtil.getConcatenatedComputedMatrix(owner, sandboxRoot).transformPoint(regPoint);
-    }
-
-    /**
-     *  @private
-     *  Computes <code>actualHorizontalPosition</code> and/or
-     *  <code>actualVerticalPosition</code> values when using
-     *  <code>CalloutPosition.AUTO</code>. When implementing subclasses of
-     *  Callout, use <code>actualHorizontalPosition</code> and
-     *  <code>actualVerticalPosition</code> to compute
-     *  <code>arrowDirection</code> and positioning in
-     *  <code>updatePopUpPosition()</code> and <code>updateSkinDisplayList()</code>.
-     *
-     *  <p>The default implementation chooses "outer" positions for the callout
-     *  such that the owner is not obscured. Horizontal/Vertical orientation
-     *  relative to the owner choosen based on the aspect ratio.</p>
-     *
-     *  <p>When the aspect ratio is landscape, and the callout can fit to the
-     *  left or right of the owner, <code>actualHorizontalPosition</code> is
-     *  set to <code>CalloutPosition.BEFORE</code> or
-     *  <code>CalloutPosition.AFTER</code> as appropriate.
-     *  <code>actualVerticalPosition</code> is set to
-     *  <code>CalloutPosition.MIDDLE</code> to have the vertical center of the
-     *  callout align to the vertical center of the owner.</p>
-     *
-     *  <p>When the aspect ratio is portrait, and the callout can fit
-     *  above or below the owner, <code>actualVerticalPosition</code> is
-     *  set to <code>CalloutPosition.BEFORE</code> or
-     *  <code>CalloutPosition.AFTER</code> as appropriate.
-     *  <code>actualHorizontalPosition</code> is set to
-     *  <code>CalloutPosition.MIDDLE</code> to have the horizontal center of the
-     *  callout align to the horizontal center of the owner.</p>
-     *
-     *  <p>Subclasses may override to modify automatic positioning behavior.</p>
-     */
-    mx_internal function commitAutoPosition():void
-    {
-        if (!screen || ((horizontalPosition != CalloutPosition.AUTO) &&
-            (verticalPosition != CalloutPosition.AUTO)))
-        {
-            // Use explicit positions instead of AUTO
-            actualHorizontalPosition = null;
-            actualVerticalPosition = null;
-            
-            return;
-        }
-
-        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-
-        // Use aspect ratio to determine vertical/horizontal preference
-        var isLandscape:Boolean = (screen.width > screen.height);
-
-        // Exterior space
-        var exteriorSpaceLeft:Number = Math.max(0, ownerBounds.left);
-        var exteriorSpaceRight:Number = Math.max(0, screen.width - ownerBounds.right);
-        var exteriorSpaceTop:Number = Math.max(0, ownerBounds.top);
-        var exteriorSpaceBottom:Number = Math.max(0, screen.height - ownerBounds.bottom);
-
-        if (verticalPosition != CalloutPosition.AUTO)
-        {
-            // Horizontal auto only
-            switch (verticalPosition)
-            {
-                case CalloutPosition.START:
-                case CalloutPosition.MIDDLE:
-                case CalloutPosition.END:
-                {
-                    actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
-                    break;
-                }
-                default:
-                {
-                    actualHorizontalPosition = CalloutPosition.MIDDLE;
-                    break;
-                }
-            }
-            
-            actualVerticalPosition = null;
-        }
-        else if (horizontalPosition != CalloutPosition.AUTO)
-        {
-            // Vertical auto only
-            switch (horizontalPosition)
-            {
-                case CalloutPosition.START:
-                case CalloutPosition.MIDDLE:
-                case CalloutPosition.END:
-                {
-                    actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
-                    break;
-                }
-                default:
-                {
-                    actualVerticalPosition = CalloutPosition.MIDDLE;
-                    break;
-                }
-            }
-            
-            actualHorizontalPosition = null;
-        }
-        else // if ((verticalPosition == CalloutPosition.AUTO) && (horizontalPosition == CalloutPosition.AUTO))
-        {
-            if (!isLandscape)
-            {
-                // Arrow will be vertical when in portrait
-                actualHorizontalPosition = CalloutPosition.MIDDLE;
-                actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
-            }
-            else
-            {
-                // Arrow will be horizontal when in landscape
-                actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
-                actualVerticalPosition = CalloutPosition.MIDDLE;
-            }
-        }
-    }
-    
-    /**
-     *  @private
-     *  Return true if user-specified max size if set
-     */
-    mx_internal function get isMaxSizeSet():Boolean
-    {
-        var explicitMaxW:Number = super.explicitMaxWidth;
-        var explicitMaxH:Number = super.explicitMaxHeight;
-        
-        return (!isNaN(explicitMaxW) && !isNaN(explicitMaxH));
-    }
-    
-    /**
-     *  @private
-     *  Return the original height if the soft keyboard is active. This height
-     *  is used to stabilize AUTO positioning so that the position is based
-     *  on the original height of the Callout instead of a possibly shorter
-     *  height due to soft keyboard effects.
-     */
-    mx_internal function get calloutHeight():Number
-    {
-        return (isSoftKeyboardEffectActive) ? softKeyboardEffectCachedHeight : getLayoutBoundsHeight();
-    }
-    
-    /**
-     *  @private
-     *  Compute max width and max height. Uses the the owner and screen bounds 
-     *  as well as preferred positions to determine max width and max height  
-     *  for all possible exterior and interior positions.
-     */
-    mx_internal function commitMaxSize():void
-    {
-        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-        var ownerLeft:Number = ownerBounds.left;
-        var ownerRight:Number = ownerBounds.right;
-        var ownerTop:Number = ownerBounds.top;
-        var ownerBottom:Number = ownerBounds.bottom;
-        var maxW:Number;
-        var maxH:Number;
-        
-        switch (actualHorizontalPosition)
-        {
-            case CalloutPosition.MIDDLE:
-            {
-                // Callout matches screen width
-                maxW = screen.width - (margin * 2);
-                break;
-            }
-            case CalloutPosition.START:
-            case CalloutPosition.END:
-            {
-                // Flip left and right when using inner positions
-                ownerLeft = ownerBounds.right;
-                ownerRight = ownerBounds.left;
-                
-                // Fall through
-            }
-            default:
-            {
-                // Maximum is the larger of the actual position or flipped position
-                maxW = Math.max(ownerLeft, screen.right - ownerRight) - margin;
-                break;
-            }
-        }
-        
-        // If preferred position was AUTO, then allow maxWidth to grow to
-        // fit the interior position if the owner is wide
-        if ((horizontalPosition == CalloutPosition.AUTO) &&
-            (ownerBounds.width > maxW))
-            maxW += ownerBounds.width;
-        
-        switch (actualVerticalPosition)
-        {
-            case CalloutPosition.MIDDLE:
-            {
-                // Callout matches screen height
-                maxH = screen.height - (margin * 2);
-                break;
-            }
-            case CalloutPosition.START:
-            case CalloutPosition.END:
-            {
-                // Flip top and bottom when using inner positions
-                ownerTop = ownerBounds.bottom;
-                ownerBottom = ownerBounds.top;
-                
-                // Fall through
-            }
-            default:
-            {
-                // Maximum is the larger of the actual position or flipped position
-                maxH = Math.max(ownerTop, screen.bottom - ownerBottom) - margin;
-                break;
-            }
-        }
-        
-        // If preferred position was AUTO, then allow maxHeight to grow to
-        // fit the interior position if the owner is tall
-        if ((verticalPosition == CalloutPosition.AUTO) && 
-            (ownerBounds.height > maxH))
-            maxH += ownerBounds.height;
-        
-        calloutMaxWidth = maxW;
-        calloutMaxHeight = maxH;
-    }
-
-    /**
-     *  @private
-     */
-    mx_internal function determineArrowPosition(horizontalPos:String, verticalPos:String):String
-    {
-        // Determine arrow direction, outer positions get priority.
-        // Corner positions and center show no arrow
-        var direction:String = ArrowDirection.NONE;
-
-        if (horizontalPos == CalloutPosition.BEFORE)
-        {
-            if ((verticalPos != CalloutPosition.BEFORE)
-                &&  (verticalPos != CalloutPosition.AFTER))
-            {
-                direction = ArrowDirection.RIGHT;
-            }
-        }
-        else if (horizontalPos == CalloutPosition.AFTER)
-        {
-            if ((verticalPos != CalloutPosition.BEFORE)
-                && (verticalPos != CalloutPosition.AFTER))
-            {
-                direction = ArrowDirection.LEFT;
-            }
-        }
-        else if (verticalPos == CalloutPosition.BEFORE)
-        {
-            direction = ArrowDirection.DOWN;
-        }
-        else if (verticalPos == CalloutPosition.AFTER)
-        {
-            direction = ArrowDirection.UP;
-        }
-        else if (horizontalPos == CalloutPosition.START)
-        {
-            direction = ArrowDirection.LEFT;
-        }
-        else if (horizontalPos == CalloutPosition.END)
-        {
-            direction = ArrowDirection.RIGHT;
-        }
-        else if (verticalPos == CalloutPosition.START)
-        {
-            direction = ArrowDirection.UP;
-        }
-        else if (verticalPos == CalloutPosition.END)
-        {
-            direction = ArrowDirection.DOWN;
-        }
-
-        return direction
-    }
-
-    /**
-     *  @private
-     * 
-     *  Uses horizontalPosition and verticalPosition to determine the bounds of
-     *  the callout.
-     */
-    mx_internal function determinePosition(horizontalPos:String, verticalPos:String,
-                                           matrix:Matrix, registrationPoint:Point):Rectangle
-    {
-        var ownerVisualElement:ILayoutElement = owner as ILayoutElement;
-        var ownerWidth:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
-        var ownerHeight:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
-        var calloutWidth:Number = getLayoutBoundsWidth();
-        var calloutHeight:Number = this.calloutHeight;
-
-        switch (horizontalPos)
-        {
-            case CalloutPosition.BEFORE:
-            {
-                // The full width of the callout is before the owner
-                // All arrow directions are ArrowDirection.RIGHT x=(width - arrow.width)
-                registrationPoint.x = -calloutWidth;
-                break;
-            }
-            case CalloutPosition.START:
-            {
-                // ArrowDirection.LEFT is at x=0
-                registrationPoint.x = 0;
-                break;
-            }
-            case CalloutPosition.END:
-            {
-                // The ends of the owner and callout are aligned
-                registrationPoint.x = (ownerWidth - calloutWidth);
-                break;
-            }
-            case CalloutPosition.AFTER:
-            {
-                // The full width of the callout is after the owner
-                // All arrow directions are ArrowDirection.LEFT (x=0)
-                registrationPoint.x = ownerWidth;
-                break;
-            }
-            default: // case CalloutPosition.MIDDLE:
-            {
-                registrationPoint.x = Math.floor((ownerWidth - calloutWidth) / 2);
-                break;
-            }
-        }
-
-        switch (verticalPos)
-        {
-            case CalloutPosition.BEFORE:
-            {
-                // The full height of the callout is before the owner
-                // All arrow directions are ArrowDirection.DOWN y=(height - arrow.height)
-                registrationPoint.y = -calloutHeight;
-                break;
-            }
-            case CalloutPosition.START:
-            {
-                // ArrowDirection.UP is at y=0
-                registrationPoint.y = 0;
-                break;
-            }
-            case CalloutPosition.MIDDLE:
-            {
-                registrationPoint.y = Math.floor((ownerHeight - calloutHeight) / 2);
-                break;
-            }
-            case CalloutPosition.END:
-            {
-                // The ends of the owner and callout are aligned
-                registrationPoint.y = (ownerHeight - calloutHeight);
-                break;
-            }
-            default: //case CalloutPosition.AFTER:
-            {
-                // The full height of the callout is after the owner
-                // All arrow directions are ArrowDirection.UP (y=0)
-                registrationPoint.y = ownerHeight;
-                break;
-            }
-        }
-
-        var topLeft:Point = registrationPoint.clone();
-        var size:Point = MatrixUtil.transformBounds(calloutWidth, calloutHeight, matrix, topLeft);
-        var bounds:Rectangle = new Rectangle();
-        
-        bounds.left = topLeft.x;
-        bounds.top = topLeft.y;
-        bounds.width = size.x;
-        bounds.height = size.y;
-        
-        return bounds;
-    }
-    
-    /**
-     * @private
-     */
-    mx_internal function get isArrowVertical():Boolean
-    {
-        return (arrowDirection == ArrowDirection.UP ||
-                arrowDirection == ArrowDirection.DOWN);
-    }
-
-    //--------------------------------------------------------------------------
-    //
-    //  Event handlers
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  @private
-     */
-    private function arrow_resizeHandler(event:Event):void
-    {
-        updateSkinDisplayList();
-    }
-    
-    /**
-     *  @private
-     */
-    private function systemManager_resizeHandler(event:Event):void
-    {
-        // Remove explicit settings if due to Resize effect
-        softKeyboardEffectResetExplicitSize();
-        
-        // Screen resize might require a new arrow direction and callout position
-        invalidatePosition();
-        
-        if (!isSoftKeyboardEffectActive)
-        {
-            // Force validation and use new screen size only if the keyboard
-            // effect is not active. The stage dimensions may be invalid while 
-            // the soft keyboard is active. See SDK-31860.
-            validateNow();
-        }
-    }
-}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/Callout.png
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/Callout.png b/frameworks/projects/mobilecomponents/src/spark/components/Callout.png
deleted file mode 100644
index 36bc882..0000000
Binary files a/frameworks/projects/mobilecomponents/src/spark/components/Callout.png and /dev/null differ


[04/25] temp commit move experimental callout to spark

Posted by jm...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as b/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as
deleted file mode 100644
index 7eec462..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as
+++ /dev/null
@@ -1,807 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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 mx.core.ClassFactory;
-import mx.core.IFactory;
-import mx.core.mx_internal;
-import mx.utils.BitFlagUtil;
-
-import spark.components.supportClasses.DropDownController;
-import spark.core.ContainerDestructionPolicy;
-import spark.events.DropDownEvent;
-import spark.events.PopUpEvent;
-import spark.layouts.supportClasses.LayoutBase;
-
-use namespace mx_internal;
-
-//--------------------------------------
-//  Styles
-//--------------------------------------
-
-[Exclude(name="repeatDelay", kind="style")]
-[Exclude(name="repeatInterval", kind="style")]
-
-//--------------------------------------
-//  Events
-//--------------------------------------
-
-/**
- *  Dispatched when the callout closes for any reason, such when: 
- *  <ul>
- *      <li>The callout is programmatically closed.</li>
- *      <li>The user clicks outside of the callout.</li>
- *      <li>The user clicks the open button while the callout is 
- *  displayed.</li>
- *  </ul>
- *
- *  @eventType spark.events.DropDownEvent.CLOSE
- *  
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-[Event(name="close", type="spark.events.DropDownEvent")]
-
-/**
- *  Dispatched when the user clicks the open button
- *  to display the callout.  
- *
- *  @eventType spark.events.DropDownEvent.OPEN
- *  
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-[Event(name="open", type="spark.events.DropDownEvent")]
-
-//--------------------------------------
-//  Other metadata
-//--------------------------------------
-
-[IconFile("Callout.png")]
-
-[DefaultProperty("calloutContent")]
-
-/**
- *  The CalloutButton control is a drop down component that defines a button to
- *  open and close a Callout container. 
- *  The CalloutButton specifies the layout and child components 
- *  of the Callout container.
- *
- *  <p>The following image shows a Callout container under the CalloutButton 
- *  labeled 'Open callout':</p>
- *
- * <p>
- *  <img src="../../images/ca_calloutButton_ca.png" alt="Callout button" />
- * </p>
- *
- *  <p>The CalloutButton control uses the spark.components.supportClasses.DropDownController
- *  class to manage the Callout container. 
- *  You can access the DropDownController by using the protected 
- *  <code>CalloutButton.dropDownController</code> property.</p>
- *
- *  <p>When the callout is open:</p>
- *  <ul>
- *    <li>Clicking the button closes the callout</li>
- *    <li>Clicking outside of the callout closes the callout.</li>
- *  </ul>
- *
- *  <p>The CalloutButton component 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 display the text label of the control</td>
- *        </tr>
- *        <tr>
- *           <td>Minimum size</td>
- *           <td>32 pixels wide and 43 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.mobile.CalloutButtonSkin</td>
- *        </tr>
- *     </table>
- *
- *  @mxml
- *  
- *  <p>The <code>&lt;s:CalloutButton&gt;</code> tag inherits all of the tag 
- *  attributes of its superclass and adds the following tag attributes:</p>
- *  
- *  <pre>
- *  &lt;s:CalloutButton
- *   <strong>Properties</strong>
- *    calloutDestructionPolicy="auto"
- *    calloutLayout="BasicLayout"
- *    horizontalPosition="auto"
- *    verticalPosition="auto
- * 
- *   <strong>Events</strong>
- *    open="<i>No default</i>"
- *    close="<i>No default</i>"
- *      ...
- *      <i>child tags</i>
- *      ...
- *  &lt;/s:CalloutButton&gt;
- *  </pre>
- * 
- *  @see spark.components.Callout
- *  @see spark.components.Button
- *  @see spark.components.supportClasses.DropDownController
- *
- *  @includeExample examples/CalloutButtonExample.mxml -noswf
- *  
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-public class CalloutButton extends Button
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    mx_internal static const CALLOUT_CONTENT_PROPERTY_FLAG:uint = 1 << 0;
-    
-    /**
-     *  @private
-     */
-    mx_internal static const CALLOUT_LAYOUT_PROPERTY_FLAG:uint = 1 << 1;
-    
-    /**
-     *  @private
-     */
-    mx_internal static const HORIZONTAL_POSITION_PROPERTY_FLAG:uint = 1 << 2;
-    
-    /**
-     *  @private
-     */
-    mx_internal static const VERTICAL_POSITION_PROPERTY_FLAG:uint = 1 << 3;
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Constructor
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Constructor.
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function CalloutButton()
-    {
-        super();
-        
-        dropDownController = new DropDownController();
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Skin parts
-    //
-    //--------------------------------------------------------------------------
-    
-    [SkinPart(required="false")]
-    
-    /**
-     *  A skin part that defines the drop-down factory which creates the Callout
-     *  instance.
-     * 
-     *  If <code>dropDown</code> is not defined on the skin, a  
-     *  <code>ClassFactory</code> is created to generate a default Callout
-     *  instance.
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public var dropDown:IFactory;
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Variables
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  Several properties are proxied to callout.  However, when callout
-     *  is not around, we need to store values set on CalloutButton.  This object 
-     *  stores those values.  If callout is around, the values are stored 
-     *  on the callout directly.  However, we need to know what values 
-     *  have been set by the developer on the CalloutButton (versus set on 
-     *  the callout or defaults of the callout) as those are values 
-     *  we want to carry around if the callout changes (via a new skin). 
-     *  In order to store this info effeciently, calloutProperties becomes 
-     *  a uint to store a series of BitFlags.  These bits represent whether a 
-     *  property has been explicitely set on this CalloutButton.  When the 
-     *  callout is not around, calloutProperties is a typeless 
-     *  object to store these proxied properties.  When callout is around,
-     *  calloutProperties stores booleans as to whether these properties 
-     *  have been explicitely set or not.
-     */
-    mx_internal var calloutProperties:Object = {};
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties proxied to callout
-    //
-    //--------------------------------------------------------------------------
-    
-    //----------------------------------
-    //  calloutContent
-    //---------------------------------- 
-    
-    [ArrayElementType("mx.core.IVisualElement")]
-    
-    /**
-     *  The set of components to include in the Callout's content.
-     *
-     *  @default null
-     *
-     *  @see spark.components.Callout
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get calloutContent():Array
-    {
-        if (callout && callout.contentGroup)
-            return callout.contentGroup.getMXMLContent();
-        else
-            return calloutProperties.calloutContent;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set calloutContent(value:Array):void
-    {
-        if (callout)
-        {
-            callout.mxmlContent = value;
-            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-                CALLOUT_CONTENT_PROPERTY_FLAG, value != null);
-        }
-        else
-            calloutProperties.calloutContent = value;
-    }
-    
-    //----------------------------------
-    //  calloutLayout
-    //---------------------------------- 
-    
-    /**
-     *  Defines the layout of the Callout container.
-     *
-     *  @default BasicLayout
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get calloutLayout():LayoutBase
-    {
-        return (callout)  ? callout.layout : calloutProperties.calloutLayout;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set calloutLayout(value:LayoutBase):void
-    {
-        if (callout)
-        {
-            callout.layout = value;
-            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-                CALLOUT_LAYOUT_PROPERTY_FLAG, true);
-        }
-        else
-            calloutProperties.calloutLayout = value;
-    }
-    
-    //----------------------------------
-    //  horizontalPosition
-    //----------------------------------
-    
-    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-    
-    /**
-     *  @copy spark.components.Callout#horizontalPosition
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get horizontalPosition():String
-    {
-        if (callout)
-            return callout.horizontalPosition;
-        
-        return calloutProperties.horizontalPosition;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set horizontalPosition(value:String):void
-    {
-        if (callout)
-        {
-            callout.horizontalPosition = value;
-            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-                HORIZONTAL_POSITION_PROPERTY_FLAG, value != null);
-        }
-        else
-            calloutProperties.horizontalPosition = value;
-    }
-    
-    //----------------------------------
-    //  verticalPosition
-    //----------------------------------
-    
-    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-    
-    /**
-     *  @copy spark.components.Callout#verticalPosition
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get verticalPosition():String
-    {
-        if (callout)
-            return callout.verticalPosition;
-        
-        return calloutProperties.verticalPosition;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set verticalPosition(value:String):void
-    {
-        if (callout)
-        {
-            callout.verticalPosition = value;
-            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-                VERTICAL_POSITION_PROPERTY_FLAG, value != null);
-        }
-        else
-            calloutProperties.verticalPosition = value;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Properties
-    //
-    //--------------------------------------------------------------------------
-    
-    //----------------------------------
-    //  callout
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    private var _callout:Callout;
-    
-    [Bindable("calloutChanged")]
-    
-    /**
-     *  The Callout instance created after the <code>DropDownEvent.OPEN</code>
-     *  is fired. The instance is created using the <code>dropDown</code>
-     *  <code>IFactory</code> skin part.
-     * 
-     *  @see #calloutDestructionPolicy
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get callout():Callout
-    {
-        return _callout;
-    }
-    
-    /**
-     *  @private
-     */
-    mx_internal function setCallout(value:Callout):void
-    {
-        if (_callout == value)
-            return;
-        
-        _callout = value;
-        
-        if (hasEventListener("calloutChanged"))
-            dispatchEvent(new Event("calloutChanged"));
-    }
-    
-    //----------------------------------
-    //  dropDownController
-    //----------------------------------
-    
-    /**
-     *  @private
-     */
-    private var _dropDownController:DropDownController; 
-    
-    /**
-     *  Instance of the DropDownController class that handles all of the mouse, keyboard 
-     *  and focus user interactions. 
-     * 
-     *  Flex calls the <code>initializeDropDownController()</code> method after 
-     *  the DropDownController instance is created in the constructor.
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    protected function get dropDownController():DropDownController
-    {
-        return _dropDownController;
-    }
-    
-    /**
-     *  @private
-     */
-    protected function set dropDownController(value:DropDownController):void
-    {
-        if (_dropDownController == value)
-            return;
-        
-        _dropDownController = value;
-        
-        _dropDownController.closeOnResize = false;
-        _dropDownController.addEventListener(DropDownEvent.OPEN, dropDownController_openHandler);
-        _dropDownController.addEventListener(DropDownEvent.CLOSE, dropDownController_closeHandler);
-        
-        _dropDownController.openButton = this;
-        
-        if (callout)
-            _dropDownController.dropDown = callout;    
-    }
-    
-    //----------------------------------
-    //  isDropDownOpen
-    //----------------------------------
-    
-    /**
-     *  @copy spark.components.supportClasses.DropDownController#isOpen
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get isDropDownOpen():Boolean
-    {
-        if (dropDownController)
-            return dropDownController.isOpen;
-        else
-            return false;
-    }
-    
-    //----------------------------------
-    //  calloutDestructionPolicy
-    //----------------------------------
-    
-    private var _calloutDestructionPolicy:String = ContainerDestructionPolicy.AUTO;
-    
-    [Inspectable(category="General", enumeration="auto,never", defaultValue="auto")]
-    
-    /**
-     *  Defines the destruction policy the callout button uses
-     *  when the callout is closed. 
-     *  If set to <code>"auto"</code>, the button 
-     *  destroys the Callout instance when it is closed.  
-     *  If set to <code>"never"</code>, the Callout container 
-     *  is cached in memory.
-     * 
-     *  @default auto
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function get calloutDestructionPolicy():String
-    {
-        return _calloutDestructionPolicy;
-    }
-    
-    /**
-     *  @private
-     */
-    public function set calloutDestructionPolicy(value:String):void
-    {
-        if (_calloutDestructionPolicy == value)
-            return;
-        
-        _calloutDestructionPolicy = value;
-        
-        // destroy the callout immediately if currently closed
-        if (!isDropDownOpen &&
-            (calloutDestructionPolicy == ContainerDestructionPolicy.AUTO))
-        {
-            destroyCallout();
-        }
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Overridden methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     */
-    override protected function attachSkin():void
-    {
-        super.attachSkin();
-        
-        // create dropDown if it was not found in the skin
-        if (!dropDown && !("dropDown" in skin))
-            dropDown = new ClassFactory(Callout);
-    }
-    
-    /**
-     *  @private
-     */
-    override protected function partAdded(partName:String, instance:Object):void
-    {
-        super.partAdded(partName, instance);
-        
-        if (partName == "dropDown")
-        {
-            // copy proxied values from calloutProperties (if set) to callout
-            var newCalloutProperties:uint = 0;
-            var calloutInstance:Callout = instance as Callout;
-            
-            if (calloutInstance && dropDownController)
-            {
-                calloutInstance.id = "callout";
-                dropDownController.dropDown = calloutInstance;
-                
-                calloutInstance.addEventListener(PopUpEvent.OPEN, callout_openHandler);
-                calloutInstance.addEventListener(PopUpEvent.CLOSE, callout_closeHandler);
-                
-                if (calloutProperties.calloutContent !== undefined)
-                {
-                    calloutInstance.mxmlContent = calloutProperties.calloutContent;
-                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-                        CALLOUT_CONTENT_PROPERTY_FLAG, true);
-                }
-                
-                if (calloutProperties.calloutLayout !== undefined)
-                {
-                    calloutInstance.layout = calloutProperties.calloutLayout;
-                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-                        CALLOUT_LAYOUT_PROPERTY_FLAG, true);
-                }
-                
-                if (calloutProperties.horizontalPosition !== undefined)
-                {
-                    calloutInstance.horizontalPosition = calloutProperties.horizontalPosition;
-                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-                        HORIZONTAL_POSITION_PROPERTY_FLAG, true);
-                }
-                
-                if (calloutProperties.verticalPosition !== undefined)
-                {
-                    calloutInstance.verticalPosition = calloutProperties.verticalPosition;
-                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-                        VERTICAL_POSITION_PROPERTY_FLAG, true);
-                }
-                
-                calloutProperties = newCalloutProperties;
-            }
-        }
-    }
-    
-    /**
-     *  @private
-     */
-    override protected function partRemoved(partName:String, instance:Object):void
-    {
-        if (dropDownController && (instance == callout))
-        {
-            dropDownController.dropDown = null;
-        }
-        
-        if (partName == "dropDown")
-        {
-            callout.removeEventListener(PopUpEvent.OPEN, callout_openHandler);
-            callout.removeEventListener(PopUpEvent.CLOSE, callout_closeHandler);
-            
-            // copy proxied values from callout (if explicitely set) to calloutProperties
-            var newCalloutProperties:Object = {};
-            
-            if (BitFlagUtil.isSet(calloutProperties as uint, CALLOUT_CONTENT_PROPERTY_FLAG) &&
-                (callout.contentGroup))
-            {
-                newCalloutProperties.calloutContent = callout.contentGroup.getMXMLContent();
-                callout.contentGroup.mxmlContent = null;
-            }
-            
-            if (BitFlagUtil.isSet(calloutProperties as uint, CALLOUT_LAYOUT_PROPERTY_FLAG))
-            {
-                newCalloutProperties.calloutLayout = callout.layout;
-                callout.layout = null;
-            }
-            
-            if (BitFlagUtil.isSet(calloutProperties as uint, HORIZONTAL_POSITION_PROPERTY_FLAG))
-                newCalloutProperties.horizontalPosition = callout.horizontalPosition;
-            
-            if (BitFlagUtil.isSet(calloutProperties as uint, VERTICAL_POSITION_PROPERTY_FLAG))
-                newCalloutProperties.verticalPosition = callout.verticalPosition;
-            
-            calloutProperties = newCalloutProperties;
-        }
-        
-        super.partRemoved(partName, instance);
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Methods
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Initializes the dropDown and changes the skin state to open. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */ 
-    public function openDropDown():void
-    {
-        dropDownController.openDropDown();
-    }
-    
-    /**
-     *  Changes the skin state to normal.
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public function closeDropDown():void
-    {
-        dropDownController.closeDropDown(false);
-    }
-    
-    /**
-     *  @private
-     *  Destroys the callout 
-     */
-    private function destroyCallout():void
-    {
-        removeDynamicPartInstance("dropDown", callout);
-        setCallout(null);
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Event handlers
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  @private
-     *  Event handler for the <code>dropDownController</code> 
-     *  <code>DropDownEvent.OPEN</code> event. Creates and opens the Callout.
-     */
-    mx_internal function dropDownController_openHandler(event:DropDownEvent):void
-    {
-        if (!callout)
-            setCallout(createDynamicPartInstance("dropDown") as Callout);
-        
-        if (callout)
-        {
-            // close the callout if the CalloutButton is removed
-            addEventListener(Event.REMOVED_FROM_STAGE, button_removedFromStage);
-            
-            callout.open(this, false);
-        }
-    }
-    
-    /**
-     *  @private
-     *  Event handler for the <code>dropDownController</code> 
-     *  <code>DropDownEvent.CLOSE</code> event. Closes the Callout.
-     */
-    mx_internal function dropDownController_closeHandler(event:DropDownEvent):void
-    {
-        // If the callout was closed directly, then callout could already be
-        // destroyed by calloutDestructionPolicy
-        if (callout)
-        {
-            removeEventListener(Event.REMOVED_FROM_STAGE, button_removedFromStage);
-            
-            // Dispatch the close event after the callout's PopUpEvent.CLOSE fires
-            callout.close();
-        }
-    }
-    
-    /**
-     *  @private
-     */
-    private function callout_openHandler(event:PopUpEvent):void
-    {
-        dispatchEvent(new DropDownEvent(DropDownEvent.OPEN));
-    }
-    
-    /**
-     *  @private
-     */
-    private function callout_closeHandler(event:PopUpEvent):void
-    {
-        // Sanity check. Was callout closed without calling closeDropDown()? 
-        // If so, call closeDropDown directly to remove event listeners. This 
-        // callout_closeHandler will only be called once since the 2nd call
-        // to close() in dropDownController_closeHandler() will not dispatch
-        // another PopUpEvent.CLOSE.
-        if (dropDownController.isOpen)
-            closeDropDown();
-        
-        if (calloutDestructionPolicy == ContainerDestructionPolicy.AUTO)
-            destroyCallout();
-        
-        dispatchEvent(new DropDownEvent(DropDownEvent.CLOSE));
-    }
-    
-    /**
-     *  @private
-     */
-    private function button_removedFromStage(event:Event):void
-    {
-        if (!isDropDownOpen)
-            return;
-        
-        // Hide the callout immediately instead of waiting for the skin
-        // state to transition to "closed"
-        callout.visible = false;
-
-        closeDropDown();
-    }
-}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/CalloutPosition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/CalloutPosition.as b/frameworks/projects/mobilecomponents/src/spark/components/CalloutPosition.as
deleted file mode 100644
index a0b6e7d..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/components/CalloutPosition.as
+++ /dev/null
@@ -1,96 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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
-{
-
-/**
- *  The CalloutPosition calss defines the enumeration of 
- *  horizontal and vertical positions of the Callout component
- *  relative to the owner.
- * 
- *  @see spark.components.Callout
- *  @see spark.components.Callout#horizontalPosition
- *  @see spark.components.Callout#verticalPosition
- * 
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-public final class CalloutPosition
-{
-    
-    /**
-     *  Position the trailing edge of the callout before the leading edge of the owner.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const BEFORE:String = "before";
-    
-    /**
-     *  Position the leading edge of the callout at the leading edge of the owner.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const START:String = "start";
-    
-    /**
-     *  Position the horizontalCenter of the callout to the horizontalCenter of the owner.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const MIDDLE:String = "middle";
-    
-    /**
-     *  Position the trailing edge of the callout at the trailing edge of the owner.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const END:String = "end";
-    
-    /**
-     *  Position the leading edge of the callout after the trailing edge of the owner.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const AFTER:String = "after";
-    
-    /**
-     *  Position the callout on the exterior of the owner where the callout 
-     *  requires the least amount of resizing to fit.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const AUTO:String = "auto";
-    
-}
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as b/frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as
deleted file mode 100644
index 13f0f0a..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as
+++ /dev/null
@@ -1,72 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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
-{
-
-/**
- *  The ContentBackgroundAppearance class defines the constants for the
- *  allowed values of the <code>contentBackgroundAppearance</code> style of 
- *  Callout.
- * 
- *  @see spark.components.Callout#style:contentBackgroundAppearance
- *  
- *  @langversion 3.0
- *  @playerversion AIR 3
- *  @productversion Flex 4.6
- */
-public final class ContentBackgroundAppearance
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Applies a shadow and mask to the contentGroup.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const INSET:String = "inset";
-    
-    /**
-     *  Applies mask to the contentGroup.
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const FLAT:String = "flat";
-    
-    /**
-     *  Disables both the <code>contentBackgroundColor</code> style and
-     *  contentGroup masking. Use this value when Callout's contents should
-     *  appear directly on top of the <code>backgroundColor</code> or when
-     *  contents provide their own masking. 
-     *  
-     *  @langversion 3.0
-     *  @playerversion AIR 3
-     *  @productversion Flex 4.6
-     */
-    public static const NONE:String = "none";
-}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/mobilecomponents/src/spark/core/ContainerDestructionPolicy.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobilecomponents/src/spark/core/ContainerDestructionPolicy.as b/frameworks/projects/mobilecomponents/src/spark/core/ContainerDestructionPolicy.as
deleted file mode 100644
index 2ae91f1..0000000
--- a/frameworks/projects/mobilecomponents/src/spark/core/ContainerDestructionPolicy.as
+++ /dev/null
@@ -1,62 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.core
-{
-/**
- *  The ContainerCreationPolicy class defines the constant values
- *  for the <code>destructionPolicy</code> property of spark view
- *  classes.
- *
- *  @see spark.components.supportClasses.ViewNavigatorBase#destructionPolicy
- *  @see spark.components.View#destructionPolicy
- *  
- *  @langversion 3.0
- *  @playerversion AIR 2.5
- *  @productversion Flex 4.5
- */
-public final class ContainerDestructionPolicy
-{
-    //--------------------------------------------------------------------------
-    //
-    //  Class constants
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  The lifespan of the container's children is automatically
-     *  managed by the container based on the container's own
-     *  heuristic.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public static const AUTO:String = "auto";
-    
-    /**
-     *  The container never destroys its children.
-     * 
-     *  @langversion 3.0
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public static const NEVER:String = "never";
-}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/SparkClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/SparkClasses.as b/frameworks/projects/spark/src/SparkClasses.as
index cf36f06..0800608 100644
--- a/frameworks/projects/spark/src/SparkClasses.as
+++ b/frameworks/projects/spark/src/SparkClasses.as
@@ -119,6 +119,8 @@ import spark.skins.spark.VSliderSkin; VSliderSkin;
 import spark.skins.spark.VSliderThumbSkin; VSliderThumbSkin;
 import spark.skins.spark.VSliderTrackSkin; VSliderTrackSkin;
 import spark.utils.TextFlowUtil; TextFlowUtil;
+
+import spark.components.ContentBackgroundAppearance;ContentBackgroundAppearance;
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/ArrowDirection.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/ArrowDirection.as b/frameworks/projects/spark/src/spark/components/ArrowDirection.as
new file mode 100644
index 0000000..2ef7c4c
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/ArrowDirection.as
@@ -0,0 +1,84 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+/**
+ *  Enumeration of arrow directions for use in visual components.
+ * 
+ *  @see spark.components.Callout#arrowDirection
+ * 
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public class ArrowDirection
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Arrow points right.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const RIGHT:String = "right";
+    
+    /**
+     *  Arrow points up.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const UP:String = "up";
+    
+    /**
+     *  Arrow points left.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const LEFT:String = "left";
+    
+    /**
+     *  Arrow points down.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const DOWN:String = "down";
+    
+    /**
+     *  No arrow direciton.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const NONE:String = "none";
+}
+}


[16/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'release4.11.0' of https://git-wip-us.apache.org/repos/asf/flex-sdk into release4.11.0

Posted by jm...@apache.org.
Merge branch 'release4.11.0' of https://git-wip-us.apache.org/repos/asf/flex-sdk into release4.11.0


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/223bdb93
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/223bdb93
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/223bdb93

Branch: refs/heads/release4.11.0
Commit: 223bdb93b9a76c0945fb65f88e82670f06ce6cf3
Parents: 0b85494 28ba4b7
Author: Justin Mclean <jm...@apache.org>
Authored: Tue Oct 8 14:58:16 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Tue Oct 8 14:58:16 2013 +1100

----------------------------------------------------------------------
 .../src/mx/controls/listClasses/AdvancedListBase.as              | 4 ++++
 1 file changed, 4 insertions(+)
----------------------------------------------------------------------



[03/25] temp commit move experimental callout to spark

Posted by jm...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/Callout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/Callout.as b/frameworks/projects/spark/src/spark/components/Callout.as
new file mode 100644
index 0000000..8d81b4a
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/Callout.as
@@ -0,0 +1,1669 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.display.DisplayObject;
+import flash.display.DisplayObjectContainer;
+import flash.events.Event;
+import flash.geom.ColorTransform;
+import flash.geom.Matrix;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+
+import mx.core.DPIClassification;
+import mx.core.FlexGlobals;
+import mx.core.ILayoutElement;
+import mx.core.IVisualElement;
+import mx.core.LayoutDirection;
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+import mx.events.ResizeEvent;
+import mx.managers.SystemManager;
+import mx.utils.MatrixUtil;
+import mx.utils.PopUpUtil;
+
+use namespace mx_internal;
+
+//--------------------------------------
+//  Styles
+//--------------------------------------
+
+/**
+ *  Appearance of the <code>contentGroup</code>. 
+ *  Valid MXML values are <code>inset</code>, 
+ *  <code>flat</code>, and <code>none</code>.
+ *
+ *  <p>In ActionScript, you can use the following constants
+ *  to set this property:
+ *  <code>ContentBackgroundAppearance.INSET</code>,
+ *  <code>ContentBackgroundAppearance.FLAT</code> and
+ *  <code>ContentBackgroundAppearance.NONE</code>.</p>
+ *
+ *  @default ContentBackgroundAppearance.INSET
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */ 
+[Style(name="contentBackgroundAppearance", type="String", enumeration="inset,flat,none", inherit="no")]
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+[IconFile("Callout.png")]
+
+/**
+ *  The Callout container is a SkinnablePopUpContainer that functions as a pop-up
+ *  with additional owner-relative positioning options similar to PopUpAnchor.
+ *  Callout also adds an optional <code>arrow</code> skin part that visually
+ *  displays the direction toward the owner.
+ *
+ *  <p>The following image shows a Callout container labeled 'Settings':</p>
+ *
+ * <p>
+ *  <img src="../../images/ca_calloutViewNav_ca.png" alt="Callout container" />
+ * </p>
+ *
+ *  <p>You can also use the CalloutButton control to open a callout container. 
+ *  The CalloutButton control encapsulates in a single control the callout container 
+ *  and all of the logic necessary to open and close the callout. 
+ *  The CalloutButton control is then said to the be the owner, or host, 
+ *  of the callout.</p>
+ *
+ *  <p>Callout uses the <code>horizontalPosition</code> and
+ *  <code>verticalPosition</code> properties to determine the position of the
+ *  Callout relative to the owner that is specified by the <code>open()</code>
+ *  method. 
+ *  Both properties can be set to <code>CalloutPosition.AUTO</code> which selects a
+ *  position based on the aspect ratio of the screen for the Callout to fit
+ *  with minimal overlap with the owner and and minimal adjustments at the
+ *  screen bounds.</p>
+ *
+ *  <p>Once positioned, the Callout positions the arrow on the side adjacent
+ *  to the owner, centered as close as possible on the horizontal or vertical
+ *  center of the owner as appropriate. The arrow is hidden in cases where
+ *  the Callout position is not adjacent to any edge.</p>
+ *
+ *  <p>You do not create a Callout container as part of the normal layout
+ *  of its parent container.
+ *  Instead, it appears as a pop-up container on top of its parent.
+ *  Therefore, you do not create it directly in the MXML code of your application.</p>
+ *
+ *  <p>Instead, you create is as an MXML component, often in a separate MXML file.
+ *  To show the component create an instance of the MXML component, and
+ *  then call the <code>open()</code> method.
+ *  You can also set the size and position of the component when you open it.</p>
+ *
+ *  <p>To close the component, call the <code>close()</code> method.
+ *  If the pop-up needs to return data to a handler, you can add an event listener for
+ *  the <code>PopUp.CLOSE</code> event, and specify the returned data in
+ *  the <code>close()</code> method.</p>
+ *
+ *  <p>The Callout is initially in its <code>closed</code> skin state.
+ *  When it opens, it adds itself as a pop-up to the PopUpManager,
+ *  and transition to the <code>normal</code> skin state.
+ *  To define open and close animations, use a custom skin with transitions between
+ *  the <code>closed</code> and <code>normal</code> skin states.</p>
+ * 
+ *  <p>Callout changes the default inheritance behavior seen in Flex components 
+ *  and instead, inherits styles from the top-level application. This prevents
+ *  Callout's contents from unintentionally inheriting styles from an owner
+ *  (i.e. Button or TextInput) where the default appearance was desired and
+ *  expected.</p>
+ *
+ *  <p>The Callout container has the following default characteristics:</p>
+ *     <table class="innertable">
+ *     <tr><th>Characteristic</th><th>Description</th></tr>
+ *     <tr><td>Default size</td><td>Large enough to display its children</td></tr>
+ *     <tr><td>Minimum size</td><td>0 pixels</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.mobile.CalloutSkin</td></tr>
+ *     </table>
+ *
+ *  @mxml <p>The <code>&lt;s:Callout&gt;</code> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:</p>
+ *
+ *  <pre>
+ *  &lt;s:Callout
+ *    <strong>Properties</strong>
+ *    horizontalPosition="auto"
+ *    verticalPosition="auto"
+ *
+ *    <strong>Styles</strong>
+ *    contentBackgroundAppearance="inset"
+ *  /&gt;
+ *  </pre>
+ *
+ *  @see spark.components.CalloutButton
+ *  @see spark.skins.mobile.CalloutSkin
+ *  @see spark.components.ContentBackgroundAppearance
+ *  @see spark.components.CalloutPosition
+ *
+ *  @includeExample examples/CalloutExample.mxml -noswf
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public class Callout extends SkinnablePopUpContainer
+{
+
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+
+    private static var decomposition:Vector.<Number> = new <Number>[0,0,0,0,0];
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function Callout()
+    {
+        super();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Skin parts
+    //
+    //--------------------------------------------------------------------------
+
+    [Bindable]
+    [SkinPart(required="false")]
+
+    /**
+     *  An optional skin part that visually connects the owner to the
+     *  contentGroup.
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public var arrow:UIComponent;
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+    
+    private var invalidatePositionFlag:Boolean = false;
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
+    //----------------------------------
+    //  horizontalPosition
+    //----------------------------------
+
+    private var _horizontalPosition:String = CalloutPosition.AUTO;
+
+    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
+
+    /**
+     *  Horizontal position of the callout relative to the owner.
+     *
+     *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
+     *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
+     *  and <code>"auto"</code> (default).</p>
+     *
+     *  @default CalloutPosition.AUTO
+     *  @see spark.components.CalloutPosition
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get horizontalPosition():String
+    {
+        return _horizontalPosition;
+    }
+
+    /**
+     *  @private
+     */
+    public function set horizontalPosition(value:String):void
+    {
+        if (value == _horizontalPosition)
+            return;
+
+        _horizontalPosition = value;
+
+        invalidatePosition();
+    }
+
+    //----------------------------------
+    //  actualHorizontalPosition
+    //----------------------------------
+
+    private var _actualHorizontalPosition:String;
+
+    /**
+     *  Fully resolved horizontal position after evaluating CalloutPosition.AUTO.
+     * 
+     *  <p>Update this property in <code>commitProperties()</code> when the
+     *  explicit <code>horizontalPosition</code> is CalloutPosition.AUTO. 
+     *  This property must be updated in <code>updatePopUpPosition()</code>
+     *  when attempting to reposition the Callout.</p> 
+     *  
+     *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
+     *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    mx_internal function get actualHorizontalPosition():String
+    {
+        if (_actualHorizontalPosition)
+            return _actualHorizontalPosition;
+
+        return horizontalPosition;
+    }
+
+    /**
+     *  @private
+     */
+    mx_internal function set actualHorizontalPosition(value:String):void
+    {
+        _actualHorizontalPosition = value;
+    }
+
+    //----------------------------------
+    //  verticalPosition
+    //----------------------------------
+
+    private var _verticalPosition:String = CalloutPosition.AUTO;
+
+    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
+
+    /**
+     *  Vertical position of the callout relative to the owner.
+     *
+     *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
+     *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
+     *  and <code>"auto"</code> (default).</p>
+     *
+     *  @default CalloutPosition.AUTO
+     *  @see spark.components.CalloutPosition
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get verticalPosition():String
+    {
+        return _verticalPosition;
+    }
+
+    /**
+     *  @private
+     */
+    public function set verticalPosition(value:String):void
+    {
+        if (value == _verticalPosition)
+            return;
+
+        _verticalPosition = value;
+
+        invalidatePosition();
+    }
+
+    //----------------------------------
+    //  actualVerticalPosition
+    //----------------------------------
+
+    private var _actualVerticalPosition:String;
+    
+    /**
+     *  Fully resolved vertical position after evaluating CalloutPosition.AUTO.
+     * 
+     *  <p>Update this property in <code>commitProperties()</code> when the
+     *  explicit <code>verticalPosition</code> is CalloutPosition.AUTO. 
+     *  This property must be updated in <code>updatePopUpPosition()</code>
+     *  when attempting to reposition the Callout.</p> 
+     *  
+     *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
+     *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    mx_internal function get actualVerticalPosition():String
+    {
+        if (_actualVerticalPosition)
+            return _actualVerticalPosition;
+
+        return verticalPosition;
+    }
+
+    /**
+     *  @private
+     */
+    mx_internal function set actualVerticalPosition(value:String):void
+    {
+        _actualVerticalPosition = value;
+    }
+
+    //----------------------------------
+    //  arrowDirection
+    //----------------------------------
+
+    private var _arrowDirection:String = ArrowDirection.NONE;
+    
+    /**
+     *  @private
+     *  Indicates if arrow direction was flipped automatically.
+     */
+    private var arrowDirectionAdjusted:Boolean = false;
+
+    /**
+     *  A read-only property that indicates the direction from the callout
+     *  towards the owner.
+     *
+     *  <p>This value is computed based on the callout position given by
+     *  <code>horizontalPosition</code> and <code>verticalPosition</code>.
+     *  Exterior and interior positions will point from the callout towards
+     *  the edge of the owner. Corner and absolute center positions are not
+     *  supported and will return a value of <code>"none".</code></p>
+     * 
+     *  @default none
+     *
+     *  @see spark.components.ArrowDirection
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get arrowDirection():String
+    {
+        return _arrowDirection;
+    }
+    
+    /**
+     *  @private
+     *  Invalidate skin when the arrowDirection changes. Dispatches an 
+     *  "arrowDirectionChanged" event when the property is set.
+     */
+    mx_internal function setArrowDirection(value:String):void
+    {
+        if (_arrowDirection == value)
+            return;
+        
+        _arrowDirection = value;
+        
+        // Instead of using skin states for each arrowDirection, the
+        // skin must override commitProperties() and account for
+        // arrowDirection on it's own.
+        skin.invalidateProperties();
+        
+        // adjust margins based on arrow direction
+        switch (arrowDirection)
+        {
+            case ArrowDirection.DOWN:
+            {
+                // Set the marginBottom to zero to place the arrow adjacent to the keyboard
+                softKeyboardEffectMarginBottom = 0;
+                softKeyboardEffectMarginTop = margin;
+                break;
+            }
+            case ArrowDirection.UP:
+            {
+                // Arrow should already be adjacent to the owner or the top of
+                // the screen.
+                softKeyboardEffectMarginTop = 0;
+                softKeyboardEffectMarginBottom = margin;
+                break;
+            }
+            default:
+            {
+                softKeyboardEffectMarginBottom = margin;
+                softKeyboardEffectMarginTop = margin;
+                break;
+            }
+        }
+        
+        if (hasEventListener("arrowDirectionChanged"))
+            dispatchEvent(new Event("arrowDirectionChanged"));
+    }
+    
+    //----------------------------------
+    //  margin
+    //----------------------------------
+    
+    private var _margin:Number = NaN;
+    
+    /**
+     *  @private
+     *  Defines a margin around the Callout to nudge it's position away from the
+     *  edge of the screen.
+     */
+    mx_internal function get margin():Number
+    {
+        if (isNaN(_margin))
+        {
+            var dpi:Number = FlexGlobals.topLevelApplication["applicationDPI"];
+            
+            if (dpi)
+            {
+                switch (dpi)
+                {
+					case DPIClassification.DPI_640:
+					{
+						_margin = 32;
+						break;
+					}
+					case DPIClassification.DPI_480:
+					{
+						_margin = 24;
+						break;
+					}
+                    case DPIClassification.DPI_320:
+                    {
+                        _margin = 16;
+                        break;
+                    }
+					case DPIClassification.DPI_240:
+					{
+						_margin = 12;
+						break;
+					}
+					case DPIClassification.DPI_120:
+					{
+						_margin = 6;
+						break;
+					}
+                    default:
+                    {
+                        // default DPI_160
+                        _margin = 8;
+                        break;
+                    }
+                }
+            }
+            else
+            {
+                _margin = 8;
+            }
+        }
+        
+        return _margin;
+    }
+    
+    private var _explicitMoveForSoftKeyboard:Boolean = false;
+    
+    /**
+     *  @private
+     */
+    override public function get moveForSoftKeyboard():Boolean
+    {
+        // If no explicit setting, then automatically disable move when
+        // pointing up towards the owner.
+        if (!_explicitMoveForSoftKeyboard && 
+            (arrowDirection == ArrowDirection.UP))
+        {
+            return false;
+        }
+        
+        return super.moveForSoftKeyboard;
+    }
+    
+    /**
+     *  @private
+     */
+    override public function set moveForSoftKeyboard(value:Boolean):void
+    {
+        super.moveForSoftKeyboard = value;
+        
+        _explicitMoveForSoftKeyboard = true;
+    }
+    
+    //----------------------------------
+    //  calloutMaxWidth
+    //----------------------------------
+    
+    private var _calloutMaxWidth:Number = NaN;
+    
+    /**
+     *  @private
+     */
+    mx_internal function get calloutMaxWidth():Number
+    {
+        return _calloutMaxWidth;
+    }
+    
+    /**
+     *  @private
+     */
+    mx_internal function set calloutMaxWidth(value:Number):void
+    {
+        if (_calloutMaxWidth == value)
+            return;
+        
+        _calloutMaxWidth = value;
+        
+        invalidateMaxSize();
+    }
+
+    
+    //----------------------------------
+    //  calloutMaxHeight
+    //----------------------------------
+    
+    private var _calloutMaxHeight:Number = NaN;
+    
+    /**
+     *  @private
+     */
+    mx_internal function get calloutMaxHeight():Number
+    {
+        return _calloutMaxHeight;
+    }
+    
+    /**
+     *  @private
+     */
+    mx_internal function set calloutMaxHeight(value:Number):void
+    {
+        if (_calloutMaxHeight == value)
+            return;
+        
+        _calloutMaxHeight = value;
+        
+        invalidateMaxSize();
+    }
+
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    override public function get explicitMaxWidth():Number
+    {
+        if (!isNaN(super.explicitMaxWidth))
+            return super.explicitMaxWidth;
+        
+        return calloutMaxWidth;
+    }
+    
+    /**
+     *  @private
+     */
+    override public function get explicitMaxHeight():Number
+    {
+        if (!isNaN(super.explicitMaxHeight))
+            return super.explicitMaxHeight;
+        
+        return calloutMaxHeight;
+    }
+
+    /**
+     *  @private
+     */
+    override protected function commitProperties():void
+    {
+        super.commitProperties();
+        
+        // Do not commit position changes if closed (no owner) or owner was 
+        // removed from the display list.
+        if (!owner || !owner.parent)
+            return;
+        
+        // Compute actual positions when using AUTO
+        commitAutoPosition();
+        
+        // Compute max size based on actual positions
+        commitMaxSize();
+        
+        if (arrow)
+        {
+            // arrowDirection can be set in 2 ways: (1) horizontalPostion/verticalPosition
+            // changes and (2) flipping the axis to fit on screen. 
+            if (!arrowDirectionAdjusted)
+            {
+                // Invalidate only when the arrow direction changes
+                var direction:String = determineArrowPosition(actualHorizontalPosition,
+                    actualVerticalPosition);
+                
+                if (arrowDirection != direction)
+                {
+                    setArrowDirection(direction);
+                    
+                    if (arrow)
+                        arrow.visible = (arrowDirection != ArrowDirection.NONE);
+                }
+            }
+            
+            // Always reset the arrow position
+            invalidateDisplayList();
+        }
+    }
+
+    /**
+     *  @private
+     *  Re-position the pop-up using actualHorizontalPosition and
+     *  actualVerticalPosition. 
+     */
+    override public function updatePopUpPosition():void
+    {
+        if (!owner || !systemManager)
+            return;
+        
+        var popUpPoint:Point = calculatePopUpPosition();
+        var ownerComponent:UIComponent = owner as UIComponent;
+        var concatenatedColorTransform:ColorTransform = 
+            (ownerComponent) ? ownerComponent.$transform.concatenatedColorTransform : null;
+        
+        PopUpUtil.applyPopUpTransform(owner, concatenatedColorTransform,
+                                      systemManager, this, popUpPoint);
+    }
+
+    /**
+     *  @private
+     *
+     *  Cooperative layout
+     *  @see spark.components.supportClasses.TrackBase#partAdded
+     */
+    override protected function partAdded(partName:String, instance:Object):void
+    {
+        super.partAdded(partName, instance);
+
+        if (instance == arrow)
+            arrow.addEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function partRemoved(partName:String, instance:Object):void
+    {
+        super.partRemoved(partName, instance);
+
+        if (instance == arrow)
+            arrow.removeEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
+    }
+
+    /**
+     *  @private
+     */
+    override public function open(owner:DisplayObjectContainer, modal:Boolean=false):void
+    {
+        if (isOpen)
+            return;
+        
+        // reset state
+        invalidatePositionFlag = false;
+        arrowDirectionAdjusted = false;
+
+        // Add to PopUpManager, calls updatePopUpPosition(), and change state
+        super.open(owner, modal);
+        
+        // Reposition the callout when the screen changes
+        var systemManagerParent:SystemManager = this.parent as SystemManager;
+        
+        if (systemManagerParent)
+            systemManagerParent.addEventListener(Event.RESIZE, systemManager_resizeHandler);
+    }
+    
+    /**
+     *  @private
+     */
+    override public function close(commit:Boolean=false, data:*=null):void
+    {
+        if (!isOpen)
+            return;
+        
+        var systemManagerParent:SystemManager = this.parent as SystemManager;
+        
+        if (systemManagerParent)
+            systemManagerParent.removeEventListener(Event.RESIZE, systemManager_resizeHandler);
+        
+        super.close(commit, data);
+    }
+    
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+        
+        // Callout can be respositioned while open via SystemManager resize or
+        // explicit changes to horizontalPostion and verticalPosition.
+        if (isOpen && invalidatePositionFlag)
+        {
+            updatePopUpPosition();
+            invalidatePositionFlag = false;
+        }
+
+        // Position the arrow
+        updateSkinDisplayList();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    private function invalidatePosition():void
+    {
+        arrowDirectionAdjusted = false;
+        
+        invalidateProperties();
+        
+        if (isOpen)
+            invalidatePositionFlag = true;
+    }
+    
+    /**
+     *  @private
+     *  Force a new measurement when callout should use it's screen-constrained
+     *  max size.
+     */
+    private function invalidateMaxSize():void
+    {
+        // calloutMaxWidth and calloutMaxHeight don't invalidate 
+        // explicitMaxWidth or explicitMaxHeight. If callout's max size changes
+        // and explicit max sizes aren't set, then invalidate size here so that
+        // callout's max size is applied.
+        if (!canSkipMeasurement() && !isMaxSizeSet)
+            skin.invalidateSize();
+    }
+
+    /**
+     *  Sets the bounds of <code>arrow</code>, whose geometry isn't fully
+     *  specified by the skin's layout.
+     *
+     *  <p>Subclasses can override this method to update the arrow's size,
+     *  position, and visibility, based on the computed
+     *  <code>arrowDirection</code>.</p>
+     *
+     *  <p>By default, this method aligns the arrow on the shorter of either
+     *  the <code>arrow</code> bounds or the <code>owner</code> bounds. This
+     *  implementation assumes that the <code>arrow</code> and the Callout skin
+     *  share the same coordinate space.</p>
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected function updateSkinDisplayList():void
+    {
+        var ownerVisualElement:IVisualElement = owner as IVisualElement;
+
+        // Sanity check to verify owner is still on the display list. If not,
+        // leave the arrow in the current position.
+        if (!arrow || !ownerVisualElement ||
+            (arrowDirection == ArrowDirection.NONE) ||
+            (!ownerVisualElement.parent))
+            return;
+
+        var isStartPosition:Boolean = false;
+        var isMiddlePosition:Boolean = false;
+        var isEndPosition:Boolean = false;
+
+        var position:String = (isArrowVertical) ? actualHorizontalPosition : actualVerticalPosition;
+
+        isStartPosition = (position == CalloutPosition.START);
+        isMiddlePosition = (position == CalloutPosition.MIDDLE);
+        isEndPosition = (position == CalloutPosition.END);
+
+        var isEndOfCallout:Boolean = (arrowDirection == ArrowDirection.DOWN)
+            || (arrowDirection == ArrowDirection.RIGHT);
+
+        var calloutWidth:Number = getLayoutBoundsWidth();
+        var calloutHeight:Number = getLayoutBoundsHeight();
+        var arrowWidth:Number = arrow.getLayoutBoundsWidth();
+        var arrowHeight:Number = arrow.getLayoutBoundsHeight();
+
+        // arrow X/Y in pop-up coordinates
+        var arrowX:Number = 0;
+        var arrowY:Number = 0;
+
+        // Max arrow positions
+        var maxArrowX:Number = calloutWidth - arrowWidth;
+        var maxArrowY:Number = calloutHeight - arrowHeight;
+        
+        // Find the registration point of the owner
+        var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
+        var regPoint:Point = owner.localToGlobal(new Point());
+        regPoint = sandboxRoot.globalToLocal(regPoint);
+
+        if (isArrowVertical)
+        {
+            // Vertical arrows need horizontal alignment
+            var ownerX:Number = regPoint.x;
+            var ownerVisibleWidth:Number = (ownerVisualElement)
+                ? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
+
+            // Edge cases when start/end of owner is not visible
+            if ((ownerX < 0) && (ownerVisibleWidth < screen.width))
+                ownerVisibleWidth = Math.max(ownerVisibleWidth + ownerX, 0);
+            else if ((ownerX >= 0) && ((ownerX + ownerVisibleWidth) >= screen.width))
+                ownerVisibleWidth = Math.max(screen.width - ownerX, 0);
+
+            ownerVisibleWidth = Math.min(ownerVisibleWidth, screen.width);
+
+            if (calloutWidth <= ownerVisibleWidth)
+            {
+                arrowX = (calloutWidth - arrowWidth) / 2;
+            }
+            else // if (calloutWidth > ownerWidth)
+            {
+                // Center the arrow on the owner
+                arrowX = (ownerVisibleWidth - arrowWidth) / 2;
+                
+                // Add owner offset
+                if (ownerX > 0)
+                    arrowX += Math.abs(ownerX - getLayoutBoundsX());
+                
+                if (ownerX < margin)
+                    arrowX -= (margin - ownerX);
+            }
+            
+            // arrow should not extend past the callout bounds
+            arrowX = Math.max(Math.min(maxArrowX, arrowX), 0);
+
+            // Move the arrow to the bottom of the callout
+            if (isEndOfCallout)
+                arrowY = calloutHeight - arrowHeight;
+        }
+        else
+        {
+            // Horizontal arrows need vertical alignment
+            var ownerY:Number = regPoint.y;
+            var ownerVisibleHeight:Number = (ownerVisualElement)
+                ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
+
+            // Edge cases when start/end of owner is not visible
+            if ((ownerY < 0) && (ownerVisibleHeight < screen.height))
+                ownerVisibleHeight = Math.max(ownerVisibleHeight + ownerY, 0);
+            else if ((ownerY >= 0) && ((ownerY + ownerVisibleHeight) >= screen.height))
+                ownerVisibleHeight = Math.max(screen.height - ownerY, 0);
+
+            ownerVisibleHeight = Math.min(ownerVisibleHeight, screen.height);
+
+            if (calloutHeight <= ownerVisibleHeight)
+            {
+                arrowY = (calloutHeight - arrowHeight) / 2;
+            }
+            else // if (calloutHeight > ownerHeight)
+            {
+                // Center the arrow on the owner
+                arrowY = (ownerVisibleHeight - arrowHeight) / 2;
+                
+                // Add owner offset
+                if (ownerY > 0)
+                    arrowY += Math.abs(ownerY - getLayoutBoundsY());
+                
+                if (ownerY < margin)
+                    ownerY -= (margin - ownerY);
+            }
+            
+            // arrow should not extend past the callout bounds
+            arrowY = Math.max(Math.min(maxArrowY, arrowY), 0);
+
+            // Move the arrow to the end of the callout
+            if (isEndOfCallout)
+                arrowX = calloutWidth - arrowWidth;
+        }
+
+        arrow.setLayoutBoundsPosition(Math.floor(arrowX), Math.floor(arrowY));
+        arrow.invalidateDisplayList();
+    }
+    
+    /**
+     *  @private
+     * 
+     *  Flip or clear the adjusted position when the callout bounds are outside
+     *  the screen bounds.
+     */
+    mx_internal function adjustCalloutPosition(actualPosition:String, preferredPosition:String,
+                                               calloutStart:Number, calloutEnd:Number,
+                                               screenStart:Number, screenEnd:Number,
+                                               ownerStart:Number, ownerEnd:Number,
+                                               revert:Boolean=false):String
+    {
+        if (!actualPosition)
+            return null;
+        
+        var adjustedPosition:String = null;
+        var calloutSize:Number = calloutEnd - calloutStart;
+        
+        // Exterior space
+        var exteriorSpaceStart:Number = Math.max(0, ownerStart - screenStart);
+        var exteriorSpaceEnd:Number = Math.max(0, ownerEnd - screenEnd);
+        
+        // Fallback to interior positions if using AUTO and callout can not
+        // fit in either exterior positions
+        var useInterior:Boolean = (preferredPosition == CalloutPosition.AUTO) &&
+            (exteriorSpaceStart < calloutSize) &&
+            (exteriorSpaceEnd < calloutSize);
+        var isExterior:Boolean = false;
+        
+        // Flip to opposite position
+        switch (actualPosition)
+        {
+            case CalloutPosition.BEFORE:
+            {
+                isExterior = true;
+                
+                if (calloutStart < screenStart)
+                    adjustedPosition = CalloutPosition.AFTER;
+                
+                break;
+            }
+            case CalloutPosition.AFTER:
+            {
+                isExterior = true;
+                
+                if (calloutEnd > screenEnd)
+                    adjustedPosition = CalloutPosition.BEFORE;
+                
+                break;
+            }
+            case CalloutPosition.END:
+            {
+                if (calloutStart < screenStart)
+                    adjustedPosition = CalloutPosition.START;
+                break;
+            }
+            case CalloutPosition.START:
+            {
+                if (calloutEnd > screenEnd)
+                    adjustedPosition = CalloutPosition.END;
+                break;
+            }
+            // case CalloutPosition.MIDDLE:
+            // Nudge instead of flipping
+        }
+        
+        // Use interior position if exterior flipping was necessary
+        if (useInterior && adjustedPosition && isExterior)
+        {
+            // Choose the exterior position with the most available space.
+            // Note that START grows towards the exterior END and vice versa.
+            adjustedPosition = (exteriorSpaceEnd >= exteriorSpaceStart) ? 
+                CalloutPosition.START : CalloutPosition.END;
+        }
+        
+        // Return null to revert the adjusted position
+        // Otherwise, return the incoming position
+        if (revert)
+            return (adjustedPosition) ? null : actualPosition;
+        
+        // Adjusted position or null if the callout already fits
+        return adjustedPosition;
+    }
+    
+    /**
+     *  @private
+     * 
+     *  Nudge the callout position to fit on screen. Prefer top/left positions
+     *  and allow overflow to get clipped on the bottom/right.
+     */
+    mx_internal function nudgeToFit(calloutStart:Number, calloutEnd:Number,
+                                    screenStart:Number, screenEnd:Number,
+                                    scaleFactor:Number):Number
+    {
+        var position:Number = 0;
+        
+        if (calloutStart < screenStart)
+            position += (screenStart - calloutStart) / scaleFactor;
+        else if (calloutEnd > screenEnd)
+            position -= (calloutEnd - screenEnd) / scaleFactor;
+        
+        return position;
+    }
+
+    /**
+     *  @private
+     *
+     *  Basically the same as PopUpAnchor, but with more position options
+     *  including exterior, interior and corner positions.
+     * 
+     *  Nudging to fit the screen accounts for <code>margin</code> so that
+     *  the Callout is not positioned in the margin.
+     * 
+     *  <code>arrowDirection</code> will change if required for the callout
+     *  to fit.
+     *
+     *  @see #margin
+     */
+    mx_internal function calculatePopUpPosition():Point
+    {
+        // This implementation doesn't handle rotation
+        var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
+        var matrix:Matrix = MatrixUtil.getConcatenatedMatrix(owner, sandboxRoot);
+
+        var regPoint:Point = new Point();
+
+        if (!matrix)
+            return regPoint;
+        
+        var adjustedHorizontalPosition:String;
+        var adjustedVerticalPosition:String;
+        var calloutBounds:Rectangle = determinePosition(actualHorizontalPosition,
+            actualVerticalPosition, matrix, regPoint);
+        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
+
+        // Position the callout in the opposite direction if it
+        // does not fit on the screen.
+        if (screen)
+        {
+            adjustedHorizontalPosition = adjustCalloutPosition(
+                actualHorizontalPosition, horizontalPosition,
+                calloutBounds.left, calloutBounds.right,
+                screen.left, screen.right,
+                ownerBounds.left, ownerBounds.right);
+
+            adjustedVerticalPosition = adjustCalloutPosition(
+                actualVerticalPosition, verticalPosition,
+                calloutBounds.top, calloutBounds.bottom,
+                screen.top, screen.bottom,
+                ownerBounds.top, ownerBounds.bottom);
+        }
+
+        var oldArrowDirection:String = arrowDirection;
+        var actualArrowDirection:String = null;
+        
+        // Reset arrowDirectionAdjusted
+        arrowDirectionAdjusted = false;
+
+        // Get the new registration point based on the adjusted position
+        if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
+        {
+            var adjustedRegPoint:Point = new Point();
+            var tempHorizontalPosition:String = (adjustedHorizontalPosition)
+                ? adjustedHorizontalPosition : actualHorizontalPosition;
+            var tempVerticalPosition:String = (adjustedVerticalPosition)
+                ? adjustedVerticalPosition : actualVerticalPosition;
+
+            // Adjust arrow direction after adjusting position
+            actualArrowDirection = determineArrowPosition(tempHorizontalPosition,
+                tempVerticalPosition);
+
+            // All position flips gaurantee an arrowDirection change
+            setArrowDirection(actualArrowDirection);
+            arrowDirectionAdjusted = true;
+
+            if (arrow)
+                arrow.visible = (arrowDirection != ArrowDirection.NONE);
+
+            // Reposition the arrow
+            updateSkinDisplayList();
+
+            var adjustedBounds:Rectangle = determinePosition(tempHorizontalPosition,
+                tempVerticalPosition, matrix, adjustedRegPoint);
+
+            if (screen)
+            {
+                // If we adjusted the position but the callout still doesn't fit,
+                // then revert to the original position.
+                adjustedHorizontalPosition = adjustCalloutPosition(
+                    adjustedHorizontalPosition, horizontalPosition,
+                    adjustedBounds.left, adjustedBounds.right,
+                    screen.left, screen.right,
+                    ownerBounds.left, ownerBounds.right,
+                    true);
+                
+                adjustedVerticalPosition = adjustCalloutPosition(
+                    adjustedVerticalPosition, verticalPosition,
+                    adjustedBounds.top, adjustedBounds.bottom,
+                    screen.top, screen.bottom, 
+                    ownerBounds.top, ownerBounds.bottom,
+                    true);
+            }
+
+            if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
+            {
+                regPoint = adjustedRegPoint;
+                calloutBounds = adjustedBounds;
+
+                // Temporarily set actual positions to reposition the arrow
+                if (adjustedHorizontalPosition)
+                    actualHorizontalPosition = adjustedHorizontalPosition;
+
+                if (adjustedVerticalPosition)
+                    actualVerticalPosition = adjustedVerticalPosition;
+
+                // Reposition the arrow with the new actual position
+                updateSkinDisplayList();
+            }
+            else
+            {
+                // Restore previous arrow direction *before* reversing the
+                // adjusted positions
+                setArrowDirection(oldArrowDirection);
+                arrowDirectionAdjusted = false;
+
+                // Reposition the arrow to the original position
+                updateSkinDisplayList();
+            }
+        }
+
+        MatrixUtil.decomposeMatrix(decomposition, matrix, 0, 0);
+        var concatScaleX:Number = decomposition[3];
+        var concatScaleY:Number = decomposition[4];
+
+        // If the callout still doesn't fit, then nudge it
+        // so it is completely on the screen. Make sure to include scale.
+        var screenTop:Number = screen.top;
+        var screenBottom:Number = screen.bottom;
+        var screenLeft:Number = screen.left;
+        var screenRight:Number = screen.right;
+        
+        // Allow zero margin on the the side with the arrow
+        switch (arrowDirection)
+        {
+            case ArrowDirection.UP:
+            {
+                screenBottom -= margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.DOWN:
+            {
+                screenTop += margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.LEFT:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenRight -= margin
+                break;
+            }
+            case ArrowDirection.RIGHT:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenLeft += margin;
+                break;
+            }
+            default:
+            {
+                screenTop += margin;
+                screenBottom -= margin;
+                screenLeft += margin;
+                screenRight -= margin
+                break;
+            }
+        }
+        
+        regPoint.y += nudgeToFit(calloutBounds.top, calloutBounds.bottom,
+            screenTop, screenBottom, concatScaleY);
+        
+        regPoint.x += nudgeToFit(calloutBounds.left, calloutBounds.right,
+            screenLeft, screenRight, concatScaleX);
+
+        // Compute the stage coordinates of the upper,left corner of the PopUp, taking
+        // the postTransformOffsets - which include mirroring - into account.
+        // If we're mirroring, then the implicit assumption that x=left will fail,
+        // so we compensate here.
+
+        if (layoutDirection == LayoutDirection.RTL)
+            regPoint.x += calloutBounds.width;
+        return MatrixUtil.getConcatenatedComputedMatrix(owner, sandboxRoot).transformPoint(regPoint);
+    }
+
+    /**
+     *  @private
+     *  Computes <code>actualHorizontalPosition</code> and/or
+     *  <code>actualVerticalPosition</code> values when using
+     *  <code>CalloutPosition.AUTO</code>. When implementing subclasses of
+     *  Callout, use <code>actualHorizontalPosition</code> and
+     *  <code>actualVerticalPosition</code> to compute
+     *  <code>arrowDirection</code> and positioning in
+     *  <code>updatePopUpPosition()</code> and <code>updateSkinDisplayList()</code>.
+     *
+     *  <p>The default implementation chooses "outer" positions for the callout
+     *  such that the owner is not obscured. Horizontal/Vertical orientation
+     *  relative to the owner choosen based on the aspect ratio.</p>
+     *
+     *  <p>When the aspect ratio is landscape, and the callout can fit to the
+     *  left or right of the owner, <code>actualHorizontalPosition</code> is
+     *  set to <code>CalloutPosition.BEFORE</code> or
+     *  <code>CalloutPosition.AFTER</code> as appropriate.
+     *  <code>actualVerticalPosition</code> is set to
+     *  <code>CalloutPosition.MIDDLE</code> to have the vertical center of the
+     *  callout align to the vertical center of the owner.</p>
+     *
+     *  <p>When the aspect ratio is portrait, and the callout can fit
+     *  above or below the owner, <code>actualVerticalPosition</code> is
+     *  set to <code>CalloutPosition.BEFORE</code> or
+     *  <code>CalloutPosition.AFTER</code> as appropriate.
+     *  <code>actualHorizontalPosition</code> is set to
+     *  <code>CalloutPosition.MIDDLE</code> to have the horizontal center of the
+     *  callout align to the horizontal center of the owner.</p>
+     *
+     *  <p>Subclasses may override to modify automatic positioning behavior.</p>
+     */
+    mx_internal function commitAutoPosition():void
+    {
+        if (!screen || ((horizontalPosition != CalloutPosition.AUTO) &&
+            (verticalPosition != CalloutPosition.AUTO)))
+        {
+            // Use explicit positions instead of AUTO
+            actualHorizontalPosition = null;
+            actualVerticalPosition = null;
+            
+            return;
+        }
+
+        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
+
+        // Use aspect ratio to determine vertical/horizontal preference
+        var isLandscape:Boolean = (screen.width > screen.height);
+
+        // Exterior space
+        var exteriorSpaceLeft:Number = Math.max(0, ownerBounds.left);
+        var exteriorSpaceRight:Number = Math.max(0, screen.width - ownerBounds.right);
+        var exteriorSpaceTop:Number = Math.max(0, ownerBounds.top);
+        var exteriorSpaceBottom:Number = Math.max(0, screen.height - ownerBounds.bottom);
+
+        if (verticalPosition != CalloutPosition.AUTO)
+        {
+            // Horizontal auto only
+            switch (verticalPosition)
+            {
+                case CalloutPosition.START:
+                case CalloutPosition.MIDDLE:
+                case CalloutPosition.END:
+                {
+                    actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
+                    break;
+                }
+                default:
+                {
+                    actualHorizontalPosition = CalloutPosition.MIDDLE;
+                    break;
+                }
+            }
+            
+            actualVerticalPosition = null;
+        }
+        else if (horizontalPosition != CalloutPosition.AUTO)
+        {
+            // Vertical auto only
+            switch (horizontalPosition)
+            {
+                case CalloutPosition.START:
+                case CalloutPosition.MIDDLE:
+                case CalloutPosition.END:
+                {
+                    actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
+                    break;
+                }
+                default:
+                {
+                    actualVerticalPosition = CalloutPosition.MIDDLE;
+                    break;
+                }
+            }
+            
+            actualHorizontalPosition = null;
+        }
+        else // if ((verticalPosition == CalloutPosition.AUTO) && (horizontalPosition == CalloutPosition.AUTO))
+        {
+            if (!isLandscape)
+            {
+                // Arrow will be vertical when in portrait
+                actualHorizontalPosition = CalloutPosition.MIDDLE;
+                actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
+            }
+            else
+            {
+                // Arrow will be horizontal when in landscape
+                actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CalloutPosition.AFTER : CalloutPosition.BEFORE;
+                actualVerticalPosition = CalloutPosition.MIDDLE;
+            }
+        }
+    }
+    
+    /**
+     *  @private
+     *  Return true if user-specified max size if set
+     */
+    mx_internal function get isMaxSizeSet():Boolean
+    {
+        var explicitMaxW:Number = super.explicitMaxWidth;
+        var explicitMaxH:Number = super.explicitMaxHeight;
+        
+        return (!isNaN(explicitMaxW) && !isNaN(explicitMaxH));
+    }
+    
+    /**
+     *  @private
+     *  Return the original height if the soft keyboard is active. This height
+     *  is used to stabilize AUTO positioning so that the position is based
+     *  on the original height of the Callout instead of a possibly shorter
+     *  height due to soft keyboard effects.
+     */
+    mx_internal function get calloutHeight():Number
+    {
+        return (isSoftKeyboardEffectActive) ? softKeyboardEffectCachedHeight : getLayoutBoundsHeight();
+    }
+    
+    /**
+     *  @private
+     *  Compute max width and max height. Uses the the owner and screen bounds 
+     *  as well as preferred positions to determine max width and max height  
+     *  for all possible exterior and interior positions.
+     */
+    mx_internal function commitMaxSize():void
+    {
+        var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
+        var ownerLeft:Number = ownerBounds.left;
+        var ownerRight:Number = ownerBounds.right;
+        var ownerTop:Number = ownerBounds.top;
+        var ownerBottom:Number = ownerBounds.bottom;
+        var maxW:Number;
+        var maxH:Number;
+        
+        switch (actualHorizontalPosition)
+        {
+            case CalloutPosition.MIDDLE:
+            {
+                // Callout matches screen width
+                maxW = screen.width - (margin * 2);
+                break;
+            }
+            case CalloutPosition.START:
+            case CalloutPosition.END:
+            {
+                // Flip left and right when using inner positions
+                ownerLeft = ownerBounds.right;
+                ownerRight = ownerBounds.left;
+                
+                // Fall through
+            }
+            default:
+            {
+                // Maximum is the larger of the actual position or flipped position
+                maxW = Math.max(ownerLeft, screen.right - ownerRight) - margin;
+                break;
+            }
+        }
+        
+        // If preferred position was AUTO, then allow maxWidth to grow to
+        // fit the interior position if the owner is wide
+        if ((horizontalPosition == CalloutPosition.AUTO) &&
+            (ownerBounds.width > maxW))
+            maxW += ownerBounds.width;
+        
+        switch (actualVerticalPosition)
+        {
+            case CalloutPosition.MIDDLE:
+            {
+                // Callout matches screen height
+                maxH = screen.height - (margin * 2);
+                break;
+            }
+            case CalloutPosition.START:
+            case CalloutPosition.END:
+            {
+                // Flip top and bottom when using inner positions
+                ownerTop = ownerBounds.bottom;
+                ownerBottom = ownerBounds.top;
+                
+                // Fall through
+            }
+            default:
+            {
+                // Maximum is the larger of the actual position or flipped position
+                maxH = Math.max(ownerTop, screen.bottom - ownerBottom) - margin;
+                break;
+            }
+        }
+        
+        // If preferred position was AUTO, then allow maxHeight to grow to
+        // fit the interior position if the owner is tall
+        if ((verticalPosition == CalloutPosition.AUTO) && 
+            (ownerBounds.height > maxH))
+            maxH += ownerBounds.height;
+        
+        calloutMaxWidth = maxW;
+        calloutMaxHeight = maxH;
+    }
+
+    /**
+     *  @private
+     */
+    mx_internal function determineArrowPosition(horizontalPos:String, verticalPos:String):String
+    {
+        // Determine arrow direction, outer positions get priority.
+        // Corner positions and center show no arrow
+        var direction:String = ArrowDirection.NONE;
+
+        if (horizontalPos == CalloutPosition.BEFORE)
+        {
+            if ((verticalPos != CalloutPosition.BEFORE)
+                &&  (verticalPos != CalloutPosition.AFTER))
+            {
+                direction = ArrowDirection.RIGHT;
+            }
+        }
+        else if (horizontalPos == CalloutPosition.AFTER)
+        {
+            if ((verticalPos != CalloutPosition.BEFORE)
+                && (verticalPos != CalloutPosition.AFTER))
+            {
+                direction = ArrowDirection.LEFT;
+            }
+        }
+        else if (verticalPos == CalloutPosition.BEFORE)
+        {
+            direction = ArrowDirection.DOWN;
+        }
+        else if (verticalPos == CalloutPosition.AFTER)
+        {
+            direction = ArrowDirection.UP;
+        }
+        else if (horizontalPos == CalloutPosition.START)
+        {
+            direction = ArrowDirection.LEFT;
+        }
+        else if (horizontalPos == CalloutPosition.END)
+        {
+            direction = ArrowDirection.RIGHT;
+        }
+        else if (verticalPos == CalloutPosition.START)
+        {
+            direction = ArrowDirection.UP;
+        }
+        else if (verticalPos == CalloutPosition.END)
+        {
+            direction = ArrowDirection.DOWN;
+        }
+
+        return direction
+    }
+
+    /**
+     *  @private
+     * 
+     *  Uses horizontalPosition and verticalPosition to determine the bounds of
+     *  the callout.
+     */
+    mx_internal function determinePosition(horizontalPos:String, verticalPos:String,
+                                           matrix:Matrix, registrationPoint:Point):Rectangle
+    {
+        var ownerVisualElement:ILayoutElement = owner as ILayoutElement;
+        var ownerWidth:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
+        var ownerHeight:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
+        var calloutWidth:Number = getLayoutBoundsWidth();
+        var calloutHeight:Number = this.calloutHeight;
+
+        switch (horizontalPos)
+        {
+            case CalloutPosition.BEFORE:
+            {
+                // The full width of the callout is before the owner
+                // All arrow directions are ArrowDirection.RIGHT x=(width - arrow.width)
+                registrationPoint.x = -calloutWidth;
+                break;
+            }
+            case CalloutPosition.START:
+            {
+                // ArrowDirection.LEFT is at x=0
+                registrationPoint.x = 0;
+                break;
+            }
+            case CalloutPosition.END:
+            {
+                // The ends of the owner and callout are aligned
+                registrationPoint.x = (ownerWidth - calloutWidth);
+                break;
+            }
+            case CalloutPosition.AFTER:
+            {
+                // The full width of the callout is after the owner
+                // All arrow directions are ArrowDirection.LEFT (x=0)
+                registrationPoint.x = ownerWidth;
+                break;
+            }
+            default: // case CalloutPosition.MIDDLE:
+            {
+                registrationPoint.x = Math.floor((ownerWidth - calloutWidth) / 2);
+                break;
+            }
+        }
+
+        switch (verticalPos)
+        {
+            case CalloutPosition.BEFORE:
+            {
+                // The full height of the callout is before the owner
+                // All arrow directions are ArrowDirection.DOWN y=(height - arrow.height)
+                registrationPoint.y = -calloutHeight;
+                break;
+            }
+            case CalloutPosition.START:
+            {
+                // ArrowDirection.UP is at y=0
+                registrationPoint.y = 0;
+                break;
+            }
+            case CalloutPosition.MIDDLE:
+            {
+                registrationPoint.y = Math.floor((ownerHeight - calloutHeight) / 2);
+                break;
+            }
+            case CalloutPosition.END:
+            {
+                // The ends of the owner and callout are aligned
+                registrationPoint.y = (ownerHeight - calloutHeight);
+                break;
+            }
+            default: //case CalloutPosition.AFTER:
+            {
+                // The full height of the callout is after the owner
+                // All arrow directions are ArrowDirection.UP (y=0)
+                registrationPoint.y = ownerHeight;
+                break;
+            }
+        }
+
+        var topLeft:Point = registrationPoint.clone();
+        var size:Point = MatrixUtil.transformBounds(calloutWidth, calloutHeight, matrix, topLeft);
+        var bounds:Rectangle = new Rectangle();
+        
+        bounds.left = topLeft.x;
+        bounds.top = topLeft.y;
+        bounds.width = size.x;
+        bounds.height = size.y;
+        
+        return bounds;
+    }
+    
+    /**
+     * @private
+     */
+    mx_internal function get isArrowVertical():Boolean
+    {
+        return (arrowDirection == ArrowDirection.UP ||
+                arrowDirection == ArrowDirection.DOWN);
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    private function arrow_resizeHandler(event:Event):void
+    {
+        updateSkinDisplayList();
+    }
+    
+    /**
+     *  @private
+     */
+    private function systemManager_resizeHandler(event:Event):void
+    {
+        // Remove explicit settings if due to Resize effect
+        softKeyboardEffectResetExplicitSize();
+        
+        // Screen resize might require a new arrow direction and callout position
+        invalidatePosition();
+        
+        if (!isSoftKeyboardEffectActive)
+        {
+            // Force validation and use new screen size only if the keyboard
+            // effect is not active. The stage dimensions may be invalid while 
+            // the soft keyboard is active. See SDK-31860.
+            validateNow();
+        }
+    }
+}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/Callout.png
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/Callout.png b/frameworks/projects/spark/src/spark/components/Callout.png
new file mode 100644
index 0000000..36bc882
Binary files /dev/null and b/frameworks/projects/spark/src/spark/components/Callout.png differ

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/CalloutButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/CalloutButton.as b/frameworks/projects/spark/src/spark/components/CalloutButton.as
new file mode 100644
index 0000000..7eec462
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/CalloutButton.as
@@ -0,0 +1,807 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 mx.core.ClassFactory;
+import mx.core.IFactory;
+import mx.core.mx_internal;
+import mx.utils.BitFlagUtil;
+
+import spark.components.supportClasses.DropDownController;
+import spark.core.ContainerDestructionPolicy;
+import spark.events.DropDownEvent;
+import spark.events.PopUpEvent;
+import spark.layouts.supportClasses.LayoutBase;
+
+use namespace mx_internal;
+
+//--------------------------------------
+//  Styles
+//--------------------------------------
+
+[Exclude(name="repeatDelay", kind="style")]
+[Exclude(name="repeatInterval", kind="style")]
+
+//--------------------------------------
+//  Events
+//--------------------------------------
+
+/**
+ *  Dispatched when the callout closes for any reason, such when: 
+ *  <ul>
+ *      <li>The callout is programmatically closed.</li>
+ *      <li>The user clicks outside of the callout.</li>
+ *      <li>The user clicks the open button while the callout is 
+ *  displayed.</li>
+ *  </ul>
+ *
+ *  @eventType spark.events.DropDownEvent.CLOSE
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+[Event(name="close", type="spark.events.DropDownEvent")]
+
+/**
+ *  Dispatched when the user clicks the open button
+ *  to display the callout.  
+ *
+ *  @eventType spark.events.DropDownEvent.OPEN
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+[Event(name="open", type="spark.events.DropDownEvent")]
+
+//--------------------------------------
+//  Other metadata
+//--------------------------------------
+
+[IconFile("Callout.png")]
+
+[DefaultProperty("calloutContent")]
+
+/**
+ *  The CalloutButton control is a drop down component that defines a button to
+ *  open and close a Callout container. 
+ *  The CalloutButton specifies the layout and child components 
+ *  of the Callout container.
+ *
+ *  <p>The following image shows a Callout container under the CalloutButton 
+ *  labeled 'Open callout':</p>
+ *
+ * <p>
+ *  <img src="../../images/ca_calloutButton_ca.png" alt="Callout button" />
+ * </p>
+ *
+ *  <p>The CalloutButton control uses the spark.components.supportClasses.DropDownController
+ *  class to manage the Callout container. 
+ *  You can access the DropDownController by using the protected 
+ *  <code>CalloutButton.dropDownController</code> property.</p>
+ *
+ *  <p>When the callout is open:</p>
+ *  <ul>
+ *    <li>Clicking the button closes the callout</li>
+ *    <li>Clicking outside of the callout closes the callout.</li>
+ *  </ul>
+ *
+ *  <p>The CalloutButton component 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 display the text label of the control</td>
+ *        </tr>
+ *        <tr>
+ *           <td>Minimum size</td>
+ *           <td>32 pixels wide and 43 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.mobile.CalloutButtonSkin</td>
+ *        </tr>
+ *     </table>
+ *
+ *  @mxml
+ *  
+ *  <p>The <code>&lt;s:CalloutButton&gt;</code> tag inherits all of the tag 
+ *  attributes of its superclass and adds the following tag attributes:</p>
+ *  
+ *  <pre>
+ *  &lt;s:CalloutButton
+ *   <strong>Properties</strong>
+ *    calloutDestructionPolicy="auto"
+ *    calloutLayout="BasicLayout"
+ *    horizontalPosition="auto"
+ *    verticalPosition="auto
+ * 
+ *   <strong>Events</strong>
+ *    open="<i>No default</i>"
+ *    close="<i>No default</i>"
+ *      ...
+ *      <i>child tags</i>
+ *      ...
+ *  &lt;/s:CalloutButton&gt;
+ *  </pre>
+ * 
+ *  @see spark.components.Callout
+ *  @see spark.components.Button
+ *  @see spark.components.supportClasses.DropDownController
+ *
+ *  @includeExample examples/CalloutButtonExample.mxml -noswf
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public class CalloutButton extends Button
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    mx_internal static const CALLOUT_CONTENT_PROPERTY_FLAG:uint = 1 << 0;
+    
+    /**
+     *  @private
+     */
+    mx_internal static const CALLOUT_LAYOUT_PROPERTY_FLAG:uint = 1 << 1;
+    
+    /**
+     *  @private
+     */
+    mx_internal static const HORIZONTAL_POSITION_PROPERTY_FLAG:uint = 1 << 2;
+    
+    /**
+     *  @private
+     */
+    mx_internal static const VERTICAL_POSITION_PROPERTY_FLAG:uint = 1 << 3;
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function CalloutButton()
+    {
+        super();
+        
+        dropDownController = new DropDownController();
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Skin parts
+    //
+    //--------------------------------------------------------------------------
+    
+    [SkinPart(required="false")]
+    
+    /**
+     *  A skin part that defines the drop-down factory which creates the Callout
+     *  instance.
+     * 
+     *  If <code>dropDown</code> is not defined on the skin, a  
+     *  <code>ClassFactory</code> is created to generate a default Callout
+     *  instance.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public var dropDown:IFactory;
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     *  Several properties are proxied to callout.  However, when callout
+     *  is not around, we need to store values set on CalloutButton.  This object 
+     *  stores those values.  If callout is around, the values are stored 
+     *  on the callout directly.  However, we need to know what values 
+     *  have been set by the developer on the CalloutButton (versus set on 
+     *  the callout or defaults of the callout) as those are values 
+     *  we want to carry around if the callout changes (via a new skin). 
+     *  In order to store this info effeciently, calloutProperties becomes 
+     *  a uint to store a series of BitFlags.  These bits represent whether a 
+     *  property has been explicitely set on this CalloutButton.  When the 
+     *  callout is not around, calloutProperties is a typeless 
+     *  object to store these proxied properties.  When callout is around,
+     *  calloutProperties stores booleans as to whether these properties 
+     *  have been explicitely set or not.
+     */
+    mx_internal var calloutProperties:Object = {};
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Properties proxied to callout
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  calloutContent
+    //---------------------------------- 
+    
+    [ArrayElementType("mx.core.IVisualElement")]
+    
+    /**
+     *  The set of components to include in the Callout's content.
+     *
+     *  @default null
+     *
+     *  @see spark.components.Callout
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get calloutContent():Array
+    {
+        if (callout && callout.contentGroup)
+            return callout.contentGroup.getMXMLContent();
+        else
+            return calloutProperties.calloutContent;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set calloutContent(value:Array):void
+    {
+        if (callout)
+        {
+            callout.mxmlContent = value;
+            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
+                CALLOUT_CONTENT_PROPERTY_FLAG, value != null);
+        }
+        else
+            calloutProperties.calloutContent = value;
+    }
+    
+    //----------------------------------
+    //  calloutLayout
+    //---------------------------------- 
+    
+    /**
+     *  Defines the layout of the Callout container.
+     *
+     *  @default BasicLayout
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get calloutLayout():LayoutBase
+    {
+        return (callout)  ? callout.layout : calloutProperties.calloutLayout;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set calloutLayout(value:LayoutBase):void
+    {
+        if (callout)
+        {
+            callout.layout = value;
+            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
+                CALLOUT_LAYOUT_PROPERTY_FLAG, true);
+        }
+        else
+            calloutProperties.calloutLayout = value;
+    }
+    
+    //----------------------------------
+    //  horizontalPosition
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
+    
+    /**
+     *  @copy spark.components.Callout#horizontalPosition
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get horizontalPosition():String
+    {
+        if (callout)
+            return callout.horizontalPosition;
+        
+        return calloutProperties.horizontalPosition;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set horizontalPosition(value:String):void
+    {
+        if (callout)
+        {
+            callout.horizontalPosition = value;
+            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
+                HORIZONTAL_POSITION_PROPERTY_FLAG, value != null);
+        }
+        else
+            calloutProperties.horizontalPosition = value;
+    }
+    
+    //----------------------------------
+    //  verticalPosition
+    //----------------------------------
+    
+    [Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
+    
+    /**
+     *  @copy spark.components.Callout#verticalPosition
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get verticalPosition():String
+    {
+        if (callout)
+            return callout.verticalPosition;
+        
+        return calloutProperties.verticalPosition;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set verticalPosition(value:String):void
+    {
+        if (callout)
+        {
+            callout.verticalPosition = value;
+            calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
+                VERTICAL_POSITION_PROPERTY_FLAG, value != null);
+        }
+        else
+            calloutProperties.verticalPosition = value;
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+    
+    //----------------------------------
+    //  callout
+    //----------------------------------
+    
+    /**
+     *  @private
+     */
+    private var _callout:Callout;
+    
+    [Bindable("calloutChanged")]
+    
+    /**
+     *  The Callout instance created after the <code>DropDownEvent.OPEN</code>
+     *  is fired. The instance is created using the <code>dropDown</code>
+     *  <code>IFactory</code> skin part.
+     * 
+     *  @see #calloutDestructionPolicy
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get callout():Callout
+    {
+        return _callout;
+    }
+    
+    /**
+     *  @private
+     */
+    mx_internal function setCallout(value:Callout):void
+    {
+        if (_callout == value)
+            return;
+        
+        _callout = value;
+        
+        if (hasEventListener("calloutChanged"))
+            dispatchEvent(new Event("calloutChanged"));
+    }
+    
+    //----------------------------------
+    //  dropDownController
+    //----------------------------------
+    
+    /**
+     *  @private
+     */
+    private var _dropDownController:DropDownController; 
+    
+    /**
+     *  Instance of the DropDownController class that handles all of the mouse, keyboard 
+     *  and focus user interactions. 
+     * 
+     *  Flex calls the <code>initializeDropDownController()</code> method after 
+     *  the DropDownController instance is created in the constructor.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected function get dropDownController():DropDownController
+    {
+        return _dropDownController;
+    }
+    
+    /**
+     *  @private
+     */
+    protected function set dropDownController(value:DropDownController):void
+    {
+        if (_dropDownController == value)
+            return;
+        
+        _dropDownController = value;
+        
+        _dropDownController.closeOnResize = false;
+        _dropDownController.addEventListener(DropDownEvent.OPEN, dropDownController_openHandler);
+        _dropDownController.addEventListener(DropDownEvent.CLOSE, dropDownController_closeHandler);
+        
+        _dropDownController.openButton = this;
+        
+        if (callout)
+            _dropDownController.dropDown = callout;    
+    }
+    
+    //----------------------------------
+    //  isDropDownOpen
+    //----------------------------------
+    
+    /**
+     *  @copy spark.components.supportClasses.DropDownController#isOpen
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get isDropDownOpen():Boolean
+    {
+        if (dropDownController)
+            return dropDownController.isOpen;
+        else
+            return false;
+    }
+    
+    //----------------------------------
+    //  calloutDestructionPolicy
+    //----------------------------------
+    
+    private var _calloutDestructionPolicy:String = ContainerDestructionPolicy.AUTO;
+    
+    [Inspectable(category="General", enumeration="auto,never", defaultValue="auto")]
+    
+    /**
+     *  Defines the destruction policy the callout button uses
+     *  when the callout is closed. 
+     *  If set to <code>"auto"</code>, the button 
+     *  destroys the Callout instance when it is closed.  
+     *  If set to <code>"never"</code>, the Callout container 
+     *  is cached in memory.
+     * 
+     *  @default auto
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function get calloutDestructionPolicy():String
+    {
+        return _calloutDestructionPolicy;
+    }
+    
+    /**
+     *  @private
+     */
+    public function set calloutDestructionPolicy(value:String):void
+    {
+        if (_calloutDestructionPolicy == value)
+            return;
+        
+        _calloutDestructionPolicy = value;
+        
+        // destroy the callout immediately if currently closed
+        if (!isDropDownOpen &&
+            (calloutDestructionPolicy == ContainerDestructionPolicy.AUTO))
+        {
+            destroyCallout();
+        }
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    override protected function attachSkin():void
+    {
+        super.attachSkin();
+        
+        // create dropDown if it was not found in the skin
+        if (!dropDown && !("dropDown" in skin))
+            dropDown = new ClassFactory(Callout);
+    }
+    
+    /**
+     *  @private
+     */
+    override protected function partAdded(partName:String, instance:Object):void
+    {
+        super.partAdded(partName, instance);
+        
+        if (partName == "dropDown")
+        {
+            // copy proxied values from calloutProperties (if set) to callout
+            var newCalloutProperties:uint = 0;
+            var calloutInstance:Callout = instance as Callout;
+            
+            if (calloutInstance && dropDownController)
+            {
+                calloutInstance.id = "callout";
+                dropDownController.dropDown = calloutInstance;
+                
+                calloutInstance.addEventListener(PopUpEvent.OPEN, callout_openHandler);
+                calloutInstance.addEventListener(PopUpEvent.CLOSE, callout_closeHandler);
+                
+                if (calloutProperties.calloutContent !== undefined)
+                {
+                    calloutInstance.mxmlContent = calloutProperties.calloutContent;
+                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
+                        CALLOUT_CONTENT_PROPERTY_FLAG, true);
+                }
+                
+                if (calloutProperties.calloutLayout !== undefined)
+                {
+                    calloutInstance.layout = calloutProperties.calloutLayout;
+                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
+                        CALLOUT_LAYOUT_PROPERTY_FLAG, true);
+                }
+                
+                if (calloutProperties.horizontalPosition !== undefined)
+                {
+                    calloutInstance.horizontalPosition = calloutProperties.horizontalPosition;
+                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
+                        HORIZONTAL_POSITION_PROPERTY_FLAG, true);
+                }
+                
+                if (calloutProperties.verticalPosition !== undefined)
+                {
+                    calloutInstance.verticalPosition = calloutProperties.verticalPosition;
+                    newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
+                        VERTICAL_POSITION_PROPERTY_FLAG, true);
+                }
+                
+                calloutProperties = newCalloutProperties;
+            }
+        }
+    }
+    
+    /**
+     *  @private
+     */
+    override protected function partRemoved(partName:String, instance:Object):void
+    {
+        if (dropDownController && (instance == callout))
+        {
+            dropDownController.dropDown = null;
+        }
+        
+        if (partName == "dropDown")
+        {
+            callout.removeEventListener(PopUpEvent.OPEN, callout_openHandler);
+            callout.removeEventListener(PopUpEvent.CLOSE, callout_closeHandler);
+            
+            // copy proxied values from callout (if explicitely set) to calloutProperties
+            var newCalloutProperties:Object = {};
+            
+            if (BitFlagUtil.isSet(calloutProperties as uint, CALLOUT_CONTENT_PROPERTY_FLAG) &&
+                (callout.contentGroup))
+            {
+                newCalloutProperties.calloutContent = callout.contentGroup.getMXMLContent();
+                callout.contentGroup.mxmlContent = null;
+            }
+            
+            if (BitFlagUtil.isSet(calloutProperties as uint, CALLOUT_LAYOUT_PROPERTY_FLAG))
+            {
+                newCalloutProperties.calloutLayout = callout.layout;
+                callout.layout = null;
+            }
+            
+            if (BitFlagUtil.isSet(calloutProperties as uint, HORIZONTAL_POSITION_PROPERTY_FLAG))
+                newCalloutProperties.horizontalPosition = callout.horizontalPosition;
+            
+            if (BitFlagUtil.isSet(calloutProperties as uint, VERTICAL_POSITION_PROPERTY_FLAG))
+                newCalloutProperties.verticalPosition = callout.verticalPosition;
+            
+            calloutProperties = newCalloutProperties;
+        }
+        
+        super.partRemoved(partName, instance);
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Initializes the dropDown and changes the skin state to open. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */ 
+    public function openDropDown():void
+    {
+        dropDownController.openDropDown();
+    }
+    
+    /**
+     *  Changes the skin state to normal.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function closeDropDown():void
+    {
+        dropDownController.closeDropDown(false);
+    }
+    
+    /**
+     *  @private
+     *  Destroys the callout 
+     */
+    private function destroyCallout():void
+    {
+        removeDynamicPartInstance("dropDown", callout);
+        setCallout(null);
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     *  Event handler for the <code>dropDownController</code> 
+     *  <code>DropDownEvent.OPEN</code> event. Creates and opens the Callout.
+     */
+    mx_internal function dropDownController_openHandler(event:DropDownEvent):void
+    {
+        if (!callout)
+            setCallout(createDynamicPartInstance("dropDown") as Callout);
+        
+        if (callout)
+        {
+            // close the callout if the CalloutButton is removed
+            addEventListener(Event.REMOVED_FROM_STAGE, button_removedFromStage);
+            
+            callout.open(this, false);
+        }
+    }
+    
+    /**
+     *  @private
+     *  Event handler for the <code>dropDownController</code> 
+     *  <code>DropDownEvent.CLOSE</code> event. Closes the Callout.
+     */
+    mx_internal function dropDownController_closeHandler(event:DropDownEvent):void
+    {
+        // If the callout was closed directly, then callout could already be
+        // destroyed by calloutDestructionPolicy
+        if (callout)
+        {
+            removeEventListener(Event.REMOVED_FROM_STAGE, button_removedFromStage);
+            
+            // Dispatch the close event after the callout's PopUpEvent.CLOSE fires
+            callout.close();
+        }
+    }
+    
+    /**
+     *  @private
+     */
+    private function callout_openHandler(event:PopUpEvent):void
+    {
+        dispatchEvent(new DropDownEvent(DropDownEvent.OPEN));
+    }
+    
+    /**
+     *  @private
+     */
+    private function callout_closeHandler(event:PopUpEvent):void
+    {
+        // Sanity check. Was callout closed without calling closeDropDown()? 
+        // If so, call closeDropDown directly to remove event listeners. This 
+        // callout_closeHandler will only be called once since the 2nd call
+        // to close() in dropDownController_closeHandler() will not dispatch
+        // another PopUpEvent.CLOSE.
+        if (dropDownController.isOpen)
+            closeDropDown();
+        
+        if (calloutDestructionPolicy == ContainerDestructionPolicy.AUTO)
+            destroyCallout();
+        
+        dispatchEvent(new DropDownEvent(DropDownEvent.CLOSE));
+    }
+    
+    /**
+     *  @private
+     */
+    private function button_removedFromStage(event:Event):void
+    {
+        if (!isDropDownOpen)
+            return;
+        
+        // Hide the callout immediately instead of waiting for the skin
+        // state to transition to "closed"
+        callout.visible = false;
+
+        closeDropDown();
+    }
+}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/CalloutPosition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/CalloutPosition.as b/frameworks/projects/spark/src/spark/components/CalloutPosition.as
new file mode 100644
index 0000000..a0b6e7d
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/CalloutPosition.as
@@ -0,0 +1,96 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+
+/**
+ *  The CalloutPosition calss defines the enumeration of 
+ *  horizontal and vertical positions of the Callout component
+ *  relative to the owner.
+ * 
+ *  @see spark.components.Callout
+ *  @see spark.components.Callout#horizontalPosition
+ *  @see spark.components.Callout#verticalPosition
+ * 
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public final class CalloutPosition
+{
+    
+    /**
+     *  Position the trailing edge of the callout before the leading edge of the owner.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const BEFORE:String = "before";
+    
+    /**
+     *  Position the leading edge of the callout at the leading edge of the owner.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const START:String = "start";
+    
+    /**
+     *  Position the horizontalCenter of the callout to the horizontalCenter of the owner.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const MIDDLE:String = "middle";
+    
+    /**
+     *  Position the trailing edge of the callout at the trailing edge of the owner.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const END:String = "end";
+    
+    /**
+     *  Position the leading edge of the callout after the trailing edge of the owner.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const AFTER:String = "after";
+    
+    /**
+     *  Position the callout on the exterior of the owner where the callout 
+     *  requires the least amount of resizing to fit.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const AUTO:String = "auto";
+    
+}
+
+}
\ No newline at end of file


[22/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - FLEX-33807 fixed parsing of dates with no seperators

Posted by jm...@apache.org.
FLEX-33807 fixed parsing of dates with no seperators


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/7639423c
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/7639423c
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/7639423c

Branch: refs/heads/release4.11.0
Commit: 7639423c798492a4673f32a73e333a9cea75163a
Parents: 6cf64f2
Author: Justin Mclean <jm...@apache.org>
Authored: Wed Oct 9 02:11:08 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Wed Oct 9 02:11:08 2013 +1100

----------------------------------------------------------------------
 .../framework/src/mx/validators/DateValidator.as         | 11 +++++++++++
 1 file changed, 11 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/7639423c/frameworks/projects/framework/src/mx/validators/DateValidator.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/framework/src/mx/validators/DateValidator.as b/frameworks/projects/framework/src/mx/validators/DateValidator.as
index b082502..89138cc 100644
--- a/frameworks/projects/framework/src/mx/validators/DateValidator.as
+++ b/frameworks/projects/framework/src/mx/validators/DateValidator.as
@@ -173,6 +173,7 @@ public class DateValidator extends Validator
 		
 		var part:int = -1;
 		var lastFormatChar:String = "";
+		var noSeperators:Boolean = true;
 		
 		n = inputFormat.length;
 		for (i = 0; i < n; i++)
@@ -209,6 +210,7 @@ public class DateValidator extends Validator
 			}
 			else
 			{
+				noSeperators = false;
 				formatParts[part] = formatChar;
 			}
 			
@@ -318,6 +320,7 @@ public class DateValidator extends Validator
 			else
 			{
 				var lastStringChar:String = "";
+				lastFormatChar = "";
 				n = stringValue.length;
 				part = -1;
 				for (i = 0; i < n; i++)
@@ -327,6 +330,7 @@ public class DateValidator extends Validator
 						&& (lastStringChar != "");
 					var curentIsDigit:Boolean = (DECIMAL_DIGITS.indexOf(stringChar) >= 0);
 					
+					formatChar = inputFormat.charAt(i);
 					if (validInput.indexOf(stringChar) == -1)
 					{
 						results.push(new ValidationResult(
@@ -339,12 +343,19 @@ public class DateValidator extends Validator
 						part++;
 						dateParts[part] = stringChar;
 					}
+					//  TODO will only work if month and day are not specified as single digits
+					else if (lastFormatChar != formatChar && noSeperators)
+					{
+						part++;
+						dateParts[part] = stringChar;
+					}
 					else
 					{
 						dateParts[part] += stringChar;
 					}
 
 					lastStringChar = stringChar;
+					lastFormatChar = formatChar;
 				}
 				
 				if (formatParts.length != dateParts.length)


[21/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - https://issues.apache.org/jira/browse/FLEX-33777 Dagrid for mobile - fixed manifest files missing ids - fixed missing experimental-mobile-manifest.xml file in framework root - fixed airmobile-co

Posted by jm...@apache.org.
https://issues.apache.org/jira/browse/FLEX-33777 Dagrid for mobile
- fixed manifest files missing ids
- fixed missing experimental-mobile-manifest.xml file in framework root
- fixed airmobile-config.xml and airconfig.xml missing manifest references


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/6cf64f2f
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/6cf64f2f
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/6cf64f2f

Branch: refs/heads/release4.11.0
Commit: 6cf64f2fe46469f91a413274f7298f81b75c9849
Parents: c1a3874
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 15:18:59 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 15:18:59 2013 +0200

----------------------------------------------------------------------
 frameworks/air-config.xml                       | 18 +++++++++----
 frameworks/airmobile-config.xml                 | 18 +++++++++----
 frameworks/experimental-mobile-manifest.xml     | 28 ++++++++++++++++++++
 .../projects/experimental_mobile/build.xml      |  6 ++++-
 .../projects/experimental_mobile/manifest.xml   |  8 +++---
 5 files changed, 63 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6cf64f2f/frameworks/air-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/air-config.xml b/frameworks/air-config.xml
index eeb2950..70ea434 100644
--- a/frameworks/air-config.xml
+++ b/frameworks/air-config.xml
@@ -103,6 +103,14 @@
             <uri>http://www.adobe.com/2006/mxml</uri>
             <manifest>mxml-manifest.xml</manifest>
          </namespace>
+         <namespace>
+            <uri>http://flex.apache.org/ns</uri>
+            <manifest>apache-manifest.xml</manifest>
+         </namespace>
+         <namespace>
+            <uri>http://flex.apache.org/experimental/ns</uri>
+            <manifest>experimental-manifest.xml</manifest>
+         </namespace>
       </namespaces>
       
       <!-- Enable post-link SWF optimization. -->
@@ -425,11 +433,11 @@
    
    <!-- Metadata added to SWFs via the SWF Metadata tag. -->
    <metadata>
-      <title>Apache Flex 4 Application</title>
-      <description>http://www.adobe.com/products/flex</description>
-      <publisher>Apache Software Founcation</publisher>
-      <creator>unknown</creator>
-      <language>EN</language>
+      <title>Apache Flex Application</title>
+      <description>http://flex.apache.org/</description>
+      <publisher>Apache Software Foundation</publisher>
+      <creator>Apache Software Foundation</creator>
+      <language>en_US</language>
    </metadata>
 
 </flex-config>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6cf64f2f/frameworks/airmobile-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/airmobile-config.xml b/frameworks/airmobile-config.xml
index 60e4f16..a93546b 100644
--- a/frameworks/airmobile-config.xml
+++ b/frameworks/airmobile-config.xml
@@ -97,6 +97,14 @@
             <uri>library://ns.adobe.com/flex/spark</uri>
             <manifest>spark-manifest.xml</manifest>
          </namespace>
+         <namespace>
+            <uri>http://flex.apache.org/ns</uri>
+            <manifest>apache-manifest.xml</manifest>
+         </namespace>
+         <namespace>
+            <uri>http://flex.apache.org/experimental/ns</uri>
+            <manifest>experimental-mobile-manifest.xml</manifest>
+         </namespace>
       </namespaces>
       
       <!-- Enable post-link SWF optimization. -->
@@ -347,11 +355,11 @@
    
    <!-- Metadata added to SWFs via the SWF Metadata tag. -->
    <metadata>
-      <title>Adobe Flex 4 Application</title>
-      <description>http://www.adobe.com/products/flex</description>
-      <publisher>unknown</publisher>
-      <creator>unknown</creator>
-      <language>EN</language>
+      <title>Apache Flex Application</title>
+      <description>http://flex.apache.org/</description>
+      <publisher>Apache Software Foundation</publisher>
+      <creator>Apache Software Foundation</creator>
+      <language>en_US</language>
    </metadata>
 
 </flex-config>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6cf64f2f/frameworks/experimental-mobile-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/experimental-mobile-manifest.xml b/frameworks/experimental-mobile-manifest.xml
new file mode 100644
index 0000000..68e38b8
--- /dev/null
+++ b/frameworks/experimental-mobile-manifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<!--
+
+  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.
+-->
+
+<!--
+    Experimental Mobile Components
+-->
+<componentPackage>
+    <component id="MobileGrid" class="spark.components.MobileGrid"/>
+    <component id="MobileGridColumn" class="spark.components.supportClasses.MobileGridColumn"/>
+    <component id="MobileGridBitmapCellRenderer" class="spark.components.itemRenderers.MobileGridBitmapCellRenderer"/>
+    <component id="MobileGridTextCellRenderer" class="spark.components.itemRenderers.MobileGridTextCellRenderer"/>
+</componentPackage>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6cf64f2f/frameworks/projects/experimental_mobile/build.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/build.xml b/frameworks/projects/experimental_mobile/build.xml
index 735e5e2..03a9749 100644
--- a/frameworks/projects/experimental_mobile/build.xml
+++ b/frameworks/projects/experimental_mobile/build.xml
@@ -159,7 +159,11 @@
 		</delete>
 	</target>
 
-	<target name="compile" description="Compiles experimental_mobile.swc">
+    <target name="prepare" description="Copies manifests to project directories so the IDE can find them">
+        <copy file="${FLEX_HOME}/frameworks/experimental-mobile-manifest.xml" tofile="${basedir}/manifest.xml" overwrite="true"/>
+    </target>
+
+	<target name="compile" depends="prepare" description="Compiles experimental_mobile.swc">
 		<echo message="Compiling frameworks/libs/experimental_mobile.swc"/>
         <echo message="Using ${env.AIR_HOME}/frameworks/libs/air/airglobal.swc" level="info"/>
 

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6cf64f2f/frameworks/projects/experimental_mobile/manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental_mobile/manifest.xml b/frameworks/projects/experimental_mobile/manifest.xml
index e4762f6..68e38b8 100644
--- a/frameworks/projects/experimental_mobile/manifest.xml
+++ b/frameworks/projects/experimental_mobile/manifest.xml
@@ -21,8 +21,8 @@
     Experimental Mobile Components
 -->
 <componentPackage>
-    <component class="spark.components.MobileGrid"/>
-    <component class="spark.components.supportClasses.MobileGridColumn"/>
-    <component class="spark.components.itemRenderers.MobileGridBitmapCellRenderer"/>
-    <component class="spark.components.itemRenderers.MobileGridTextCellRenderer"/>
+    <component id="MobileGrid" class="spark.components.MobileGrid"/>
+    <component id="MobileGridColumn" class="spark.components.supportClasses.MobileGridColumn"/>
+    <component id="MobileGridBitmapCellRenderer" class="spark.components.itemRenderers.MobileGridBitmapCellRenderer"/>
+    <component id="MobileGridTextCellRenderer" class="spark.components.itemRenderers.MobileGridTextCellRenderer"/>
 </componentPackage>


[25/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge commit '7639423c798492a4673f32a73e333a9cea75163a' into release4.11.0

Posted by jm...@apache.org.
Merge commit '7639423c798492a4673f32a73e333a9cea75163a' into release4.11.0


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/4e004f50
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/4e004f50
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/4e004f50

Branch: refs/heads/release4.11.0
Commit: 4e004f508f6b33bd23bbae57a053727c69b9e3a9
Parents: a98f604 7639423
Author: Justin Mclean <jm...@apache.org>
Authored: Wed Oct 9 02:20:10 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Wed Oct 9 02:20:10 2013 +1100

----------------------------------------------------------------------
 frameworks/air-config.xml                       |   18 +-
 frameworks/airmobile-config.xml                 |   18 +-
 frameworks/experimental-mobile-manifest.xml     |   28 +
 .../projects/experimental/compile-config.xml    |    2 +-
 frameworks/projects/experimental/manifest.xml   |    4 -
 .../experimental/src/ExperimentalClasses.as     |    3 -
 .../experimental/src/spark/components/Alert.as  |    3 +
 .../src/spark/components/ArrowDirection.as      |   83 -
 .../src/spark/components/BorderDataNavigator.as |    3 +
 .../src/spark/components/CallOut.as             | 1558 ----------------
 .../src/spark/components/CallOutButton.as       |  359 ----
 .../src/spark/components/CallOutPosition.as     |   93 -
 .../src/spark/components/ColorPicker.as         |    5 +-
 .../src/spark/components/DataAccordion.as       |    8 +-
 .../src/spark/components/DataNavigator.as       |    9 +-
 .../src/spark/components/DataNavigatorGroup.as  |    5 +-
 .../src/spark/components/InlineScroller.as      |    7 +-
 .../experimental/src/spark/components/Menu.as   |    5 +-
 .../src/spark/components/MenuBar.as             |    5 +-
 .../src/spark/components/ProgressBar.as         |    5 +-
 .../src/spark/containers/Accordion.as           |    7 +-
 .../src/spark/containers/DeferredGroup.as       |    7 +-
 .../src/spark/containers/DividedGroup.as        |    5 +-
 .../src/spark/containers/Divider.as             |    6 +-
 .../src/spark/containers/HDividerGroup.as       |    6 +-
 .../src/spark/containers/Navigator.as           |    9 +-
 .../src/spark/containers/NavigatorGroup.as      |    6 +-
 .../src/spark/containers/VDividerGroup.as       |    6 +-
 .../supportClasses/DeferredCreationPolicy.as    |    6 +-
 .../src/spark/events/ColorChangeEvent.as        |    6 +-
 .../experimental/src/spark/events/MenuEvent.as  |    5 +-
 .../src/spark/layouts/AccordionLayout.as        |    7 +-
 .../src/spark/layouts/CarouselLayout.as         |    5 +-
 .../src/spark/layouts/CoverflowLayout.as        |    7 +-
 .../src/spark/layouts/InlineScrollerLayout.as   |    7 +-
 .../src/spark/layouts/RolodexLayout.as          |    5 +-
 .../src/spark/layouts/StackLayout.as            |    7 +-
 .../src/spark/layouts/TimeMachineLayout.as      |    5 +-
 .../AnimationNavigatorLayoutBase.as             |    5 +-
 .../layouts/supportClasses/INavigatorLayout.as  |    5 +-
 .../spark/layouts/supportClasses/LayoutAxis.as  |    6 +-
 .../supportClasses/NavigatorLayoutBase.as       |    8 +-
 .../PerspectiveAnimationNavigatorLayoutBase.as  |    5 +-
 .../PerspectiveNavigatorLayoutBase.as           |    5 +-
 .../spark/managers/INavigatorBrowserManager.as  |    5 +-
 .../spark/managers/NavigatorBrowserManager.as   |    7 +-
 .../managers/NavigatorBrowserManagerImpl.as     |    5 +-
 .../src/spark/supportClasses/INavigator.as      |    7 +-
 .../src/spark/utils/ColorPickerUtil.as          |    6 +-
 .../projects/experimental_mobile/build.xml      |    6 +-
 .../experimental_mobile/compile-config.xml      |    2 +-
 .../projects/experimental_mobile/manifest.xml   |    8 +-
 .../itemRenderers/IMobileGridCellRenderer.as    |    2 +
 .../IMobileGridTextCellRenderer.as              |    2 +
 .../MobileGridBitmapCellRenderer.as             |    2 +
 .../itemRenderers/MobileGridTextCellRenderer.as |    2 +
 .../supportClasses/ListMultiPartColumnLayout.as |    3 +
 .../supportClasses/MobileGridColumn.as          |    2 +
 .../supportClasses/MobileGridHeader.as          |    3 +
 .../supportClasses/MobileGridRowRenderer.as     |    3 +
 .../src/spark/events/MobileGridHeaderEvent.as   |    2 +
 .../src/spark/layouts/MobileGridLayout.as       |    2 +
 .../src/spark/utils/MobileGridUtil.as           |    4 +-
 .../src/mx/validators/DateValidator.as          |   11 +
 .../projects/mobilecomponents/manifest.xml      |    2 -
 .../src/MobileComponentsClasses.as              |    2 +-
 .../src/MobileComponentsClassesAIR2.as          |    1 -
 .../src/spark/components/ArrowDirection.as      |   84 -
 .../src/spark/components/Callout.as             | 1669 -----------------
 .../src/spark/components/Callout.png            |  Bin 410 -> 0 bytes
 .../src/spark/components/CalloutButton.as       |  807 ---------
 .../src/spark/components/CalloutPosition.as     |   96 -
 .../components/ContentBackgroundAppearance.as   |   72 -
 .../spark/core/ContainerDestructionPolicy.as    |   62 -
 .../src/spark/skins/mobile/CalloutSkin.as       |    4 +
 .../skins/mobile/supportClasses/CalloutArrow.as |   20 +-
 .../skins/mobile/supportClasses/MobileSkin.as   |  756 +-------
 frameworks/projects/spark/defaults.css          |   10 +
 frameworks/projects/spark/src/SparkClasses.as   |    4 +
 .../src/spark/components/ArrowDirection.as      |   90 +
 .../spark/src/spark/components/Callout.as       | 1701 ++++++++++++++++++
 .../spark/src/spark/components/Callout.png      |  Bin 0 -> 410 bytes
 .../spark/src/spark/components/CalloutButton.as |  821 +++++++++
 .../src/spark/components/CalloutPosition.as     |  103 ++
 .../components/ContentBackgroundAppearance.as   |   72 +
 .../spark/core/ContainerDestructionPolicy.as    |   62 +
 .../src/spark/skins/ActionScriptSkinBase.as     |  853 +++++++++
 .../spark/src/spark/skins/spark/CalloutSkin.as  |  744 ++++++++
 .../spark/assets/CalloutContentBackground.fxg   |   51 +
 .../skins/spark/supportClasses/CalloutArrow.as  |  424 +++++
 frameworks/spark-manifest.xml                   |    2 +
 mustella/patch_testing_loop.sh                  |   35 +
 mustella/run_mustella_on_git_status.sh          |   37 +
 mustella/test_patch.sh                          |   59 +
 mustella/test_patch_by_email.sh                 |   58 +
 patch_testing_loop.sh                           |   33 -
 run_mustella_on_git_status.sh                   |   35 -
 test_patch.sh                                   |   57 -
 test_patch_by_email.sh                          |   56 -
 99 files changed, 5415 insertions(+), 5918 deletions(-)
----------------------------------------------------------------------



[23/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - added mention of 11.9 beta support

Posted by jm...@apache.org.
added mention of 11.9 beta support


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/9b9332b2
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/9b9332b2
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/9b9332b2

Branch: refs/heads/release4.11.0
Commit: 9b9332b2cc4c2ea0b64729949f930494ffb9ad69
Parents: 28ba4b7
Author: Justin Mclean <jm...@apache.org>
Authored: Wed Oct 9 02:16:16 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Wed Oct 9 02:16:16 2013 +1100

----------------------------------------------------------------------
 README | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9b9332b2/README
----------------------------------------------------------------------
diff --git a/README b/README
index 6b8c699..2ed02f9 100644
--- a/README
+++ b/README
@@ -72,6 +72,8 @@ Getting the latest sources via git
     use the following command:
 
 	 git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git tlf
+	 cd tlf
+	 git checkout develop
 
     In an Apache Flex source code package hosted on the distribution server or
     one of its mirrors, the Text Layout Framework code is already included in
@@ -174,7 +176,7 @@ Install Prerequisites
 
         This version of Apache Flex was certified for use with AIR 3.8, and should
         be compatible with other versions of AIR newer than 3.1. However it hasn't
-        been tested on AIR 3.2, 3.3, 3.5, 3.6 or 3.7.
+        been fully tested on AIR 3.2, 3.3, 3.5, 3.6 or 3.7.
 
         Download the AIR SDK for your platform and unzip it. Set AIR_HOME to the
         absolute path of the AIR SDK directory.
@@ -183,10 +185,10 @@ Install Prerequisites
             http://www.adobe.com/support/flashplayer/downloads.html
 
         This version of Apache Flex was certified for use with Adobe Flash Player 11.1,
-        and is compatible with versions 10.2 through 11.8. It has been tested with
-        versions 11.1, 11.7 and 11.8 on Windows and Mac. It has been compiled against
-        other Adobe Flash Player versions but has not been fully tested. It has not been
-        fully tested on Linux.
+        and is compatible with versions 10.2 through 11.9 beta. It has been tested with
+        versions 11.1, 11.7, 11.8 and 11.9 beta on Windows and Mac. It has been compiled
+        against other Adobe Flash Player versions but has not been fully tested. It has
+        not been fully tested on Linux.
             
         On Windows, set FLASHPLAYER_DEBUGGER to the absolute path including the filename
         of the FlashPlayerDebugger.exe. Note the filename of flash player debugger maybe
@@ -232,6 +234,7 @@ Install Prerequisites
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_6.swc
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_7.swc
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_8.swc
+            http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer11-9_playerglobal.swc
             
         These can be used with Apache Flex but have not been fully tested.
         
@@ -302,7 +305,7 @@ Adobe Flash Player Version Support
 
     The Apache Flex SDK defaults to using the Adobe Flash Player 11.1. The SDK can be
     used with Flash Player versions 10.2, 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 11.5,
-    11.6, 11.7 and 11.8.
+    11.6, 11.7, 11.8 and 11.9 beta.
     
     It is recommended that you update to the latest version of Adobe Flash Player.
     Newer versions of the Adobe Flash player address security vulnerabilities, fix
@@ -344,6 +347,7 @@ Adobe Flash Player Version Support
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_6.swc
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_7.swc
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_8.swc
+    http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer11-9_playerglobal.swc
     
     Copy the target playerglobal.swc to the directory:
     
@@ -380,9 +384,12 @@ Adobe Flash Player Version Support
                          /playerglobal.swc 
                     /11.8
                          /playerglobal.swc  
+                    /11.9
+                         /playerglobal.swc  
+    
+    Apache Flex has been tested with Adobe Flash Player 11.1, 11.5, 11.7, 11.8 and
+    11.9 beta on Windows and Mac.
     
-    Apache Flex has been tested with Adobe Flash Player 11.1, 11.5, 11.7 and 11.8 on
-    Windows and Mac.
     Apache Flex has not been tested on Linux so some issue may exist in this release.
     
     It compiles against other Adobe Flash Player versions and is expected to work but


[06/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into develop

Posted by jm...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into develop


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/6e0cb6c1
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/6e0cb6c1
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/6e0cb6c1

Branch: refs/heads/release4.11.0
Commit: 6e0cb6c10e1dc370f49ea43ce419b2e5555616f8
Parents: 05ae41d acc1b96
Author: mamsellem <ma...@systar.com>
Authored: Mon Oct 7 21:36:44 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Mon Oct 7 21:36:44 2013 +0200

----------------------------------------------------------------------
 RELEASE_NOTES                                   | 12 ++-
 build/check_sigs.sh                             | 77 ++++++++++++++++++
 build/deploy_release_candidate.sh               | 82 ++++++++++++++++++++
 build/make_release_branch.sh                    | 49 ++++++++++++
 build/tag_release_candidate.sh                  | 47 +++++++++++
 frameworks/downloads.xml                        | 26 ++-----
 .../itemRenderers/MenuBarItemRenderer.mxml      | 41 +++++-----
 .../itemRenderers/MenuCoreItemRenderer.as       |  2 +
 .../itemRenderers/MenuItemRenderer.mxml         | 41 +++++-----
 .../experimental/src/spark/skins/AlertSkin.mxml | 41 +++++-----
 .../src/spark/skins/ColorPickerButtonSkin.mxml  | 41 +++++-----
 .../src/spark/skins/ColorPickerSkin.mxml        | 42 +++++-----
 .../src/spark/skins/MenuBarSkin.mxml            | 41 +++++-----
 .../experimental/src/spark/skins/MenuSkin.mxml  | 41 +++++-----
 .../src/spark/skins/ProgressBarSkin.mxml        | 41 +++++-----
 15 files changed, 434 insertions(+), 190 deletions(-)
----------------------------------------------------------------------



[02/25] temp commit move experimental callout to spark

Posted by jm...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/components/ContentBackgroundAppearance.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/ContentBackgroundAppearance.as b/frameworks/projects/spark/src/spark/components/ContentBackgroundAppearance.as
new file mode 100644
index 0000000..13f0f0a
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/components/ContentBackgroundAppearance.as
@@ -0,0 +1,72 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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
+{
+
+/**
+ *  The ContentBackgroundAppearance class defines the constants for the
+ *  allowed values of the <code>contentBackgroundAppearance</code> style of 
+ *  Callout.
+ * 
+ *  @see spark.components.Callout#style:contentBackgroundAppearance
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public final class ContentBackgroundAppearance
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Applies a shadow and mask to the contentGroup.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const INSET:String = "inset";
+    
+    /**
+     *  Applies mask to the contentGroup.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const FLAT:String = "flat";
+    
+    /**
+     *  Disables both the <code>contentBackgroundColor</code> style and
+     *  contentGroup masking. Use this value when Callout's contents should
+     *  appear directly on top of the <code>backgroundColor</code> or when
+     *  contents provide their own masking. 
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public static const NONE:String = "none";
+}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/projects/spark/src/spark/core/ContainerDestructionPolicy.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/core/ContainerDestructionPolicy.as b/frameworks/projects/spark/src/spark/core/ContainerDestructionPolicy.as
new file mode 100644
index 0000000..2ae91f1
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/core/ContainerDestructionPolicy.as
@@ -0,0 +1,62 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.core
+{
+/**
+ *  The ContainerCreationPolicy class defines the constant values
+ *  for the <code>destructionPolicy</code> property of spark view
+ *  classes.
+ *
+ *  @see spark.components.supportClasses.ViewNavigatorBase#destructionPolicy
+ *  @see spark.components.View#destructionPolicy
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
+ */
+public final class ContainerDestructionPolicy
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  The lifespan of the container's children is automatically
+     *  managed by the container based on the container's own
+     *  heuristic.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public static const AUTO:String = "auto";
+    
+    /**
+     *  The container never destroys its children.
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public static const NEVER:String = "never";
+}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0d6e7b32/frameworks/spark-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/spark-manifest.xml b/frameworks/spark-manifest.xml
index 5574a7d..5ae7f02 100644
--- a/frameworks/spark-manifest.xml
+++ b/frameworks/spark-manifest.xml
@@ -53,6 +53,8 @@
     <component id="ButtonBarHorizontalLayout" class="spark.components.supportClasses.ButtonBarHorizontalLayout"/>
     <component id="ButtonBase" class="spark.components.supportClasses.ButtonBase"/>
     <component id="CallAction" class="spark.effects.CallAction"/>
+	<component id="Callout" class="spark.components.Callout"/>
+    <component id="CalloutButton" class="spark.components.CalloutButton"/>
     <component id="CellPosition" class="spark.components.gridClasses.CellPosition"/>
     <component id="CellRegion" class="spark.components.gridClasses.CellRegion"/>
     <component id="CheckBox" class="spark.components.CheckBox"/>


[13/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into callout FIXED https://issues.apache.org/jira/browse/FLEX-33350 - remove redundant experimental Callout and related

Posted by jm...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into callout
FIXED https://issues.apache.org/jira/browse/FLEX-33350
- remove redundant experimental Callout and related classes


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/086add29
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/086add29
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/086add29

Branch: refs/heads/release4.11.0
Commit: 086add29146e95c00748305edc1cace06959a4d9
Parents: 891df75
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 02:38:24 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 02:38:24 2013 +0200

----------------------------------------------------------------------
 frameworks/projects/experimental/manifest.xml   |    4 -
 .../experimental/src/ExperimentalClasses.as     |    3 -
 .../src/spark/components/ArrowDirection.as      |   85 -
 .../src/spark/components/CallOut.as             | 1561 ------------------
 .../src/spark/components/CallOutButton.as       |  362 ----
 .../src/spark/components/CallOutPosition.as     |   96 --
 6 files changed, 2111 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/manifest.xml b/frameworks/projects/experimental/manifest.xml
index 68c6b42..062072f 100644
--- a/frameworks/projects/experimental/manifest.xml
+++ b/frameworks/projects/experimental/manifest.xml
@@ -35,10 +35,6 @@
     <component id="DataNavigatorGroup" class="spark.components.DataNavigatorGroup"/>
     <!-- InlineScroller -->
     <component id="InlineScroller" class="spark.components.InlineScroller"/>
-    <!-- CallOut -->
-    <component id="CallOut" class="spark.components.CallOut"/>
-    <!-- CallOutButton -->
-    <component id="CallOutButton" class="spark.components.CallOutButton"/>
     <!-- ColorPicker -->
     <component id="ColorPicker" class="spark.components.ColorPicker"/>
     <!-- Menu -->

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/src/ExperimentalClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/ExperimentalClasses.as b/frameworks/projects/experimental/src/ExperimentalClasses.as
index 21d4304..8cb3fe1 100644
--- a/frameworks/projects/experimental/src/ExperimentalClasses.as
+++ b/frameworks/projects/experimental/src/ExperimentalClasses.as
@@ -27,8 +27,6 @@ package
 		 *  from the classes specified in manifest.xml.
 		 */
 		import spark.components.Alert; Alert;
-		import spark.components.CallOutPosition; CallOutPosition;
-		import spark.components.ArrowDirection; ArrowDirection;
 		import spark.components.itemRenderers.MenuBarItemRenderer; MenuBarItemRenderer;
 		import spark.components.itemRenderers.MenuCoreItemRenderer; MenuCoreItemRenderer;
 		import spark.components.itemRenderers.MenuItemRenderer; MenuItemRenderer;
@@ -67,7 +65,6 @@ package
 		import spark.skins.ProgressBarSkin; ProgressBarSkin;
 		import spark.skins.TabNavigatorSkin; TabNavigatorSkin;
 		import spark.skins.VNoTrackNoThumbScrollBarSkin; VNoTrackNoThumbScrollBarSkin;
-		import spark.skins.spark.CallOutSkin; CallOutSkin;
 		import spark.supportClasses.INavigator; INavigator;
 		import spark.utils.ColorPickerUtil; ColorPickerUtil;
 	}

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/ArrowDirection.as b/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
deleted file mode 100644
index 4c4d8ac..0000000
--- a/frameworks/projects/experimental/src/spark/components/ArrowDirection.as
+++ /dev/null
@@ -1,85 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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
-{
-   // for asdoc
-  [Experimental]
-	/**
-	 *  Enumeration of arrow directions for use in visual components.
-	 * 
-	 *  @see spark.components.Callout#arrowDirection
-	 * 
-	 *  @langversion 3.0
-	 *  @playerversion AIR 3
-	 *  @productversion Flex 4.6
-	 */
-	public class ArrowDirection
-	{
-		//--------------------------------------------------------------------------
-		//
-		//  Class constants
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  Arrow points right.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const RIGHT:String = "right";
-		
-		/**
-		 *  Arrow points up.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const UP:String = "up";
-		
-		/**
-		 *  Arrow points left.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const LEFT:String = "left";
-		
-		/**
-		 *  Arrow points down.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const DOWN:String = "down";
-		
-		/**
-		 *  No arrow direciton.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const NONE:String = "none";
-	}
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/src/spark/components/CallOut.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOut.as b/frameworks/projects/experimental/src/spark/components/CallOut.as
deleted file mode 100644
index e216259..0000000
--- a/frameworks/projects/experimental/src/spark/components/CallOut.as
+++ /dev/null
@@ -1,1561 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.display.DisplayObject;
-	import flash.display.DisplayObjectContainer;
-	import flash.events.Event;
-	import flash.geom.ColorTransform;
-	import flash.geom.Matrix;
-	import flash.geom.Point;
-	import flash.geom.Rectangle;
-	
-	import mx.core.ILayoutElement;
-	import mx.core.LayoutDirection;
-	import mx.core.UIComponent;
-	import mx.core.mx_internal;
-	import mx.managers.SystemManager;
-	import mx.utils.MatrixUtil;
-	import mx.utils.PopUpUtil;
-	
-	import spark.components.SkinnablePopUpContainer;
-	
-	
-	use namespace mx_internal;
-
-    // for asdoc
-    [Experimental]
-	
-	//--------------------------------------
-	//  Styles
-	//--------------------------------------
-	
-	/**
-	 *  Appearance of the <code>contentGroup</code>. 
-	 *  Valid MXML values are <code>inset</code>, 
-	 *  <code>flat</code>, and <code>none</code>.
-	 *
-	 *  <p>In ActionScript, you can use the following constants
-	 *  to set this property:
-	 *  <code>ContentBackgroundAppearance.INSET</code>,
-	 *  <code>ContentBackgroundAppearance.FLAT</code> and
-	 *  <code>ContentBackgroundAppearance.NONE</code>.</p>
-	 *
-	 *  @default ContentBackgroundAppearance.INSET
-	 *  
-	 *  @langversion 3.0
-	 *  @playerversion AIR 3
-	 *  @productversion Flex 4.6
-	 */ 
-	[Style(name="contentBackgroundAppearance", type="String", enumeration="inset,flat,none", inherit="no")]
-	
-	public class CallOut extends SkinnablePopUpContainer
-	{
-		//--------------------------------------------------------------------------
-		//
-		//  Class constants
-		//
-		//--------------------------------------------------------------------------
-		
-		private static var decomposition:Vector.<Number> = new <Number>[0,0,0,0,0];
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Constructor
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  Constructor.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function CallOut()
-		{
-			super();
-		}
-		
-		/*
-		override protected function createChildren():void
-		{
-			super.createChildren();
-			
-			arrow			= new CallOutArrow();
-			arrow.visible	= false;
-			
-			this.addElement(arrow);
-		}
-		*/
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Skin parts
-		//
-		//--------------------------------------------------------------------------
-		
-		//[Bindable]
-		// [SkinPart(required="false")]
-		/**
-		 *  An optional skin part that visually connects the owner to the
-		 *  contentGroup.
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		//public var arrow:CallOutArrow;
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Variables
-		//
-		//--------------------------------------------------------------------------
-		
-		private var invalidatePositionFlag:Boolean = false;
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Properties
-		//
-		//--------------------------------------------------------------------------
-		
-		//----------------------------------
-		//  horizontalPosition
-		//----------------------------------
-		
-		private var _horizontalPosition:String = CallOutPosition.AUTO;
-		
-		[Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-		
-		/**
-		 *  Horizontal position of the callout relative to the owner.
-		 *
-		 *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
-		 *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
-		 *  and <code>"auto"</code> (default).</p>
-		 *
-		 *  @default CalloutPosition.AUTO
-		 *  @see spark.components.CalloutPosition
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function get horizontalPosition():String
-		{
-			return _horizontalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		public function set horizontalPosition(value:String):void
-		{
-			if (value == _horizontalPosition)
-				return;
-			
-			_horizontalPosition = value;
-			
-			invalidatePosition();
-		}
-		
-		//----------------------------------
-		//  actualHorizontalPosition
-		//----------------------------------
-		
-		private var _actualHorizontalPosition:String;
-		
-		/**
-		 *  Fully resolved horizontal position after evaluating CalloutPosition.AUTO.
-		 * 
-		 *  <p>Update this property in <code>commitProperties()</code> when the
-		 *  explicit <code>horizontalPosition</code> is CalloutPosition.AUTO. 
-		 *  This property must be updated in <code>updatePopUpPosition()</code>
-		 *  when attempting to reposition the Callout.</p> 
-		 *  
-		 *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
-		 *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		mx_internal function get actualHorizontalPosition():String
-		{
-			if (_actualHorizontalPosition)
-				return _actualHorizontalPosition;
-			
-			return horizontalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function set actualHorizontalPosition(value:String):void
-		{
-			_actualHorizontalPosition = value;
-		}
-		
-		//----------------------------------
-		//  verticalPosition
-		//----------------------------------
-		
-		private var _verticalPosition:String = CallOutPosition.AUTO;
-		
-		[Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-		
-		/**
-		 *  Vertical position of the callout relative to the owner.
-		 *
-		 *  <p>Possible values are <code>"before"</code>, <code>"start"</code>,
-		 *  <code>"middle"</code>, <code>"end"</code>, <code>"after"</code>,
-		 *  and <code>"auto"</code> (default).</p>
-		 *
-		 *  @default CalloutPosition.AUTO
-		 *  @see spark.components.CalloutPosition
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function get verticalPosition():String
-		{
-			return _verticalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		public function set verticalPosition(value:String):void
-		{
-			if (value == _verticalPosition)
-				return;
-			
-			_verticalPosition = value;
-			
-			invalidatePosition();
-		}
-		
-		//----------------------------------
-		//  actualVerticalPosition
-		//----------------------------------
-		
-		private var _actualVerticalPosition:String;
-		
-		/**
-		 *  Fully resolved vertical position after evaluating CalloutPosition.AUTO.
-		 * 
-		 *  <p>Update this property in <code>commitProperties()</code> when the
-		 *  explicit <code>verticalPosition</code> is CalloutPosition.AUTO. 
-		 *  This property must be updated in <code>updatePopUpPosition()</code>
-		 *  when attempting to reposition the Callout.</p> 
-		 *  
-		 *  <p>Subclasses should read this property when computing the <code>arrowDirection</code>,
-		 *  the arrow position in <code>updateSkinDisplayList()</code>.</p>
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		mx_internal function get actualVerticalPosition():String
-		{
-			if (_actualVerticalPosition)
-				return _actualVerticalPosition;
-			
-			return verticalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function set actualVerticalPosition(value:String):void
-		{
-			_actualVerticalPosition = value;
-		}
-		
-		//----------------------------------
-		//  arrowDirection
-		//----------------------------------
-		
-		private var _arrowDirection:String = ArrowDirection.NONE;
-		
-		/**
-		 *  @private
-		 *  Indicates if arrow direction was flipped automatically.
-		 */
-		private var arrowDirectionAdjusted:Boolean = false;
-		
-		/**
-		 *  A read-only property that indicates the direction from the callout
-		 *  towards the owner.
-		 *
-		 *  <p>This value is computed based on the callout position given by
-		 *  <code>horizontalPosition</code> and <code>verticalPosition</code>.
-		 *  Exterior and interior positions will point from the callout towards
-		 *  the edge of the owner. Corner and absolute center positions are not
-		 *  supported and will return a value of <code>"none".</code></p>
-		 * 
-		 *  @default none
-		 *
-		 *  @see spark.components.ArrowDirection
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function get arrowDirection():String
-		{
-			return _arrowDirection;
-		}
-		
-		/**
-		 *  @private
-		 *  Invalidate skin when the arrowDirection changes. Dispatches an 
-		 *  "arrowDirectionChanged" event when the property is set.
-		 */
-		mx_internal function setArrowDirection(value:String):void
-		{
-			if (_arrowDirection == value)
-				return;
-			
-			_arrowDirection = value;
-			
-			//arrow.setArrowDirection(value);
-			
-			// Instead of using skin states for each arrowDirection, the
-			// skin must override commitProperties() and account for
-			// arrowDirection on it's own.
-			skin.invalidateProperties();
-			
-			
-			
-			// adjust margins based on arrow direction
-			/*
-			switch (arrowDirection)
-			{
-				case ArrowDirection.DOWN:
-				{
-					// Set the marginBottom to zero to place the arrow adjacent to the keyboard
-					softKeyboardEffectMarginBottom = 0;
-					softKeyboardEffectMarginTop = margin;
-					break;
-				}
-				case ArrowDirection.UP:
-				{
-					// Arrow should already be adjacent to the owner or the top of
-					// the screen.
-					softKeyboardEffectMarginTop = 0;
-					softKeyboardEffectMarginBottom = margin;
-					break;
-				}
-				default:
-				{
-					softKeyboardEffectMarginBottom = margin;
-					softKeyboardEffectMarginTop = margin;
-					break;
-				}
-			}
-			*/
-			if (hasEventListener("arrowDirectionChanged"))
-				dispatchEvent(new Event("arrowDirectionChanged"));
-		}
-		
-		//----------------------------------
-		//  margin
-		//----------------------------------
-		
-		private var _margin:Number = NaN;
-		
-		/**
-		 *  @private
-		 *  Defines a margin around the Callout to nudge it's position away from the
-		 *  edge of the screen.
-		 */
-		mx_internal function get margin():Number
-		{
-			if (isNaN(_margin))
-			{
-				_margin = 8;
-			}
-			
-			return _margin;
-		}
-		
-		//----------------------------------
-		//  calloutMaxWidth
-		//----------------------------------
-		
-		private var _calloutMaxWidth:Number = NaN;
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function get calloutMaxWidth():Number
-		{
-			return _calloutMaxWidth;
-		}
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function set calloutMaxWidth(value:Number):void
-		{
-			if (_calloutMaxWidth == value)
-				return;
-			
-			_calloutMaxWidth = value;
-			
-			invalidateMaxSize();
-		}
-		
-		
-		//----------------------------------
-		//  calloutMaxHeight
-		//----------------------------------
-		
-		private var _calloutMaxHeight:Number = NaN;
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function get calloutMaxHeight():Number
-		{
-			return _calloutMaxHeight;
-		}
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function set calloutMaxHeight(value:Number):void
-		{
-			if (_calloutMaxHeight == value)
-				return;
-			
-			_calloutMaxHeight = value;
-			
-			invalidateMaxSize();
-		}
-
-		/**
-		 * ORIGINAL
-		 */
-		/*
-		override public function updatePopUpPosition():void {
-			if (!owner || !systemManager) return;
-			
-			var position:Point = calculatePopUpPosition();
-			var ownerComponent:UIComponent = owner as UIComponent;
-			var color:ColorTransform = ownerComponent ? ownerComponent.$transform.concatenatedColorTransform : null;
-			
-			PopUpUtil.applyPopUpTransform(owner, color, systemManager, this, position);
-		}
-		
-		protected function calculatePopUpPosition():Point {
-			//start from owner's global position
-			var pos:Point = owner.parent.localToGlobal(new Point(owner.x, owner.y));
-			
-			pos.x += owner.width / 2 - width / 2;
-			pos.y += owner.height;
-			
-			return pos;
-		}
-		*/
-		
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Overridden methods
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  @private
-		 */
-		override public function get explicitMaxWidth():Number
-		{
-			if (!isNaN(super.explicitMaxWidth))
-				return super.explicitMaxWidth;
-			
-			return calloutMaxWidth;
-		}
-		
-		/**
-		 *  @private
-		 */
-		override public function get explicitMaxHeight():Number
-		{
-			if (!isNaN(super.explicitMaxHeight))
-				return super.explicitMaxHeight;
-			
-			return calloutMaxHeight;
-		}
-		
-		/**
-		 *  @private
-		 */
-		override protected function commitProperties():void
-		{
-			super.commitProperties();
-			
-			// Do not commit position changes if closed (no owner) or owner was 
-			// removed from the display list.
-			if (!owner || !owner.parent)
-				return;
-			
-			// Compute actual positions when using AUTO
-			commitAutoPosition();
-			
-			// Compute max size based on actual positions
-			commitMaxSize();
-			
-			/*
-			if (arrow)
-			{
-			*/
-				// arrowDirection can be set in 2 ways: (1) horizontalPostion/verticalPosition
-				// changes and (2) flipping the axis to fit on screen. 
-				if (!arrowDirectionAdjusted)
-				{
-					// Invalidate only when the arrow direction changes
-					var direction:String = determineArrowPosition(actualHorizontalPosition, actualVerticalPosition);
-					
-					// trace("direction: "+direction);
-					// trace("arrowDirection: "+arrowDirection);
-					
-					if (arrowDirection != direction)
-					{
-						setArrowDirection(direction);
-						/*
-						if(arrow)
-							arrow.visible = (arrowDirection != ArrowDirection.NONE);
-						*/
-						//trace("visibility arrow: "+arrow.visible.toString());
-					}
-				}
-				
-				// Always reset the arrow position
-				invalidateDisplayList();
-			//}
-			
-		}
-		
-		/**
-		 *  @private
-		 *  Re-position the pop-up using actualHorizontalPosition and
-		 *  actualVerticalPosition. 
-		 */
-		override public function updatePopUpPosition():void
-		{
-			if (!owner || !systemManager)
-				return;
-			
-			var popUpPoint:Point = calculatePopUpPosition();
-			var ownerComponent:UIComponent = owner as UIComponent;
-			var concatenatedColorTransform:ColorTransform = (ownerComponent) ? ownerComponent.$transform.concatenatedColorTransform : null;
-			
-			PopUpUtil.applyPopUpTransform(owner, concatenatedColorTransform, systemManager, this, popUpPoint);
-		}
-		
-		/**
-		 *  @private
-		 *
-		 *  Cooperative layout
-		 *  @see spark.components.supportClasses.TrackBase#partAdded
-		 */
-		/*
-		override protected function partAdded(partName:String, instance:Object):void
-		{
-			super.partAdded(partName, instance);
-			
-			
-			if (instance == arrow)
-				arrow.addEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
-		}
-		*/
-		/**
-		 *  @private
-		 */
-		/*
-		override protected function partRemoved(partName:String, instance:Object):void
-		{
-			super.partRemoved(partName, instance);
-			
-			if (instance == arrow)
-				arrow.removeEventListener(ResizeEvent.RESIZE, arrow_resizeHandler);
-		}
-		*/
-		/**
-		 *  @private
-		 */
-		override public function open(owner:DisplayObjectContainer, modal:Boolean=false):void
-		{
-			if (isOpen)
-				return;
-			
-			// reset state
-			invalidatePositionFlag = false;
-			arrowDirectionAdjusted = false;
-			
-			// Add to PopUpManager, calls updatePopUpPosition(), and change state
-			super.open(owner, modal);
-			
-			// Reposition the callout when the screen changes
-			var systemManagerParent:SystemManager = this.parent as SystemManager;
-			
-			if (systemManagerParent)
-				systemManagerParent.addEventListener(Event.RESIZE, systemManager_resizeHandler);
-		}
-		
-		/**
-		 *  @private
-		 */
-		override public function close(commit:Boolean=false, data:*=null):void
-		{
-			if (!isOpen)
-				return;
-			
-			var systemManagerParent:SystemManager = this.parent as SystemManager;
-			
-			if (systemManagerParent)
-				systemManagerParent.removeEventListener(Event.RESIZE, systemManager_resizeHandler);
-			
-			super.close(commit, data);
-		}
-		
-		/**
-		 *  @private
-		 */
-		override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
-		{
-			super.updateDisplayList(unscaledWidth, unscaledHeight);
-			
-			// Callout can be respositioned while open via SystemManager resize or
-			// explicit changes to horizontalPostion and verticalPosition.
-			if (isOpen && invalidatePositionFlag)
-			{
-				updatePopUpPosition();
-				invalidatePositionFlag = false;
-			}
-			
-			// Position the arrow
-			//updateSkinDisplayList();
-			//arrow.invalidateSkinState();
-		}
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Methods
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  @private
-		 */
-		private function invalidatePosition():void
-		{
-			arrowDirectionAdjusted = false;
-			
-			invalidateProperties();
-			
-			if (isOpen)
-				invalidatePositionFlag = true;
-		}
-		
-		/**
-		 *  @private
-		 *  Force a new measurement when callout should use it's screen-constrained
-		 *  max size.
-		 */
-		private function invalidateMaxSize():void
-		{
-			// calloutMaxWidth and calloutMaxHeight don't invalidate 
-			// explicitMaxWidth or explicitMaxHeight. If callout's max size changes
-			// and explicit max sizes aren't set, then invalidate size here so that
-			// callout's max size is applied.
-			if (!canSkipMeasurement() && !isMaxSizeSet)
-				skin.invalidateSize();
-		}
-		
-		/**
-		 *  Sets the bounds of <code>arrow</code>, whose geometry isn't fully
-		 *  specified by the skin's layout.
-		 *
-		 *  <p>Subclasses can override this method to update the arrow's size,
-		 *  position, and visibility, based on the computed
-		 *  <code>arrowDirection</code>.</p>
-		 *
-		 *  <p>By default, this method aligns the arrow on the shorter of either
-		 *  the <code>arrow</code> bounds or the <code>owner</code> bounds. This
-		 *  implementation assumes that the <code>arrow</code> and the Callout skin
-		 *  share the same coordinate space.</p>
-		 *
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		/*
-		protected function updateSkinDisplayList():void
-		{
-			var ownerVisualElement:IVisualElement = owner as IVisualElement;
-			
-			// Sanity check to verify owner is still on the display list. If not,
-			// leave the arrow in the current position.
-			if (!arrow || !ownerVisualElement || (arrowDirection == ArrowDirection.NONE) ||	(!ownerVisualElement.parent))
-				return;
-			
-			var isStartPosition:Boolean = false;
-			var isMiddlePosition:Boolean = false;
-			var isEndPosition:Boolean = false;
-			
-			var position:String = (isArrowVertical) ? actualHorizontalPosition : actualVerticalPosition;
-			
-			isStartPosition = (position == CalloutPosition.START);
-			isMiddlePosition = (position == CalloutPosition.MIDDLE);
-			isEndPosition = (position == CalloutPosition.END);
-			
-			var isEndOfCallout:Boolean = (arrowDirection == ArrowDirection.DOWN) || (arrowDirection == ArrowDirection.RIGHT);
-			
-			var calloutWidth:Number = getLayoutBoundsWidth();
-			var calloutHeight:Number = getLayoutBoundsHeight();
-			var arrowWidth:Number = arrow.getLayoutBoundsWidth();
-			var arrowHeight:Number = arrow.getLayoutBoundsHeight();
-			
-			// arrow X/Y in pop-up coordinates
-			var arrowX:Number = 0;
-			var arrowY:Number = 0;
-			
-			// Max arrow positions
-			var maxArrowX:Number = calloutWidth - arrowWidth;
-			var maxArrowY:Number = calloutHeight - arrowHeight;
-			
-			// Find the registration point of the owner
-			var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
-			var regPoint:Point = owner.localToGlobal(new Point());
-			regPoint = sandboxRoot.globalToLocal(regPoint);
-			
-			if (isArrowVertical)
-			{
-				// Vertical arrows need horizontal alignment
-				var ownerX:Number = regPoint.x;
-				var ownerVisibleWidth:Number = (ownerVisualElement)	? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
-				
-				// Edge cases when start/end of owner is not visible
-				if ((ownerX < 0) && (ownerVisibleWidth < screen.width))
-					ownerVisibleWidth = Math.max(ownerVisibleWidth + ownerX, 0);
-				else if ((ownerX >= 0) && ((ownerX + ownerVisibleWidth) >= screen.width))
-					ownerVisibleWidth = Math.max(screen.width - ownerX, 0);
-				
-				ownerVisibleWidth = Math.min(ownerVisibleWidth, screen.width);
-				
-				if (calloutWidth <= ownerVisibleWidth)
-				{
-					arrowX = (calloutWidth - arrowWidth) / 2;
-				}
-				else // if (calloutWidth > ownerWidth)
-				{
-					// Center the arrow on the owner
-					arrowX = (ownerVisibleWidth - arrowWidth) / 2;
-					
-					// Add owner offset
-					if (ownerX > 0)
-						arrowX += Math.abs(ownerX - getLayoutBoundsX());
-					
-					if (ownerX < margin)
-						arrowX -= (margin - ownerX);
-				}
-				
-				// arrow should not extend past the callout bounds
-				arrowX = Math.max(Math.min(maxArrowX, arrowX), 0);
-				
-				// Move the arrow to the bottom of the callout
-				if (isEndOfCallout)
-					arrowY = calloutHeight - arrowHeight;
-			}
-			else
-			{
-				// Horizontal arrows need vertical alignment
-				var ownerY:Number = regPoint.y;
-				var ownerVisibleHeight:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
-				
-				// Edge cases when start/end of owner is not visible
-				if ((ownerY < 0) && (ownerVisibleHeight < screen.height))
-					ownerVisibleHeight = Math.max(ownerVisibleHeight + ownerY, 0);
-				else if ((ownerY >= 0) && ((ownerY + ownerVisibleHeight) >= screen.height))
-					ownerVisibleHeight = Math.max(screen.height - ownerY, 0);
-				
-				ownerVisibleHeight = Math.min(ownerVisibleHeight, screen.height);
-				
-				if (calloutHeight <= ownerVisibleHeight)
-				{
-					arrowY = (calloutHeight - arrowHeight) / 2;
-				}
-				else // if (calloutHeight > ownerHeight)
-				{
-					// Center the arrow on the owner
-					arrowY = (ownerVisibleHeight - arrowHeight) / 2;
-					
-					// Add owner offset
-					if (ownerY > 0)
-						arrowY += Math.abs(ownerY - getLayoutBoundsY());
-					
-					if (ownerY < margin)
-						ownerY -= (margin - ownerY);
-				}
-				
-				// arrow should not extend past the callout bounds
-				arrowY = Math.max(Math.min(maxArrowY, arrowY), 0);
-				
-				// Move the arrow to the end of the callout
-				if (isEndOfCallout)
-					arrowX = calloutWidth - arrowWidth;
-			}
-			
-			arrow.setLayoutBoundsPosition(Math.floor(arrowX), Math.floor(arrowY));
-			arrow.invalidateDisplayList();
-		}
-		*/
-		/**
-		 *  @private
-		 * 
-		 *  Flip or clear the adjusted position when the callout bounds are outside
-		 *  the screen bounds.
-		 */
-		mx_internal function adjustCalloutPosition(actualPosition:String, preferredPosition:String,
-												   calloutStart:Number, calloutEnd:Number,
-												   screenStart:Number, screenEnd:Number,
-												   ownerStart:Number, ownerEnd:Number,
-												   revert:Boolean=false):String
-		{
-			if (!actualPosition)
-				return null;
-			
-			var adjustedPosition:String = null;
-			var calloutSize:Number = calloutEnd - calloutStart;
-			
-			// Exterior space
-			var exteriorSpaceStart:Number = Math.max(0, ownerStart - screenStart);
-			var exteriorSpaceEnd:Number = Math.max(0, ownerEnd - screenEnd);
-			
-			// Fallback to interior positions if using AUTO and callout can not
-			// fit in either exterior positions
-			var useInterior:Boolean = (preferredPosition == CallOutPosition.AUTO) &&
-				(exteriorSpaceStart < calloutSize) &&
-				(exteriorSpaceEnd < calloutSize);
-			var isExterior:Boolean = false;
-			
-			// Flip to opposite position
-			switch (actualPosition)
-			{
-				case CallOutPosition.BEFORE:
-				{
-					isExterior = true;
-					
-					if (calloutStart < screenStart)
-						adjustedPosition = CallOutPosition.AFTER;
-					
-					break;
-				}
-				case CallOutPosition.AFTER:
-				{
-					isExterior = true;
-					
-					if (calloutEnd > screenEnd)
-						adjustedPosition = CallOutPosition.BEFORE;
-					
-					break;
-				}
-				case CallOutPosition.END:
-				{
-					if (calloutStart < screenStart)
-						adjustedPosition = CallOutPosition.START;
-					break;
-				}
-				case CallOutPosition.START:
-				{
-					if (calloutEnd > screenEnd)
-						adjustedPosition = CallOutPosition.END;
-					break;
-				}
-					// case CalloutPosition.MIDDLE:
-					// Nudge instead of flipping
-			}
-			
-			// Use interior position if exterior flipping was necessary
-			if (useInterior && adjustedPosition && isExterior)
-			{
-				// Choose the exterior position with the most available space.
-				// Note that START grows towards the exterior END and vice versa.
-				adjustedPosition = (exteriorSpaceEnd >= exteriorSpaceStart) ? 
-					CallOutPosition.START : CallOutPosition.END;
-			}
-			
-			// Return null to revert the adjusted position
-			// Otherwise, return the incoming position
-			if (revert)
-				return (adjustedPosition) ? null : actualPosition;
-			
-			// Adjusted position or null if the callout already fits
-			return adjustedPosition;
-		}
-		
-		/**
-		 *  @private
-		 * 
-		 *  Nudge the callout position to fit on screen. Prefer top/left positions
-		 *  and allow overflow to get clipped on the bottom/right.
-		 */
-		mx_internal function nudgeToFit(calloutStart:Number, calloutEnd:Number,
-										screenStart:Number, screenEnd:Number,
-										scaleFactor:Number):Number
-		{
-			var position:Number = 0;
-			
-			if (calloutStart < screenStart)
-				position += (screenStart - calloutStart) / scaleFactor;
-			else if (calloutEnd > screenEnd)
-				position -= (calloutEnd - screenEnd) / scaleFactor;
-			
-			return position;
-		}
-		
-		/**
-		 *  @private
-		 *
-		 *  Basically the same as PopUpAnchor, but with more position options
-		 *  including exterior, interior and corner positions.
-		 * 
-		 *  Nudging to fit the screen accounts for <code>margin</code> so that
-		 *  the Callout is not positioned in the margin.
-		 * 
-		 *  <code>arrowDirection</code> will change if required for the callout
-		 *  to fit.
-		 *
-		 *  @see #margin
-		 */
-		mx_internal function calculatePopUpPosition():Point
-		{
-			// This implementation doesn't handle rotation
-			var sandboxRoot:DisplayObject = systemManager.getSandboxRoot();
-			var matrix:Matrix = MatrixUtil.getConcatenatedMatrix(owner, sandboxRoot);
-			
-			var regPoint:Point = new Point();
-			
-			if (!matrix)
-				return regPoint;
-			
-			var adjustedHorizontalPosition:String;
-			var adjustedVerticalPosition:String;
-			var calloutBounds:Rectangle = determinePosition(actualHorizontalPosition, actualVerticalPosition, matrix, regPoint);
-			var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-			
-			// Position the callout in the opposite direction if it
-			// does not fit on the screen.
-			if (screen)
-			{
-				adjustedHorizontalPosition = adjustCalloutPosition(
-					actualHorizontalPosition, horizontalPosition,
-					calloutBounds.left, calloutBounds.right,
-					screen.left, screen.right,
-					ownerBounds.left, ownerBounds.right);
-				
-				adjustedVerticalPosition = adjustCalloutPosition(
-					actualVerticalPosition, verticalPosition,
-					calloutBounds.top, calloutBounds.bottom,
-					screen.top, screen.bottom,
-					ownerBounds.top, ownerBounds.bottom);
-			}
-			
-			var oldArrowDirection:String = arrowDirection;
-			var actualArrowDirection:String = null;
-			
-			// Reset arrowDirectionAdjusted
-			arrowDirectionAdjusted = false;
-			
-			// Get the new registration point based on the adjusted position
-			if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
-			{
-				var adjustedRegPoint:Point = new Point();
-				var tempHorizontalPosition:String = (adjustedHorizontalPosition) ? adjustedHorizontalPosition : actualHorizontalPosition;
-				var tempVerticalPosition:String = (adjustedVerticalPosition) ? adjustedVerticalPosition : actualVerticalPosition;
-				
-				// Adjust arrow direction after adjusting position
-				actualArrowDirection = determineArrowPosition(tempHorizontalPosition, tempVerticalPosition);
-				
-				// All position flips gaurantee an arrowDirection change
-				setArrowDirection(actualArrowDirection);
-				arrowDirectionAdjusted = true;
-				
-				/*
-				if (arrow)
-					arrow.visible = (arrowDirection != ArrowDirection.NONE);
-				
-				// Reposition the arrow
-				//updateSkinDisplayList();
-				
-				arrow.invalidateSkinState();
-				*/
-				var adjustedBounds:Rectangle = determinePosition(tempHorizontalPosition, tempVerticalPosition, matrix, adjustedRegPoint);
-				
-				if (screen)
-				{
-					// If we adjusted the position but the callout still doesn't fit,
-					// then revert to the original position.
-					adjustedHorizontalPosition = adjustCalloutPosition(
-						adjustedHorizontalPosition, horizontalPosition,
-						adjustedBounds.left, adjustedBounds.right,
-						screen.left, screen.right,
-						ownerBounds.left, ownerBounds.right,
-						true);
-					
-					adjustedVerticalPosition = adjustCalloutPosition(
-						adjustedVerticalPosition, verticalPosition,
-						adjustedBounds.top, adjustedBounds.bottom,
-						screen.top, screen.bottom, 
-						ownerBounds.top, ownerBounds.bottom,
-						true);
-				}
-				
-				if ((adjustedHorizontalPosition != null) || (adjustedVerticalPosition != null))
-				{
-					regPoint = adjustedRegPoint;
-					calloutBounds = adjustedBounds;
-					
-					// Temporarily set actual positions to reposition the arrow
-					if (adjustedHorizontalPosition)
-						actualHorizontalPosition = adjustedHorizontalPosition;
-					
-					if (adjustedVerticalPosition)
-						actualVerticalPosition = adjustedVerticalPosition;
-					
-					// Reposition the arrow with the new actual position
-					//updateSkinDisplayList();
-					//arrow.invalidateSkinState();
-				}
-				else
-				{
-					// Restore previous arrow direction *before* reversing the
-					// adjusted positions
-					setArrowDirection(oldArrowDirection);
-					arrowDirectionAdjusted = false;
-					
-					// Reposition the arrow to the original position
-					//updateSkinDisplayList();
-					//arrow.invalidateSkinState();
-				}
-			}
-			
-			MatrixUtil.decomposeMatrix(decomposition, matrix, 0, 0);
-			var concatScaleX:Number = decomposition[3];
-			var concatScaleY:Number = decomposition[4];
-			
-			// If the callout still doesn't fit, then nudge it
-			// so it is completely on the screen. Make sure to include scale.
-			var screenTop:Number = screen.top;
-			var screenBottom:Number = screen.bottom;
-			var screenLeft:Number = screen.left;
-			var screenRight:Number = screen.right;
-			
-			// Allow zero margin on the the side with the arrow
-			switch (arrowDirection)
-			{
-				case ArrowDirection.UP:
-				{
-					screenBottom -= margin;
-					screenLeft += margin;
-					screenRight -= margin
-					break;
-				}
-				case ArrowDirection.DOWN:
-				{
-					screenTop += margin;
-					screenLeft += margin;
-					screenRight -= margin
-					break;
-				}
-				case ArrowDirection.LEFT:
-				{
-					screenTop += margin;
-					screenBottom -= margin;
-					screenRight -= margin
-					break;
-				}
-				case ArrowDirection.RIGHT:
-				{
-					screenTop += margin;
-					screenBottom -= margin;
-					screenLeft += margin;
-					break;
-				}
-				default:
-				{
-					screenTop += margin;
-					screenBottom -= margin;
-					screenLeft += margin;
-					screenRight -= margin
-					break;
-				}
-			}
-			
-			regPoint.y += nudgeToFit(calloutBounds.top, calloutBounds.bottom, screenTop, screenBottom, concatScaleY);
-			
-			regPoint.x += nudgeToFit(calloutBounds.left, calloutBounds.right, screenLeft, screenRight, concatScaleX);
-			
-			// trace("regpoint: " + regPoint.toString());
-			
-			calculateArrowPosition();
-			
-			// Compute the stage coordinates of the upper,left corner of the PopUp, taking
-			// the postTransformOffsets - which include mirroring - into account.
-			// If we're mirroring, then the implicit assumption that x=left will fail,
-			// so we compensate here.
-			
-			if (layoutDirection == LayoutDirection.RTL)
-				regPoint.x += calloutBounds.width;
-			return MatrixUtil.getConcatenatedComputedMatrix(owner, sandboxRoot).transformPoint(regPoint);
-		}
-		
-		mx_internal function calculateArrowPosition():void
-		{
-			// trace("horizontalPosition: " + horizontalPosition);
-			
-			// trace("verticalPosition: " + verticalPosition);
-		}
-		
-		/**
-		 *  @private
-		 *  Computes <code>actualHorizontalPosition</code> and/or
-		 *  <code>actualVerticalPosition</code> values when using
-		 *  <code>CalloutPosition.AUTO</code>. When implementing subclasses of
-		 *  Callout, use <code>actualHorizontalPosition</code> and
-		 *  <code>actualVerticalPosition</code> to compute
-		 *  <code>arrowDirection</code> and positioning in
-		 *  <code>updatePopUpPosition()</code> and <code>updateSkinDisplayList()</code>.
-		 *
-		 *  <p>The default implementation chooses "outer" positions for the callout
-		 *  such that the owner is not obscured. Horizontal/Vertical orientation
-		 *  relative to the owner choosen based on the aspect ratio.</p>
-		 *
-		 *  <p>When the aspect ratio is landscape, and the callout can fit to the
-		 *  left or right of the owner, <code>actualHorizontalPosition</code> is
-		 *  set to <code>CalloutPosition.BEFORE</code> or
-		 *  <code>CalloutPosition.AFTER</code> as appropriate.
-		 *  <code>actualVerticalPosition</code> is set to
-		 *  <code>CalloutPosition.MIDDLE</code> to have the vertical center of the
-		 *  callout align to the vertical center of the owner.</p>
-		 *
-		 *  <p>When the aspect ratio is portrait, and the callout can fit
-		 *  above or below the owner, <code>actualVerticalPosition</code> is
-		 *  set to <code>CalloutPosition.BEFORE</code> or
-		 *  <code>CalloutPosition.AFTER</code> as appropriate.
-		 *  <code>actualHorizontalPosition</code> is set to
-		 *  <code>CalloutPosition.MIDDLE</code> to have the horizontal center of the
-		 *  callout align to the horizontal center of the owner.</p>
-		 *
-		 *  <p>Subclasses may override to modify automatic positioning behavior.</p>
-		 */
-		mx_internal function commitAutoPosition():void
-		{
-			if (!screen || ((horizontalPosition != CallOutPosition.AUTO) &&
-				(verticalPosition != CallOutPosition.AUTO)))
-			{
-				// Use explicit positions instead of AUTO
-				actualHorizontalPosition = null;
-				actualVerticalPosition = null;
-				
-				return;
-			}
-			
-			var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-			
-			// Use aspect ratio to determine vertical/horizontal preference
-			var isLandscape:Boolean = (screen.width > screen.height);
-			
-			// Exterior space
-			var exteriorSpaceLeft:Number = Math.max(0, ownerBounds.left);
-			var exteriorSpaceRight:Number = Math.max(0, screen.width - ownerBounds.right);
-			var exteriorSpaceTop:Number = Math.max(0, ownerBounds.top);
-			var exteriorSpaceBottom:Number = Math.max(0, screen.height - ownerBounds.bottom);
-			
-			if (verticalPosition != CallOutPosition.AUTO)
-			{
-				// Horizontal auto only
-				switch (verticalPosition)
-				{
-					case CallOutPosition.START:
-					case CallOutPosition.MIDDLE:
-					case CallOutPosition.END:
-					{
-						actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CallOutPosition.AFTER : CallOutPosition.BEFORE;
-						break;
-					}
-					default:
-					{
-						actualHorizontalPosition = CallOutPosition.MIDDLE;
-						break;
-					}
-				}
-				
-				actualVerticalPosition = null;
-			}
-			else if (horizontalPosition != CallOutPosition.AUTO)
-			{
-				// Vertical auto only
-				switch (horizontalPosition)
-				{
-					case CallOutPosition.START:
-					case CallOutPosition.MIDDLE:
-					case CallOutPosition.END:
-					{
-						actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CallOutPosition.AFTER : CallOutPosition.BEFORE;
-						break;
-					}
-					default:
-					{
-						actualVerticalPosition = CallOutPosition.MIDDLE;
-						break;
-					}
-				}
-				
-				actualHorizontalPosition = null;
-			}
-			else // if ((verticalPosition == CalloutPosition.AUTO) && (horizontalPosition == CalloutPosition.AUTO))
-			{
-				if (!isLandscape)
-				{
-					// Arrow will be vertical when in portrait
-					actualHorizontalPosition = CallOutPosition.MIDDLE;
-					actualVerticalPosition = (exteriorSpaceBottom > exteriorSpaceTop) ? CallOutPosition.AFTER : CallOutPosition.BEFORE;
-				}
-				else
-				{
-					// Arrow will be horizontal when in landscape
-					actualHorizontalPosition = (exteriorSpaceRight > exteriorSpaceLeft) ? CallOutPosition.AFTER : CallOutPosition.BEFORE;
-					actualVerticalPosition = CallOutPosition.MIDDLE;
-				}
-			}
-		}
-		
-		/**
-		 *  @private
-		 *  Return true if user-specified max size if set
-		 */
-		mx_internal function get isMaxSizeSet():Boolean
-		{
-			var explicitMaxW:Number = super.explicitMaxWidth;
-			var explicitMaxH:Number = super.explicitMaxHeight;
-			
-			return (!isNaN(explicitMaxW) && !isNaN(explicitMaxH));
-		}
-		
-		/**
-		 *  @private
-		 *  Return the original height if the soft keyboard is active. This height
-		 *  is used to stabilize AUTO positioning so that the position is based
-		 *  on the original height of the Callout instead of a possibly shorter
-		 *  height due to soft keyboard effects.
-		 */
-		mx_internal function get calloutHeight():Number
-		{
-			return (isSoftKeyboardEffectActive) ? softKeyboardEffectCachedHeight : getLayoutBoundsHeight();
-		}
-		
-		/**
-		 *  @private
-		 *  Compute max width and max height. Uses the the owner and screen bounds 
-		 *  as well as preferred positions to determine max width and max height  
-		 *  for all possible exterior and interior positions.
-		 */
-		mx_internal function commitMaxSize():void
-		{
-			var ownerBounds:Rectangle = owner.getBounds(systemManager.getSandboxRoot());
-			var ownerLeft:Number = ownerBounds.left;
-			var ownerRight:Number = ownerBounds.right;
-			var ownerTop:Number = ownerBounds.top;
-			var ownerBottom:Number = ownerBounds.bottom;
-			var maxW:Number;
-			var maxH:Number;
-			
-			switch (actualHorizontalPosition)
-			{
-				case CallOutPosition.MIDDLE:
-				{
-					// Callout matches screen width
-					maxW = screen.width - (margin * 2);
-					break;
-				}
-				case CallOutPosition.START:
-				case CallOutPosition.END:
-				{
-					// Flip left and right when using inner positions
-					ownerLeft = ownerBounds.right;
-					ownerRight = ownerBounds.left;
-					
-					// Fall through
-				}
-				default:
-				{
-					// Maximum is the larger of the actual position or flipped position
-					maxW = Math.max(ownerLeft, screen.right - ownerRight) - margin;
-					break;
-				}
-			}
-			
-			// If preferred position was AUTO, then allow maxWidth to grow to
-			// fit the interior position if the owner is wide
-			if ((horizontalPosition == CallOutPosition.AUTO) &&
-				(ownerBounds.width > maxW))
-				maxW += ownerBounds.width;
-			
-			switch (actualVerticalPosition)
-			{
-				case CallOutPosition.MIDDLE:
-				{
-					// Callout matches screen height
-					maxH = screen.height - (margin * 2);
-					break;
-				}
-				case CallOutPosition.START:
-				case CallOutPosition.END:
-				{
-					// Flip top and bottom when using inner positions
-					ownerTop = ownerBounds.bottom;
-					ownerBottom = ownerBounds.top;
-					
-					// Fall through
-				}
-				default:
-				{
-					// Maximum is the larger of the actual position or flipped position
-					maxH = Math.max(ownerTop, screen.bottom - ownerBottom) - margin;
-					break;
-				}
-			}
-			
-			// If preferred position was AUTO, then allow maxHeight to grow to
-			// fit the interior position if the owner is tall
-			if ((verticalPosition == CallOutPosition.AUTO) && 
-				(ownerBounds.height > maxH))
-				maxH += ownerBounds.height;
-			
-			calloutMaxWidth = maxW;
-			calloutMaxHeight = maxH;
-		}
-		
-		/**
-		 *  @private
-		 */
-		mx_internal function determineArrowPosition(horizontalPos:String, verticalPos:String):String
-		{
-			// Determine arrow direction, outer positions get priority.
-			// Corner positions and center show no arrow
-			var direction:String = ArrowDirection.NONE;
-			
-			if (horizontalPos == CallOutPosition.BEFORE)
-			{
-				if ((verticalPos != CallOutPosition.BEFORE)
-					&&  (verticalPos != CallOutPosition.AFTER))
-				{
-					direction = ArrowDirection.RIGHT;
-				}
-			}
-			else if (horizontalPos == CallOutPosition.AFTER)
-			{
-				if ((verticalPos != CallOutPosition.BEFORE)
-					&& (verticalPos != CallOutPosition.AFTER))
-				{
-					direction = ArrowDirection.LEFT;
-				}
-			}
-			else if (verticalPos == CallOutPosition.BEFORE)
-			{
-				direction = ArrowDirection.DOWN;
-			}
-			else if (verticalPos == CallOutPosition.AFTER)
-			{
-				direction = ArrowDirection.UP;
-			}
-			else if (horizontalPos == CallOutPosition.START)
-			{
-				direction = ArrowDirection.LEFT;
-			}
-			else if (horizontalPos == CallOutPosition.END)
-			{
-				direction = ArrowDirection.RIGHT;
-			}
-			else if (verticalPos == CallOutPosition.START)
-			{
-				direction = ArrowDirection.UP;
-			}
-			else if (verticalPos == CallOutPosition.END)
-			{
-				direction = ArrowDirection.DOWN;
-			}
-			
-			return direction
-		}
-		
-		/**
-		 *  @private
-		 * 
-		 *  Uses horizontalPosition and verticalPosition to determine the bounds of
-		 *  the callout.
-		 */
-		mx_internal function determinePosition(horizontalPos:String, verticalPos:String, matrix:Matrix, registrationPoint:Point):Rectangle
-		{
-			var ownerVisualElement:ILayoutElement = owner as ILayoutElement;
-			var ownerWidth:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsWidth() : owner.width;
-			var ownerHeight:Number = (ownerVisualElement) ? ownerVisualElement.getLayoutBoundsHeight() : owner.height;
-			var calloutWidth:Number = getLayoutBoundsWidth();
-			var calloutHeight:Number = this.calloutHeight;
-			
-			/*
-			var arrowWidth:Number	= arrow.arrowWidth();
-			var arrowHeight:Number	= arrow.arrowHeight();
-			*/
-			switch (horizontalPos)
-			{
-				case CallOutPosition.BEFORE:
-				{
-					// The full width of the callout is before the owner
-					// All arrow directions are ArrowDirection.RIGHT x=(width - arrow.width)
-					registrationPoint.x = -calloutWidth;
-					break;
-				}
-				case CallOutPosition.START:
-				{
-					// ArrowDirection.LEFT is at x=0
-					registrationPoint.x = 0;
-					break;
-				}
-				case CallOutPosition.END:
-				{
-					// The ends of the owner and callout are aligned
-					registrationPoint.x = (ownerWidth - calloutWidth);
-					break;
-				}
-				case CallOutPosition.AFTER:
-				{
-					// The full width of the callout is after the owner
-					// All arrow directions are ArrowDirection.LEFT (x=0)
-					registrationPoint.x = ownerWidth;
-					break;
-				}
-				default: // case CalloutPosition.MIDDLE:
-				{
-					registrationPoint.x = Math.floor((ownerWidth - calloutWidth) / 2);
-					break;
-				}
-			}
-			
-			switch (verticalPos)
-			{
-				case CallOutPosition.BEFORE:
-				{
-					// The full height of the callout is before the owner
-					// All arrow directions are ArrowDirection.DOWN y=(height - arrow.height)
-					registrationPoint.y = -calloutHeight;
-					break;
-				}
-				case CallOutPosition.START:
-				{
-					// ArrowDirection.UP is at y=0
-					registrationPoint.y = 0;
-					break;
-				}
-				case CallOutPosition.MIDDLE:
-				{
-					registrationPoint.y = Math.floor((ownerHeight - calloutHeight) / 2);
-					break;
-				}
-				case CallOutPosition.END:
-				{
-					// The ends of the owner and callout are aligned
-					registrationPoint.y = (ownerHeight - calloutHeight);
-					break;
-				}
-				default: //case CalloutPosition.AFTER:
-				{
-					// The full height of the callout is after the owner
-					// All arrow directions are ArrowDirection.UP (y=0)
-					registrationPoint.y = ownerHeight;
-					break;
-				}
-			}
-			
-			var topLeft:Point = registrationPoint.clone();
-			var size:Point = MatrixUtil.transformBounds(calloutWidth, calloutHeight, matrix, topLeft);
-			var bounds:Rectangle = new Rectangle();
-			
-			bounds.left = topLeft.x;
-			bounds.top = topLeft.y;
-			bounds.width = size.x;
-			bounds.height = size.y;
-			
-			return bounds;
-		}
-		
-		/**
-		 * @private
-		 */
-		mx_internal function get isArrowVertical():Boolean
-		{
-			return (arrowDirection == ArrowDirection.UP ||
-				arrowDirection == ArrowDirection.DOWN);
-		}
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Event handlers
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  @private
-		 */
-		/*
-		private function arrow_resizeHandler(event:Event):void
-		{
-			//updateSkinDisplayList();
-			arrow.invalidateSkinState();
-		}
-		*/
-		/**
-		 *  @private
-		 */
-		private function systemManager_resizeHandler(event:Event):void
-		{
-			// Remove explicit settings if due to Resize effect
-			softKeyboardEffectResetExplicitSize();
-			
-			// Screen resize might require a new arrow direction and callout position
-			invalidatePosition();
-			
-			if (!isSoftKeyboardEffectActive)
-			{
-				// Force validation and use new screen size only if the keyboard
-				// effect is not active. The stage dimensions may be invalid while 
-				// the soft keyboard is active. See SDK-31860.
-				validateNow();
-			}
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/src/spark/components/CallOutButton.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOutButton.as b/frameworks/projects/experimental/src/spark/components/CallOutButton.as
deleted file mode 100644
index fd825c3..0000000
--- a/frameworks/projects/experimental/src/spark/components/CallOutButton.as
+++ /dev/null
@@ -1,362 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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.MouseEvent;
-	
-	import mx.core.ClassFactory;
-	import mx.core.IFactory;
-	import mx.core.mx_internal;
-	import mx.utils.BitFlagUtil;
-	
-	import spark.components.Button;
-	import spark.events.DropDownEvent;
-	import spark.events.PopUpEvent;
-	import spark.layouts.supportClasses.LayoutBase;
-	
-	import spark.components.supportClasses.CallOutDropDownController;
-	import spark.components.supportClasses.IDropDownContainer;
-	
-	use namespace mx_internal;
-
-    // for asdoc
-    [Experimental]
-	
-	[Event(name="close", type="spark.events.DropDownEvent")]
-	[Event(name="open", type="spark.events.DropDownEvent")]
-	
-	[DefaultProperty("calloutContent")]
-	
-	public class CallOutButton extends Button implements IDropDownContainer
-	{
-		//--------------------------------------------------------------------------
-		//
-		//  Class constants
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  @private
-		 */
-		mx_internal static const CALLOUT_CONTENT_PROPERTY_FLAG:uint = 1 << 0;
-		
-		/**
-		 *  @private
-		 */
-		mx_internal static const CALLOUT_LAYOUT_PROPERTY_FLAG:uint = 1 << 1;
-		
-		/**
-		 *  @private
-		 */
-		mx_internal static const HORIZONTAL_POSITION_PROPERTY_FLAG:uint = 1 << 2;
-		
-		/**
-		 *  @private
-		 */
-		mx_internal static const VERTICAL_POSITION_PROPERTY_FLAG:uint = 1 << 3;
-		
-		[SkinPart(required="false")]
-		public var dropDown:IFactory;
-		
-		public var topCallOut:CallOut;
-		public var subCallOut:CallOut;
-		
-		private var _callout:CallOut;
-		[Bindable("calloutChanged")]
-		public function get callout():CallOut
-		{
-			return _callout;
-		}
-		
-		protected function setCallout(value:CallOut):void
-		{
-			_callout = value;
-			if (hasEventListener("calloutChanged")) dispatchEvent(new Event("calloutChanged"));
-		}
-		
-		private var _calloutContent:Array;
-		[ArrayElementType("mx.core.IVisualElement")]
-		public function get calloutContent():Array
-		{
-			return _calloutContent;
-		}
-		
-		public function set calloutContent(value:Array):void
-		{
-			_calloutContent = value;
-			if (callout) callout.mxmlContent = value;
-		}
-		
-		private var _calloutLayout:LayoutBase;
-		public function get calloutLayout():LayoutBase
-		{
-			return _calloutLayout;
-		}
-		
-		public function set calloutLayout(value:LayoutBase):void
-		{
-			_calloutLayout = value;
-			if (callout) callout.layout = value;
-		}
-		
-		[Inspectable(category="General", enumeration="rollOver,click", defaultValue="rollOver")] //mouseOver
-		public var triggerEvent:String = MouseEvent.ROLL_OVER;
-		
-		private var dropDownController:CallOutDropDownController;
-		
-		//--------------------------------------------------------------------------
-		//
-		//  Variables
-		//
-		//--------------------------------------------------------------------------
-		
-		/**
-		 *  @private
-		 *  Several properties are proxied to callout.  However, when callout
-		 *  is not around, we need to store values set on CalloutButton.  This object 
-		 *  stores those values.  If callout is around, the values are stored 
-		 *  on the callout directly.  However, we need to know what values 
-		 *  have been set by the developer on the CalloutButton (versus set on 
-		 *  the callout or defaults of the callout) as those are values 
-		 *  we want to carry around if the callout changes (via a new skin). 
-		 *  In order to store this info effeciently, calloutProperties becomes 
-		 *  a uint to store a series of BitFlags.  These bits represent whether a 
-		 *  property has been explicitely set on this CalloutButton.  When the 
-		 *  callout is not around, calloutProperties is a typeless 
-		 *  object to store these proxied properties.  When callout is around,
-		 *  calloutProperties stores booleans as to whether these properties 
-		 *  have been explicitely set or not.
-		 */
-		mx_internal var calloutProperties:Object = {};
-		
-		
-		//----------------------------------
-		//  horizontalPosition
-		//----------------------------------
-		
-		[Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-		
-		/**
-		 *  @copy spark.components.Callout#horizontalPosition
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function get horizontalPosition():String
-		{
-			if (callout)
-				return callout.horizontalPosition;
-			
-			return calloutProperties.horizontalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		public function set horizontalPosition(value:String):void
-		{
-			if (callout)
-			{
-				callout.horizontalPosition = value;
-				calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-					HORIZONTAL_POSITION_PROPERTY_FLAG, value != null);
-			}
-			else
-				calloutProperties.horizontalPosition = value;
-		}
-		
-		//----------------------------------
-		//  verticalPosition
-		//----------------------------------
-		
-		[Inspectable(category="General", enumeration="before,start,middle,end,after,auto", defaultValue="auto")]
-		
-		/**
-		 *  @copy spark.components.Callout#verticalPosition
-		 *  
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public function get verticalPosition():String
-		{
-			if (callout)
-				return callout.verticalPosition;
-			
-			return calloutProperties.verticalPosition;
-		}
-		
-		/**
-		 *  @private
-		 */
-		public function set verticalPosition(value:String):void
-		{
-			if (callout)
-			{
-				callout.verticalPosition = value;
-				calloutProperties = BitFlagUtil.update(calloutProperties as uint, 
-					VERTICAL_POSITION_PROPERTY_FLAG, value != null);
-			}
-			else
-				calloutProperties.verticalPosition = value;
-		}
-		
-		
-		
-		override public function initialize():void
-		{
-			dropDownController = new CallOutDropDownController();
-			dropDownController.closeOnResize = false;
-			dropDownController.addEventListener(DropDownEvent.OPEN, handleDropDownOpen);
-			dropDownController.addEventListener(DropDownEvent.CLOSE, handleDropDownClose);
-			dropDownController.rollOverOpenDelay = (triggerEvent == MouseEvent.CLICK) ? NaN : 0;
-			dropDownController.openButton = this;
-			
-			super.initialize();
-		}
-		
-		override protected function partAdded(partName:String, instance:Object):void
-		{
-			super.partAdded(partName, instance);
-			
-			if (partName == "dropDown")
-			{
-				// copy proxied values from calloutProperties (if set) to callout
-				var newCalloutProperties:uint = 0;
-				var calloutInstance:CallOut = instance as CallOut;
-				
-				if (calloutInstance && dropDownController)
-				{
-					calloutInstance.id = "callout";
-					dropDownController.dropDown = calloutInstance;
-					
-					calloutInstance.addEventListener(PopUpEvent.OPEN, handleCalloutOpen);
-					calloutInstance.addEventListener(PopUpEvent.CLOSE, handleCalloutClose);
-					
-					calloutInstance.mxmlContent = _calloutContent;
-					if (_calloutLayout) calloutInstance.layout = _calloutLayout;
-					
-					/*
-					if (calloutProperties.calloutContent !== undefined)
-					{
-					calloutInstance.mxmlContent = calloutProperties.calloutContent;
-					newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-					CALLOUT_CONTENT_PROPERTY_FLAG, true);
-					}
-					
-					if (calloutProperties.calloutLayout !== undefined)
-					{
-					calloutInstance.layout = calloutProperties.calloutLayout;
-					newCalloutProperties = BitFlagUtil.update(newCalloutProperties, 
-					CALLOUT_LAYOUT_PROPERTY_FLAG, true);
-					}
-					*/
-					if (calloutProperties.horizontalPosition !== undefined)
-					{
-						calloutInstance.horizontalPosition = calloutProperties.horizontalPosition;
-						newCalloutProperties = BitFlagUtil.update(newCalloutProperties, HORIZONTAL_POSITION_PROPERTY_FLAG, true);
-					}
-					
-					if (calloutProperties.verticalPosition !== undefined)
-					{
-						calloutInstance.verticalPosition = calloutProperties.verticalPosition;
-						newCalloutProperties = BitFlagUtil.update(newCalloutProperties, VERTICAL_POSITION_PROPERTY_FLAG, true);
-					}
-					
-					calloutProperties = newCalloutProperties;
-				}
-			}
-		}
-		
-		override protected function attachSkin():void
-		{
-			super.attachSkin();
-			if (!dropDown && !("dropDown" in skin)) dropDown = new ClassFactory(CallOut);
-		}
-		
-		
-		private function handleDropDownOpen(event:DropDownEvent):void
-		{
-			if (!callout) setCallout(createDynamicPartInstance("dropDown") as CallOut);
-			if (!callout) return;
-			
-			if(topCallOut != null)
-				if(topCallOut.owner != null)
-					(this.topCallOut.owner as CallOutButton).subCallOut = callout;
-			
-			addEventListener(Event.REMOVED_FROM_STAGE, handleButtonRemoved);
-			callout.open(this, false);
-		}
-		
-		private function handleDropDownClose(event:DropDownEvent):void
-		{
-			if (!callout) return;
-			
-			removeEventListener(Event.REMOVED_FROM_STAGE, handleButtonRemoved);
-			callout.close();
-		}
-		
-		private function handleCalloutOpen(event:PopUpEvent):void
-		{
-			dispatchEvent(new DropDownEvent(DropDownEvent.OPEN));
-		}
-		
-		private function handleCalloutClose(event:PopUpEvent):void
-		{
-			if (dropDownController.isOpen) closeDropDown();
-			
-			/*if (calloutDestructionPolicy == ContainerDestructionPolicy.AUTO)
-			destroyCallout();*/
-			
-			dispatchEvent(new DropDownEvent(DropDownEvent.CLOSE));
-		}
-		
-		private function handleButtonRemoved(event:Event):void
-		{
-			if (!isDropDownOpen) return;
-			
-			callout.visible = false;
-			closeDropDown();
-		}
-		
-		
-		public function get isDropDownOpen():Boolean
-		{
-			return dropDownController ? dropDownController.isOpen : false;
-		}
-		
-		public function openDropDown():void
-		{
-			dropDownController.openDropDown();
-		}
-		
-		public function closeDropDown():void
-		{
-			dropDownController.closeDropDown(false);
-		}
-		
-		public function updatePopUpPosition():void
-		{
-			callout.updatePopUpPosition();
-		}
-	}
-}

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/086add29/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/src/spark/components/CallOutPosition.as b/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
deleted file mode 100644
index a25826a..0000000
--- a/frameworks/projects/experimental/src/spark/components/CallOutPosition.as
+++ /dev/null
@@ -1,96 +0,0 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  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
-{
-    // for asdoc
-    [Experimental]
-
-/**
-	 *  The CalloutPosition calss defines the enumeration of 
-	 *  horizontal and vertical positions of the Callout component
-	 *  relative to the owner.
-	 * 
-	 *  @see spark.components.Callout
-	 *  @see spark.components.Callout#horizontalPosition
-	 *  @see spark.components.Callout#verticalPosition
-	 * 
-	 *  @langversion 3.0
-	 *  @playerversion AIR 3
-	 *  @productversion Flex 4.6
-	 */
-	public final class CallOutPosition
-	{
-		
-		/**
-		 *  Position the trailing edge of the callout before the leading edge of the owner.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const BEFORE:String = "before";
-		
-		/**
-		 *  Position the leading edge of the callout at the leading edge of the owner.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const START:String = "start";
-		
-		/**
-		 *  Position the horizontalCenter of the callout to the horizontalCenter of the owner.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const MIDDLE:String = "middle";
-		
-		/**
-		 *  Position the trailing edge of the callout at the trailing edge of the owner.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const END:String = "end";
-		
-		/**
-		 *  Position the leading edge of the callout after the trailing edge of the owner.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const AFTER:String = "after";
-		
-		/**
-		 *  Position the callout on the exterior of the owner where the callout 
-		 *  requires the least amount of resizing to fit.
-		 * 
-		 *  @langversion 3.0
-		 *  @playerversion AIR 3
-		 *  @productversion Flex 4.6
-		 */
-		public static const AUTO:String = "auto";
-		
-	}
-}
\ No newline at end of file


[20/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'callout' into develop

Posted by jm...@apache.org.
Merge branch 'callout' into develop


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/c1a38748
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/c1a38748
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/c1a38748

Branch: refs/heads/release4.11.0
Commit: c1a38748a54292ef11b58fef99977f2cfc5e2f1c
Parents: e9b3aab df8e5d1
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 09:12:53 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 09:12:53 2013 +0200

----------------------------------------------------------------------
 frameworks/projects/experimental/manifest.xml   |    4 -
 .../experimental/src/ExperimentalClasses.as     |    3 -
 .../src/spark/components/ArrowDirection.as      |   85 -
 .../src/spark/components/CallOut.as             | 1561 ------------------
 .../src/spark/components/CallOutButton.as       |  362 ----
 .../src/spark/components/CallOutPosition.as     |   96 --
 .../src/spark/components/ArrowDirection.as      |    6 +
 .../spark/src/spark/components/Callout.as       |   25 +-
 .../spark/src/spark/components/CalloutButton.as |   16 +-
 .../src/spark/components/CalloutPosition.as     |    7 +
 .../spark/src/spark/skins/spark/CalloutSkin.as  |    1 +
 .../skins/spark/supportClasses/CalloutArrow.as  |    1 +
 12 files changed, 46 insertions(+), 2121 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/c1a38748/frameworks/projects/experimental/src/ExperimentalClasses.as
----------------------------------------------------------------------


[15/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - added line about mobile callout

Posted by jm...@apache.org.
added line about mobile callout


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/0b85494c
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/0b85494c
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/0b85494c

Branch: refs/heads/release4.11.0
Commit: 0b85494cf497da64f9e4d897eb44da91d505727c
Parents: 6b09552
Author: Justin Mclean <jm...@apache.org>
Authored: Tue Oct 8 14:39:38 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Tue Oct 8 14:39:38 2013 +1100

----------------------------------------------------------------------
 RELEASE_NOTES | 1 +
 1 file changed, 1 insertion(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/0b85494c/RELEASE_NOTES
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 365a725..e6b9106 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -48,6 +48,7 @@ SDK Changes
 - New experimental mobile spark datagrid.
 - Updated OSMF swc to latest version (2.0)
 - Renamed experimental supportClazzes package to be supportClasses. 
+- Mobile Callout moved to spark and can be used in Desktop and Browser apps.
 
 Compiler changes
 ------------------


[19/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into develop

Posted by jm...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into develop


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/e9b3aabf
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/e9b3aabf
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/e9b3aabf

Branch: refs/heads/release4.11.0
Commit: e9b3aabf40a839016f050faa9c01c30efdfe9f51
Parents: 891df75 9c0607a
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 09:11:11 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 09:11:11 2013 +0200

----------------------------------------------------------------------
 README                                          |  23 ++--
 RELEASE_NOTES                                   |   5 +
 .../mx/controls/listClasses/AdvancedListBase.as |   4 +
 .../experimental/src/ExperimentalClasses.as     |   4 +-
 .../supportClasses/AnimationTarget.as           |  68 ++++++++++
 .../supportClazzes/AnimationTarget.as           |  68 ----------
 .../src/spark/containers/DeferredGroup.as       |   2 +-
 .../src/spark/containers/NavigatorGroup.as      |   2 +-
 .../supportClasses/DeferredCreationPolicy.as    | 130 +++++++++++++++++++
 .../supportClazzes/DeferredCreationPolicy.as    | 130 -------------------
 .../AnimationNavigatorLayoutBase.as             |   2 +-
 mustella/patch_testing_loop.sh                  |  35 +++++
 mustella/run_mustella_on_git_status.sh          |  37 ++++++
 mustella/test_patch.sh                          |  59 +++++++++
 mustella/test_patch_by_email.sh                 |  58 +++++++++
 patch_testing_loop.sh                           |  33 -----
 run_mustella_on_git_status.sh                   |  35 -----
 test_patch.sh                                   |  57 --------
 test_patch_by_email.sh                          |  56 --------
 19 files changed, 416 insertions(+), 392 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e9b3aabf/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
----------------------------------------------------------------------
diff --cc frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
index 722f80d,0425917..8740889
--- a/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
+++ b/frameworks/projects/experimental/src/spark/containers/DeferredGroup.as
@@@ -50,14 -50,11 +50,14 @@@ package spark.container
  	import spark.layouts.BasicLayout;
  	import spark.layouts.supportClasses.LayoutBase;
  	
- 	import spark.containers.supportClazzes.DeferredCreationPolicy;
+ 	import spark.containers.supportClasses.DeferredCreationPolicy;
  	
  	use namespace mx_internal;
 -	
 -	//--------------------------------------
 +
 +// for asdoc
 +[Experimental]
 +
 +//--------------------------------------
  	//  Events
  	//--------------------------------------
  	

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e9b3aabf/frameworks/projects/experimental/src/spark/containers/NavigatorGroup.as
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e9b3aabf/frameworks/projects/experimental/src/spark/containers/supportClasses/DeferredCreationPolicy.as
----------------------------------------------------------------------
diff --cc frameworks/projects/experimental/src/spark/containers/supportClasses/DeferredCreationPolicy.as
index 0000000,954abd9..3d9fcc3
mode 000000,100644..100644
--- a/frameworks/projects/experimental/src/spark/containers/supportClasses/DeferredCreationPolicy.as
+++ b/frameworks/projects/experimental/src/spark/containers/supportClasses/DeferredCreationPolicy.as
@@@ -1,0 -1,128 +1,130 @@@
+ ////////////////////////////////////////////////////////////////////////////////
+ //
+ //  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.containers.supportClasses
+ {
 -	
+ 
 -	/**
++    // for asdoc
++    [Experimental]
++
++/**
+ 	 *  The DeferredCreationPolicy class defines the constant values
+ 	 *  for the <code>creationPolicy</code> property of the DeferedGroup class.
+ 	 *
+ 	 *  @see spark.containers.DeferredGroup#creationPolicy
+ 	 *  
+ 	 *  @langversion 3.0
+ 	 *  @playerversion Flash 10
+ 	 *  @playerversion AIR 1.5
+ 	 *  @productversion Flex 4
+ 	 */
+ 	public class DeferredCreationPolicy
+ 	{
+ 		
+ 		
+ 		
+ 		//--------------------------------------------------------------------------
+ 		//
+ 		//  Class constants
+ 		//
+ 		//--------------------------------------------------------------------------
+ 		
+ 		/**
+ 		 *  Immediately create all descendants.
+ 		 *
+ 		 *  <p>Avoid using this <code>creationPolicy</code> because
+ 		 *  it increases the startup time of your application.
+ 		 *  There is usually no good reason to create components at startup
+ 		 *  which the user cannot see.
+ 		 *  If you are using this policy so that you can "push" data into
+ 		 *  hidden components at startup, you should instead design your
+ 		 *  application so that the data is stored in data variables
+ 		 *  and components which are created later "pull" in this data,
+ 		 *  via databinding or an <code>initialize</code> handler.</p>
+ 		 *  
+ 		 *  @langversion 3.0
+ 		 *  @playerversion Flash 9
+ 		 *  @playerversion AIR 1.1
+ 		 *  @productversion Flex 3
+ 		 */
+ 		public static const ALL:String = "all";
+ 		
+ 		/**
+ 		 *  Construct all decendants immediately but only inialize those
+ 		 *  that are visible.
+ 		 *  
+ 		 *  <p>This is useful if you using the container as a dataProvider
+ 		 *  to a MenuBar, as the MenuBar requires all the children to be created
+ 		 *  to get the correct dataProvider to drive its content.</p>
+ 		 * 
+ 		 *  @langversion 3.0
+ 		 *  @playerversion Flash 9
+ 		 *  @playerversion AIR 1.1
+ 		 *  @productversion Flex 3
+ 		 */
+ 		public static const CONSTRUCT:String = "construct";
+ 		
+ 		/**
+ 		 *  Only construct the immediate descendants and initialize
+ 		 *  those that are visible.
+ 		 * 
+ 		 *  @langversion 3.0
+ 		 *  @playerversion Flash 9
+ 		 *  @playerversion AIR 1.1
+ 		 *  @productversion Flex 3
+ 		 */
+ 		public static const VISIBLE:String = "visible";
+ 		
+ 		/**
+ 		 *  Do not create any children.
+ 		 *
+ 		 *  <p>With this <code>creationPolicy</code>, it is the developer's
+ 		 *  responsibility to programmatically create the children 
+ 		 *  from the UIComponentDescriptors by calling
+ 		 *  <code>createComponentsFromDescriptors()</code>
+ 		 *  on the parent container.</p>
+ 		 *  
+ 		 *  @langversion 3.0
+ 		 *  @playerversion Flash 9
+ 		 *  @playerversion AIR 1.1
+ 		 *  @productversion Flex 3
+ 		 */
+ 		public static const NONE:String = "none";
+ 		
+ 		
+ 		
+ 		//--------------------------------------------------------------------------
+ 		//
+ 		//  Constructor
+ 		//
+ 		//--------------------------------------------------------------------------
+ 		
+ 		/**
+ 		 *  Constructor
+ 		 *  
+ 		 *  @langversion 3.0
+ 		 *  @playerversion Flash 9
+ 		 *  @playerversion AIR 1.1
+ 		 *  @productversion Flex 3
+ 		 */
+ 		public function DeferredCreationPolicy()
+ 		{
+ 			
+ 		}
+ 	}
+ }

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/e9b3aabf/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
----------------------------------------------------------------------
diff --cc frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
index 9b77301,aa1fc3b..f02ad0b
--- a/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
+++ b/frameworks/projects/experimental/src/spark/layouts/supportClasses/AnimationNavigatorLayoutBase.as
@@@ -25,12 -25,9 +25,12 @@@ package spark.layouts.supportClasse
  	import spark.effects.easing.Linear;
  	import spark.effects.easing.Sine;
  	
- 	import spark.components.supportClazzes.AnimationTarget;
+ 	import spark.components.supportClasses.AnimationTarget;
  
 -	/**
 +// for asdoc
 +[Experimental]
 +
 +/**
  	 *  A AnimationNavigatorLayoutBase class is a base class for navigator layouts
  	 *  that can animation between indices.
  	 * 


[17/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - moved mustella shell scripts to mustella directory

Posted by jm...@apache.org.
moved mustella shell scripts to mustella directory


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/9c0607a2
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/9c0607a2
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/9c0607a2

Branch: refs/heads/release4.11.0
Commit: 9c0607a230b4cb4cad27e74d00409110ea5f4734
Parents: 223bdb9
Author: Justin Mclean <jm...@apache.org>
Authored: Tue Oct 8 17:54:58 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Tue Oct 8 17:54:58 2013 +1100

----------------------------------------------------------------------
 mustella/patch_testing_loop.sh         | 35 +++++++++++++++++
 mustella/run_mustella_on_git_status.sh | 37 ++++++++++++++++++
 mustella/test_patch.sh                 | 59 +++++++++++++++++++++++++++++
 mustella/test_patch_by_email.sh        | 58 ++++++++++++++++++++++++++++
 patch_testing_loop.sh                  | 33 ----------------
 run_mustella_on_git_status.sh          | 35 -----------------
 test_patch.sh                          | 57 ----------------------------
 test_patch_by_email.sh                 | 56 ---------------------------
 8 files changed, 189 insertions(+), 181 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/mustella/patch_testing_loop.sh
----------------------------------------------------------------------
diff --git a/mustella/patch_testing_loop.sh b/mustella/patch_testing_loop.sh
new file mode 100755
index 0000000..4dddc84
--- /dev/null
+++ b/mustella/patch_testing_loop.sh
@@ -0,0 +1,35 @@
+#!/bin/bash
+################################################################################
+##
+##  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.
+##
+################################################################################
+##
+## patch_test_loop keeps running test_patch_by_email.sh every
+## 10 minutes
+##
+
+cd ..
+
+while [ 1 ]
+do
+    echo "checking email at `date`" 
+    sh ./mustella/test_patch_by_email.sh
+    echo "going to sleep for a bit"
+    sleep 10m
+    echo "done sleeping"
+done
+

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/mustella/run_mustella_on_git_status.sh
----------------------------------------------------------------------
diff --git a/mustella/run_mustella_on_git_status.sh b/mustella/run_mustella_on_git_status.sh
new file mode 100644
index 0000000..a5236cc
--- /dev/null
+++ b/mustella/run_mustella_on_git_status.sh
@@ -0,0 +1,37 @@
+#!/bin/bash
+################################################################################
+##
+##  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.
+##
+################################################################################
+##
+## run_mustella_on_git_status.sh - runs git status, then runs 
+## mini_run.sh -changes and runs mini_run-failures if there are failures
+## mpte: does not build the sdk.  Assumes you did that already
+
+cd ..
+
+git status >gitstatus.txt
+cd ./mustella/utilities/MustellaTestChooser/src
+"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" MustellaTestChooser-app.xml -- -file
+cd ../../../..
+if [ -s mustella/changes.txt ]
+then
+    cd mustella
+    sh ./test_changes.sh
+    cd ..
+fi
+

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/mustella/test_patch.sh
----------------------------------------------------------------------
diff --git a/mustella/test_patch.sh b/mustella/test_patch.sh
new file mode 100755
index 0000000..f7d43a2
--- /dev/null
+++ b/mustella/test_patch.sh
@@ -0,0 +1,59 @@
+#!/bin/bash
+################################################################################
+##
+##  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.
+##
+################################################################################
+##
+## test_patch.sh - creates changes.txt, runs mini_run.sh -changes and 
+## runs mini_run-failures if there are failures
+##
+
+cd ..
+
+if [ $# -lt 1 ]
+    then
+	echo "usage: test_patch.sh <patch_filename>"
+	exit
+fi
+echo "running patch for $2"
+git apply $1
+git status >gitstatus.txt
+cd mustella/utilities/MustellaTestChooser/src
+"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" MustellaTestChooser-app.xml -- -file
+cd ../../../..
+if [ -s mustella/changes.txt ]
+then
+    if [ $# -gt 1 ]
+    then
+        mutt -s "Patch Received: running tests" $2 <mustella/changes.txt
+    fi 
+    ant main checkintests
+	rc=$?
+	if [[ $rc != 0 ]] ; then
+		exit $rc
+	fi
+	cd mustella
+    if [ $# -lt 2 ]
+    then
+	    sh ./test_changes.sh
+    else
+        sh ./test_changes.sh $2 $1
+    fi
+	cd ..
+fi
+git checkout .
+

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/mustella/test_patch_by_email.sh
----------------------------------------------------------------------
diff --git a/mustella/test_patch_by_email.sh b/mustella/test_patch_by_email.sh
new file mode 100755
index 0000000..f6366731
--- /dev/null
+++ b/mustella/test_patch_by_email.sh
@@ -0,0 +1,58 @@
+#!/bin/bash
+################################################################################
+##
+##  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.
+##
+################################################################################
+##
+## test_patch_by_email.sh gets email, finds patches, saves them to files 
+## runs test_patch
+##
+
+cd ..
+
+rm /var/spool/mail/mustellarunner
+fetchmail
+if [ -f "/var/spool/mail/mustellarunner" ]
+then
+cd ./mustella/utilities/PatchExtractor/src
+echo "launching patch extractor"
+"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" PatchExtractor-app.xml -- c:/cygwin/var/spool/mail/mustellarunner
+cd ../../../..
+gotone=0
+for file in *.patch
+do
+    git pull --rebase
+    gotone=1
+    break;
+done
+if [ gotone == 0 ] ; then
+    echo "no patches"
+    exit 2
+fi
+
+for file in *.patch
+do
+d=`dirname $file`
+b=`basename $file .patch`
+read replyAddr < $d/$b.reply
+sh ./mustella/test_patch.sh $file $replyAddr
+rm $file
+rm $replyAddr
+done
+else
+    echo "no messages"
+fi

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/patch_testing_loop.sh
----------------------------------------------------------------------
diff --git a/patch_testing_loop.sh b/patch_testing_loop.sh
deleted file mode 100755
index 62b2de1..0000000
--- a/patch_testing_loop.sh
+++ /dev/null
@@ -1,33 +0,0 @@
-#!/bin/bash
-################################################################################
-##
-##  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.
-##
-################################################################################
-##
-## patch_test_loop keeps running test_patch_by_email.sh every
-## 10 minutes
-##
-
-while [ 1 ]
-do
-    echo "checking email at `date`" 
-    sh test_patch_by_email.sh
-    echo "going to sleep for a bit"
-    sleep 10m
-    echo "done sleeping"
-done
-

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/run_mustella_on_git_status.sh
----------------------------------------------------------------------
diff --git a/run_mustella_on_git_status.sh b/run_mustella_on_git_status.sh
deleted file mode 100644
index 35f8f61..0000000
--- a/run_mustella_on_git_status.sh
+++ /dev/null
@@ -1,35 +0,0 @@
-#!/bin/bash
-################################################################################
-##
-##  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.
-##
-################################################################################
-##
-## run_mustella_on_git_status.sh - runs git status, then runs 
-## mini_run.sh -changes and runs mini_run-failures if there are failures
-## mpte: does not build the sdk.  Assumes you did that already
-
-git status >gitstatus.txt
-cd mustella/utilities/MustellaTestChooser/src
-"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" MustellaTestChooser-app.xml -- -file
-cd ../../../..
-if [ -s mustella/changes.txt ]
-then
-	cd mustella
-        sh ./test_changes.sh
-	cd ..
-fi
-

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/test_patch.sh
----------------------------------------------------------------------
diff --git a/test_patch.sh b/test_patch.sh
deleted file mode 100755
index c34338f..0000000
--- a/test_patch.sh
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/bin/bash
-################################################################################
-##
-##  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.
-##
-################################################################################
-##
-## test_patch.sh - creates changes.txt, runs mini_run.sh -changes and 
-## runs mini_run-failures if there are failures
-##
-
-if [ $# -lt 1 ]
-    then
-	echo "usage: test_patch.sh <patch_filename>"
-	exit
-fi
-echo "running patch for $2"
-git apply $1
-git status >gitstatus.txt
-cd mustella/utilities/MustellaTestChooser/src
-"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" MustellaTestChooser-app.xml -- -file
-cd ../../../..
-if [ -s mustella/changes.txt ]
-then
-    if [ $# -gt 1 ]
-    then
-        mutt -s "Patch Received: running tests" $2 <mustella/changes.txt
-    fi 
-    ant main checkintests
-	rc=$?
-	if [[ $rc != 0 ]] ; then
-		exit $rc
-	fi
-	cd mustella
-        if [ $# -lt 2 ]
-        then
-	    sh ./test_changes.sh
-        else
-            sh ./test_changes.sh $2 $1
-        fi
-	cd ..
-fi
-git checkout .
-

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9c0607a2/test_patch_by_email.sh
----------------------------------------------------------------------
diff --git a/test_patch_by_email.sh b/test_patch_by_email.sh
deleted file mode 100755
index 2710c0b..0000000
--- a/test_patch_by_email.sh
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-################################################################################
-##
-##  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.
-##
-################################################################################
-##
-## test_patch_by_email.sh gets email, finds patches, saves them to files 
-## runs test_patch
-##
-
-rm /var/spool/mail/mustellarunner
-fetchmail
-if [ -f "/var/spool/mail/mustellarunner" ]
-then
-cd mustella/utilities/PatchExtractor/src
-echo "launching patch extractor"
-"$AIR_HOME/bin/adl" -runtime "$AIR_HOME/runtimes/air/win" PatchExtractor-app.xml -- c:/cygwin/var/spool/mail/mustellarunner
-cd ../../../..
-gotone=0
-for file in *.patch
-do
-    git pull --rebase
-    gotone=1
-    break;
-done
-if [ gotone == 0 ] ; then
-    echo "no patches"
-    exit 2
-fi
-
-for file in *.patch
-do
-d=`dirname $file`
-b=`basename $file .patch`
-read replyAddr < $d/$b.reply
-sh test_patch.sh $file $replyAddr
-rm $file
-rm $replyAddr
-done
-else
-    echo "no messages"
-fi


[24/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - added recent resolved JIRA issues to release notes

Posted by jm...@apache.org.
added recent resolved JIRA issues to release notes


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/a98f6044
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/a98f6044
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/a98f6044

Branch: refs/heads/release4.11.0
Commit: a98f604452dd07efd52cfc090c7c2fdd15eecb5b
Parents: 9b9332b
Author: Justin Mclean <jm...@apache.org>
Authored: Wed Oct 9 02:19:34 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Wed Oct 9 02:19:34 2013 +1100

----------------------------------------------------------------------
 RELEASE_NOTES | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/a98f6044/RELEASE_NOTES
----------------------------------------------------------------------
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
index 365a725..e5dcc46 100644
--- a/RELEASE_NOTES
+++ b/RELEASE_NOTES
@@ -48,6 +48,7 @@ SDK Changes
 - New experimental mobile spark datagrid.
 - Updated OSMF swc to latest version (2.0)
 - Renamed experimental supportClazzes package to be supportClasses. 
+- Mobile Callout moved to spark and can be used in Desktop and Browser apps.
 
 Compiler changes
 ------------------
@@ -64,6 +65,8 @@ Bug Fixes
 
 JIRA Issue Number and Summary                                                                                        
 -------------------------------------------------------------------------------------------------------------------
+FLEX-33807  DateValidator class (mx.validators.DateValidator) incorrectly validating date
+FLEX-33803  Mark experimental components with the experimental metadata tag
 FLEX-33801  Missing embedded examples in ASDOC on flex.apache.org/asdoc/
 FLEX-33789  Logical error: self-reference in GridHeaderViewLayout
 FLEX-33783  mxmlc -help returns 1


[07/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'develop' into callout

Posted by jm...@apache.org.
Merge branch 'develop' into callout


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/3e23c769
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/3e23c769
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/3e23c769

Branch: refs/heads/release4.11.0
Commit: 3e23c769a3a2bcead78fb6db82ca629b9331d95e
Parents: 0d6e7b3 6e0cb6c
Author: mamsellem <ma...@systar.com>
Authored: Mon Oct 7 21:41:26 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Mon Oct 7 21:41:26 2013 +0200

----------------------------------------------------------------------
 RELEASE_NOTES                                   | 12 ++-
 build/check_sigs.sh                             | 77 ++++++++++++++++++
 build/deploy_release_candidate.sh               | 82 ++++++++++++++++++++
 build/make_release_branch.sh                    | 49 ++++++++++++
 build/tag_release_candidate.sh                  | 47 +++++++++++
 frameworks/downloads.xml                        | 26 ++-----
 .../itemRenderers/MenuBarItemRenderer.mxml      | 41 +++++-----
 .../itemRenderers/MenuCoreItemRenderer.as       |  2 +
 .../itemRenderers/MenuItemRenderer.mxml         | 41 +++++-----
 .../experimental/src/spark/skins/AlertSkin.mxml | 41 +++++-----
 .../src/spark/skins/ColorPickerButtonSkin.mxml  | 41 +++++-----
 .../src/spark/skins/ColorPickerSkin.mxml        | 42 +++++-----
 .../src/spark/skins/MenuBarSkin.mxml            | 41 +++++-----
 .../experimental/src/spark/skins/MenuSkin.mxml  | 41 +++++-----
 .../src/spark/skins/ProgressBarSkin.mxml        | 41 +++++-----
 15 files changed, 434 insertions(+), 190 deletions(-)
----------------------------------------------------------------------



[10/25] FIXED https://issues.apache.org/jira/browse/FLEX-33350 - mobile Callout moved to spark - Added borderColor and borderThickness styles to Callout - Desktop & Mobile Callout uses same s:Callout - MobileSkin refactored - new ActionScriptSkinBase

Posted by jm...@apache.org.
http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as b/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
new file mode 100644
index 0000000..d3b1357
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/skins/spark/CalloutSkin.as
@@ -0,0 +1,743 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.skins.spark
+{
+
+import flash.display.BlendMode;
+import flash.display.GradientType;
+import flash.display.Graphics;
+import flash.display.Sprite;
+import flash.events.Event;
+
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+import mx.events.EffectEvent;
+import mx.events.FlexEvent;
+import mx.utils.ColorUtil;
+
+import spark.components.ArrowDirection;
+import spark.components.Callout;
+import spark.components.ContentBackgroundAppearance;
+import spark.components.Group;
+import spark.core.SpriteVisualElement;
+import spark.effects.Fade;
+import spark.primitives.RectangularDropShadow;
+import spark.skins.ActionScriptSkinBase;
+import spark.skins.spark.assets.CalloutContentBackground;
+import spark.skins.spark.supportClasses.CalloutArrow;
+
+
+use namespace mx_internal;
+
+/**
+ *  The default skin class for the Spark Callout component in mobile
+ *  applications.
+ * 
+ *  <p>The <code>contentGroup</code> lies above a <code>backgroundColor</code> fill
+ *  which frames the <code>contentGroup</code>. The position and size of the frame 
+ *  adjust based on the host component <code>arrowDirection</code>, leaving
+ *  space for the <code>arrow</code> to appear on the outside edge of the
+ *  frame.</p>
+ * 
+ *  <p>The <code>arrow</code> skin part is not positioned by the skin. Instead,
+ *  the Callout component positions the arrow relative to the owner in
+ *  <code>updateSkinDisplayList()</code>. This method assumes that Callout skin
+ *  and the <code>arrow</code> use the same coordinate space.</p>
+ *  
+ *  @see spark.components.Callout
+ *  
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */ 
+public class CalloutSkin extends ActionScriptSkinBase
+{
+    mx_internal static const BACKGROUND_GRADIENT_BRIGHTNESS_TOP:int = 15;
+    
+    mx_internal static const BACKGROUND_GRADIENT_BRIGHTNESS_BOTTOM:int = -60;
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Constructor. 
+     * 
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    public function CalloutSkin()
+    {
+        super();
+        
+        dropShadowAlpha = 0.7;
+
+                // default DPI_160
+        backgroundCornerRadius = 6;
+        contentBackgroundInsetClass = CalloutContentBackground;
+        backgroundGradientHeight = 83;
+        frameThickness = 6;
+        arrowWidth = 26;
+        arrowHeight = 13;
+        contentCornerRadius = 4;
+        dropShadowBlurX = 12;
+        dropShadowBlurY = 12;
+        dropShadowDistance = 2;
+        highlightWeight = 0.5;
+
+         /*
+                backgroundCornerRadius = 8;
+                contentBackgroundInsetClass = CalloutContentBackground;
+                backgroundGradientHeight = 110;
+                frameThickness = 6;
+                arrowWidth = 26;
+                arrowHeight = 13;
+                contentCornerRadius = 5;
+                dropShadowBlurX = 16;
+                dropShadowBlurY = 16;
+                dropShadowDistance = 3;
+                highlightWeight = 1;
+          */
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+    
+    /** 
+     *  @copy spark.skins.spark.ApplicationSkin#hostComponent
+     */
+    public var hostComponent:Callout;
+    
+    /**
+     *  Enables a RectangularDropShadow behind the <code>backgroundColor</code> frame.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var dropShadowVisible:Boolean = true;
+    
+    /**
+     *  Enables a vertical linear gradient in the <code>backgroundColor</code> frame. This
+     *  gradient fill is drawn across both the arrow and the frame. By default,
+     *  the gradient brightens the background color by 15% and darkens it by 60%.
+     * 
+     *  @default true
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var useBackgroundGradient:Boolean = true;
+    
+    /**
+     *  Corner radius used for the <code>contentBackgroundColor</code> fill.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var contentCornerRadius:uint;
+    
+    /**
+     *  A class reference to an FXG class that is layered underneath the
+     *  <code>contentGroup</code>. The instance of this class is sized to match the
+     *  <code>contentGroup</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var contentBackgroundInsetClass:Class;
+    
+    /**
+     *  Corner radius of the <code>backgroundColor</code> "frame".
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var backgroundCornerRadius:Number;
+    
+    /**
+     *  The thickness of the <code>backgroundColor</code> "frame" that surrounds the
+     *  <code>contentGroup</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var frameThickness:Number;
+    
+    /**
+     *  Color of the border stroke around the <code>backgroundColor</code> "frame".
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    mx_internal var borderColor:uint  = 0;
+
+    /**
+     *  Thickness of the border stroke around the <code>backgroundColor</code>
+     *  "frame".
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    mx_internal var borderThickness:Number = NaN;
+
+    /**
+     *  Width of the arrow in vertical directions. This property also controls
+     *  the height of the arrow in horizontal directions.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var arrowWidth:Number;
+    
+    /**
+     *  Height of the arrow in vertical directions. This property also controls
+     *  the width of the arrow in horizontal directions.
+     *  
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var arrowHeight:Number;
+    
+    /**
+     *  @private
+     *  Instance of the contentBackgroundClass
+     */
+    mx_internal var contentBackgroundGraphic:SpriteVisualElement;
+    
+    /**
+     *  @private
+     *  Tracks changes to the skin state to support the fade out tranisition 
+     *  when closed;
+     */
+    mx_internal var isOpen:Boolean;
+    
+    private var backgroundGradientHeight:Number;
+    
+    private var contentMask:Sprite;
+    
+    private var backgroundFill:SpriteVisualElement;
+    
+    private var dropShadow:RectangularDropShadow;
+    
+    private var dropShadowBlurX:Number;
+    
+    private var dropShadowBlurY:Number;
+    
+    private var dropShadowDistance:Number;
+    
+    private var dropShadowAlpha:Number;
+    
+    private var fade:Fade;
+    
+    private var highlightWeight:Number;
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Skin parts
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @copy spark.components.SkinnableContainer#contentGroup
+     */
+    public var contentGroup:Group;
+    
+    /**
+     * @copy spark.components.Callout#arrow
+     */
+    public var arrow:UIComponent;
+
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden methods
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     * @private
+     */
+    override protected function createChildren():void
+    {
+        super.createChildren();
+        
+        if (dropShadowVisible)
+        {
+            dropShadow = new RectangularDropShadow();
+            dropShadow.angle = 90;
+            dropShadow.distance = dropShadowDistance;
+            dropShadow.blurX = dropShadowBlurX;
+            dropShadow.blurY = dropShadowBlurY;
+            dropShadow.tlRadius = dropShadow.trRadius = dropShadow.blRadius = 
+                dropShadow.brRadius = backgroundCornerRadius;
+            dropShadow.mouseEnabled = false;
+            dropShadow.alpha = dropShadowAlpha;
+            addChild(dropShadow);
+        }
+        
+        // background fill placed above the drop shadow
+        backgroundFill = new SpriteVisualElement();
+        addChild(backgroundFill);
+        
+        // arrow
+        if (!arrow)
+        {
+            arrow = new CalloutArrow();
+            arrow.id = "arrow";
+            arrow.styleName = this;
+            addChild(arrow);
+        }
+        
+        // contentGroup
+        if (!contentGroup)
+        {
+            contentGroup = new Group();
+            contentGroup.id = "contentGroup";
+            addChild(contentGroup);
+        }
+
+        borderThickness = getStyle("borderThickness");
+        borderColor = getStyle("borderColor");
+
+    }
+    
+    /**
+     * @private
+     */
+    override protected function commitProperties():void
+    {
+        super.commitProperties();
+        
+        // add or remove the contentBackgroundGraphic
+        var contentBackgroundAppearance:String = getStyle("contentBackgroundAppearance");
+        
+        if (contentBackgroundAppearance == ContentBackgroundAppearance.INSET)
+        {
+            // create the contentBackgroundGraphic
+            if (!contentBackgroundGraphic && contentBackgroundInsetClass)
+            {
+                contentBackgroundGraphic = new contentBackgroundInsetClass() as SpriteVisualElement;
+                
+                // with the current skin structure, contentBackgroundGraphic is
+                // always the last child
+                addChild(contentBackgroundGraphic);
+            }
+        }
+        else if (contentBackgroundGraphic)
+        {
+            // if already created, remove the graphic for "flat" and "none"
+            removeChild(contentBackgroundGraphic);
+            contentBackgroundGraphic = null;
+        }
+        
+        // always invalidate to accomodate arrow direction changes
+        invalidateSize();
+        invalidateDisplayList();
+    }
+    
+    /**
+     * @private
+     */
+    override protected function measure():void
+    {
+        super.measure();
+
+        var borderWeight:Number = isNaN(borderThickness) ? 0 : borderThickness;
+        var frameAdjustment:Number = (frameThickness + borderWeight) * 2;
+        
+        var arrowMeasuredWidth:Number;
+        var arrowMeasuredHeight:Number;
+        
+        // pad the arrow so that the edges are within the background corner radius
+        if (isArrowHorizontal)
+        {
+            arrowMeasuredWidth = arrowHeight;
+            arrowMeasuredHeight = arrowWidth + (backgroundCornerRadius * 2);
+        }
+        else if (isArrowVertical)
+        {
+            arrowMeasuredWidth = arrowWidth + (backgroundCornerRadius * 2);
+            arrowMeasuredHeight = arrowHeight;
+        }
+        
+        // count the contentGroup size and frame size
+        measuredMinWidth = contentGroup.measuredMinWidth + frameAdjustment;
+        measuredMinHeight = contentGroup.measuredMinHeight + frameAdjustment;
+        
+        measuredWidth = contentGroup.getPreferredBoundsWidth() + frameAdjustment;
+        measuredHeight = contentGroup.getPreferredBoundsHeight() + frameAdjustment;
+        
+        // add the arrow size based on the arrowDirection
+        if (isArrowHorizontal)
+        {
+            measuredMinWidth += arrowMeasuredWidth;
+            measuredMinHeight = Math.max(measuredMinHeight, arrowMeasuredHeight);
+            
+            measuredWidth += arrowMeasuredWidth;
+            measuredHeight = Math.max(measuredHeight, arrowMeasuredHeight);
+        }
+        else if (isArrowVertical)
+        {
+            measuredMinWidth += Math.max(measuredMinWidth, arrowMeasuredWidth);
+            measuredMinHeight += arrowMeasuredHeight;
+            
+            measuredWidth = Math.max(measuredWidth, arrowMeasuredWidth);
+            measuredHeight += arrowMeasuredHeight;
+        }
+    }
+    
+    /**
+     *  @private
+     *  SkinnaablePopUpContainer skins must dispatch a 
+     *  FlexEvent.STATE_CHANGE_COMPLETE event for the component to properly
+     *  update the skin state.
+     */
+    override protected function commitCurrentState():void
+    {
+        super.commitCurrentState();
+        
+        var isNormal:Boolean = (currentState == "normal");
+        var isDisabled:Boolean = (currentState == "disabled")
+        
+        // play a fade out if the callout was previously open
+        if (!(isNormal || isDisabled) && isOpen)
+        {
+            if (!fade)
+            {
+                fade = new Fade();
+                fade.target = this;
+                fade.duration = 200;
+                fade.alphaTo = 0;
+            }
+            
+            // BlendMode.LAYER while fading out
+            blendMode = BlendMode.LAYER;
+            
+            // play a short fade effect
+            fade.addEventListener(EffectEvent.EFFECT_END, stateChangeComplete);
+            fade.play();
+            
+            isOpen = false;
+        }
+        else
+        {
+            isOpen = isNormal || isDisabled;
+            
+            // handle re-opening the Callout while fading out
+            if (fade && fade.isPlaying)
+            {
+                // Do not dispatch a state change complete.
+                // SkinnablePopUpContainer handles state interruptions.
+                fade.removeEventListener(EffectEvent.EFFECT_END, stateChangeComplete);
+                fade.stop();
+            }
+            
+            if (isDisabled)
+            {
+                // BlendMode.LAYER to allow CalloutArrow BlendMode.ERASE
+                blendMode = BlendMode.LAYER;
+                
+                alpha = 0.5;
+            }
+            else
+            {
+                // BlendMode.NORMAL for non-animated state transitions
+                blendMode = BlendMode.NORMAL;
+                
+                if (isNormal)
+                    alpha = 1;
+                else
+                    alpha = 0;
+            }
+            
+            stateChangeComplete();
+        }
+    }
+    
+    /**
+     * @private
+     */
+    override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.drawBackground(unscaledWidth, unscaledHeight);
+        
+        var frameEllipseSize:Number = backgroundCornerRadius * 2;
+        
+        // account for borderThickness center stroke alignment
+        var showBorder:Boolean = !isNaN(borderThickness);
+        var borderWeight:Number = showBorder ? borderThickness : 0;
+        
+        // contentBackgroundGraphic already accounts for the arrow position
+        // use it's positioning instead of recalculating based on unscaledWidth
+        // and unscaledHeight
+        var frameX:Number = Math.floor(contentGroup.getLayoutBoundsX() - frameThickness) - (borderWeight / 2);
+        var frameY:Number = Math.floor(contentGroup.getLayoutBoundsY() - frameThickness) - (borderWeight / 2);
+        var frameWidth:Number = contentGroup.getLayoutBoundsWidth() + (frameThickness * 2) + borderWeight;
+        var frameHeight:Number = contentGroup.getLayoutBoundsHeight() + (frameThickness * 2) + borderWeight;
+        
+        var backgroundColor:Number = getStyle("backgroundColor");
+        var backgroundAlpha:Number = getStyle("backgroundAlpha");
+        
+        var bgFill:Graphics = backgroundFill.graphics;
+        bgFill.clear();
+        
+        if (showBorder)
+            bgFill.lineStyle(borderThickness, borderColor, 1, true);
+        
+        if (useBackgroundGradient)
+        {
+            // top color is brighter if arrowDirection == ArrowDirection.UP
+            var backgroundColorTop:Number = ColorUtil.adjustBrightness2(backgroundColor, 
+                BACKGROUND_GRADIENT_BRIGHTNESS_TOP);
+            var backgroundColorBottom:Number = ColorUtil.adjustBrightness2(backgroundColor, 
+                BACKGROUND_GRADIENT_BRIGHTNESS_BOTTOM);
+            
+            // max gradient height = backgroundGradientHeight
+            colorMatrix.createGradientBox(unscaledWidth, backgroundGradientHeight,
+                Math.PI / 2, 0, 0);
+            
+            bgFill.beginGradientFill(GradientType.LINEAR,
+                [backgroundColorTop, backgroundColorBottom],
+                [backgroundAlpha, backgroundAlpha],
+                [0, 255],
+                colorMatrix);
+        }
+        else
+        {
+            bgFill.beginFill(backgroundColor, backgroundAlpha);
+        }
+        
+        bgFill.drawRoundRect(frameX, frameY, frameWidth,
+            frameHeight, frameEllipseSize, frameEllipseSize);
+        bgFill.endFill();
+        
+        // draw content background styles
+        var contentBackgroundAppearance:String = getStyle("contentBackgroundAppearance");
+        
+        if (contentBackgroundAppearance != ContentBackgroundAppearance.NONE)
+        {
+            var contentEllipseSize:Number = contentCornerRadius * 2;
+            var contentBackgroundAlpha:Number = getStyle("contentBackgroundAlpha");
+            var contentWidth:Number = contentGroup.getLayoutBoundsWidth();
+            var contentHeight:Number = contentGroup.getLayoutBoundsHeight();
+            
+            // all appearance values except for "none" use a mask
+            if (!contentMask)
+                contentMask = new SpriteVisualElement();
+            
+            contentGroup.mask = contentMask;
+            
+            // draw contentMask in contentGroup coordinate space
+            var maskGraphics:Graphics = contentMask.graphics;
+            maskGraphics.clear();
+            maskGraphics.beginFill(0, 1);
+            maskGraphics.drawRoundRect(0, 0, contentWidth, contentHeight,
+                contentEllipseSize, contentEllipseSize);
+            maskGraphics.endFill();
+            
+            // reset line style to none
+            if (showBorder)
+                bgFill.lineStyle(NaN);
+            
+            // draw the contentBackgroundColor
+            bgFill.beginFill(getStyle("contentBackgroundColor"),
+                contentBackgroundAlpha);
+            bgFill.drawRoundRect(contentGroup.getLayoutBoundsX(),
+                contentGroup.getLayoutBoundsY(),
+                contentWidth, contentHeight, contentEllipseSize, contentEllipseSize);
+            bgFill.endFill();
+            
+            if (contentBackgroundGraphic)
+                contentBackgroundGraphic.alpha = contentBackgroundAlpha;
+        }
+        else // if (contentBackgroundAppearance == CalloutContentBackgroundAppearance.NONE))
+        {
+            // remove the mask
+            if (contentMask)
+            {
+                contentGroup.mask = null;
+                contentMask = null;
+            }
+        }
+        
+        // draw highlight in the callout when the arrow is hidden
+        if (useBackgroundGradient && !isArrowHorizontal && !isArrowVertical)
+        {
+            // highlight width spans the callout width minus the corner radius
+            var highlightWidth:Number = frameWidth - frameEllipseSize;
+            var highlightX:Number = frameX + backgroundCornerRadius;
+            var highlightOffset:Number = (highlightWeight * 1.5);
+            
+            // straight line across the top
+            bgFill.lineStyle(highlightWeight, 0xFFFFFF, 0.2 * backgroundAlpha);
+            bgFill.moveTo(highlightX, highlightOffset);
+            bgFill.lineTo(highlightX + highlightWidth, highlightOffset);
+        }
+    }
+    
+    /**
+     * @private
+     */
+    override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.layoutContents(unscaledWidth, unscaledHeight);
+        
+        // pad the arrow so that the edges are within the background corner radius
+        if (isArrowHorizontal)
+        {
+            arrow.width = arrowHeight;
+            arrow.height = arrowWidth + (backgroundCornerRadius * 2);
+        }
+        else if (isArrowVertical)
+        {
+            arrow.width = arrowWidth + (backgroundCornerRadius * 2);
+            arrow.height = arrowHeight;
+        }
+        
+        setElementSize(backgroundFill, unscaledWidth, unscaledHeight);
+        setElementPosition(backgroundFill, 0, 0);
+        
+        var frameX:Number = 0;
+        var frameY:Number = 0;
+        var frameWidth:Number = unscaledWidth;
+        var frameHeight:Number = unscaledHeight;
+        
+        switch (hostComponent.arrowDirection)
+        {
+            case ArrowDirection.UP:
+                frameY = arrow.height;
+                frameHeight -= arrow.height;
+                break;
+            case ArrowDirection.DOWN:
+                frameHeight -= arrow.height;
+                break;
+            case ArrowDirection.LEFT:
+                frameX = arrow.width;
+                frameWidth -= arrow.width;
+                break;
+            case ArrowDirection.RIGHT:
+                frameWidth -= arrow.width;
+                break;
+            default:
+                // no arrow, content takes all available space
+                break;
+        }
+        
+        if (dropShadow)
+        {
+            setElementSize(dropShadow, frameWidth, frameHeight);
+            setElementPosition(dropShadow, frameX, frameY);
+        }
+        
+        // Show frameThickness by inset of contentGroup
+        var borderWeight:Number = isNaN(borderThickness) ? 0 : borderThickness;
+        var contentBackgroundAdjustment:Number = frameThickness + borderWeight;
+        
+        var contentBackgroundX:Number = frameX + contentBackgroundAdjustment;
+        var contentBackgroundY:Number = frameY + contentBackgroundAdjustment;
+        
+        contentBackgroundAdjustment = contentBackgroundAdjustment * 2;
+        var contentBackgroundWidth:Number = frameWidth - contentBackgroundAdjustment;
+        var contentBackgroundHeight:Number = frameHeight - contentBackgroundAdjustment;
+        
+        if (contentBackgroundGraphic)
+        {
+            setElementSize(contentBackgroundGraphic, contentBackgroundWidth, contentBackgroundHeight);
+            setElementPosition(contentBackgroundGraphic, contentBackgroundX, contentBackgroundY);
+        }
+        
+        setElementSize(contentGroup, contentBackgroundWidth, contentBackgroundHeight);
+        setElementPosition(contentGroup, contentBackgroundX, contentBackgroundY);
+        
+        // mask position is in the contentGroup coordinate space
+        if (contentMask)
+            setElementSize(contentMask, contentBackgroundWidth, contentBackgroundHeight);
+    }
+    
+    override public function styleChanged(styleProp:String):void
+    {
+        super.styleChanged(styleProp);
+        
+        var allStyles:Boolean = !styleProp || styleProp == "styleName";
+        
+        if (allStyles || (styleProp == "contentBackgroundAppearance"))
+            invalidateProperties();
+        
+        if (allStyles || (styleProp == "backgroundAlpha"))
+        {
+            var backgroundAlpha:Number = getStyle("backgroundAlpha");
+            
+            // Use BlendMode.LAYER to allow CalloutArrow to erase the dropShadow
+            // when the Callout background is transparent
+            blendMode = (backgroundAlpha < 1) ? BlendMode.LAYER : BlendMode.NORMAL;
+        }
+
+    }
+    
+    /**
+     * @private
+     */
+    mx_internal function get isArrowHorizontal():Boolean
+    {
+        return (hostComponent.arrowDirection == ArrowDirection.LEFT
+            || hostComponent.arrowDirection == ArrowDirection.RIGHT);
+    }
+    
+    /**
+     * @private
+     */
+    mx_internal function get isArrowVertical():Boolean
+    {
+        return (hostComponent.arrowDirection == ArrowDirection.UP
+            || hostComponent.arrowDirection == ArrowDirection.DOWN);
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Event handlers
+    //
+    //--------------------------------------------------------------------------
+    
+    private function stateChangeComplete(event:Event=null):void
+    {
+        if (fade && event)
+            fade.removeEventListener(EffectEvent.EFFECT_END, stateChangeComplete);
+        
+        // SkinnablePopUpContainer relies on state changes for open and close
+        dispatchEvent(new FlexEvent(FlexEvent.STATE_CHANGE_COMPLETE));
+    }
+}
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/spark/skins/spark/assets/CalloutContentBackground.fxg
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/spark/assets/CalloutContentBackground.fxg b/frameworks/projects/spark/src/spark/skins/spark/assets/CalloutContentBackground.fxg
new file mode 100644
index 0000000..8442b96
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/skins/spark/assets/CalloutContentBackground.fxg
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+  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.
+
+-->
+
+<Graphic version="2.0" xmlns="http://ns.adobe.com/fxg/2008"
+	scaleGridLeft="12" scaleGridRight="588" scaleGridTop="30" scaleGridBottom="388">
+
+	<!-- invisible fix for scaling -->
+	<Rect x="0" y="399" width="600" height="1">
+		<fill>
+			<SolidColor color="#ffffff" alpha="0"/>
+		</fill>
+	</Rect>
+    
+	<!-- Content Shading Top -->
+	<Rect x="0" y="0" width="600" height="20"
+			topLeftRadiusX="10" topLeftRadiusY="10"
+			topRightRadiusX="10" topRightRadiusY="10">
+		<fill>
+			<LinearGradient  rotation="90">
+				<GradientEntry ratio="0" color="#000000" alpha="0.6"/>
+				<GradientEntry ratio="0.5" color="#000000" alpha="0"/>
+			</LinearGradient>
+		</fill>
+	</Rect>
+		
+	<!-- Content Highlight -->
+	<Rect x="1" y="1" width="598" height="398"
+			radiusX="10" radiusY="10">
+		<stroke>
+			<SolidColorStroke color="#FFFFFF" alpha="0.8"
+								weight="2"/>
+		</stroke>
+	</Rect>
+</Graphic>

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as b/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
new file mode 100644
index 0000000..825fd1e
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/skins/spark/supportClasses/CalloutArrow.as
@@ -0,0 +1,423 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.skins.spark.supportClasses
+{
+import flash.display.BlendMode;
+import flash.display.GradientType;
+import flash.display.Graphics;
+import flash.display.GraphicsPathCommand;
+import flash.display.Sprite;
+
+import mx.core.DPIClassification;
+import mx.core.FlexGlobals;
+import mx.core.IVisualElement;
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+import mx.utils.ColorUtil;
+
+import spark.components.Application;
+import spark.components.ArrowDirection;
+import spark.components.Callout;
+import spark.skins.ActionScriptSkinBase;
+import spark.skins.spark.CalloutSkin;
+
+use namespace mx_internal;
+
+/**
+ *  The arrow skin part for CalloutSkin.
+ *
+ *  @see spark.skin.mobile.CalloutSkin
+ *
+ *  @langversion 3.0
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.6
+ */
+public class CalloutArrow extends UIComponent
+{
+    public function CalloutArrow()
+    {
+        super();
+
+        useBackgroundGradient = true;
+
+        var applicationDPI:Number = Application(FlexGlobals.topLevelApplication).applicationDPI;
+
+        // Copy DPI-specific values from CalloutSkin
+        switch (applicationDPI)
+        {
+            case DPIClassification.DPI_320:
+            {
+                // Note provisional may need changes
+                gap = 32;
+                backgroundGradientHeight = 440;
+                highlightWeight = 4;
+
+                break;
+            }
+            case DPIClassification.DPI_480:
+            {
+                // Note provisional may need changes
+                gap = 24;
+                backgroundGradientHeight = 330;
+                highlightWeight = 3;
+
+                break;
+            }
+            case DPIClassification.DPI_320:
+            {
+                gap = 16;
+                backgroundGradientHeight = 220;
+                highlightWeight = 2;
+
+                break;
+            }
+            case DPIClassification.DPI_240:
+            {
+                gap = 12;
+                backgroundGradientHeight = 165;
+                highlightWeight = 1;
+
+                break;
+            }
+            case DPIClassification.DPI_120:
+            {
+                // Note provisional may need changes
+                gap = 6;
+                backgroundGradientHeight = 83;
+                highlightWeight = 1;
+
+                break;
+            }
+            default:
+            {
+                // default DPI_160
+                gap = 8;
+                backgroundGradientHeight = 110;
+                highlightWeight = 1;
+
+                break;
+            }
+        }
+    }
+
+    /**
+     *  A gap on the frame-adjacent side of the arrow graphic to avoid
+     *  drawing past the CalloutSkin backgroundCornerRadius.
+     *
+     *  <p>The default implementation matches the gap value with the
+     *  <code>backgroundCornerRadius</code> value in <code>CalloutSkin</code>.</p>
+     *
+     *  @see spark.skins.mobile.CalloutSkin#backgroundCornerRadius
+     *
+     *  @langversion 3.0
+     *  @playerversion AIR 3
+     *  @productversion Flex 4.6
+     */
+    protected var gap:Number;
+    /**
+     *  @copy spark.skins.mobile.CalloutSkin#backgroundGradientHeight
+     */
+    protected var backgroundGradientHeight:Number;
+    /**
+     *  @copy spark.skins.mobile.CalloutSkin#useBackgroundGradient
+     */
+    protected var useBackgroundGradient:Boolean;
+    /**
+     *  @copy spark.skins.mobile.CalloutSkin#highlightWeight
+     */
+    private var highlightWeight:Number;
+    /**
+     *  @private
+     *  A sibling of the arrow used to erase the drop shadow in CalloutSkin
+     */
+    private var eraseFill:Sprite;
+
+    /**
+     * @private
+     */
+    override protected function createChildren():void
+    {
+        super.createChildren();
+
+        // eraseFill has the same position and arrow shape in order to erase
+        // the drop shadow under the arrow when backgroundAlpha < 1
+        eraseFill = new Sprite();
+        eraseFill.blendMode = BlendMode.ERASE;
+
+        // layer eraseFill below the arrow 
+        parent.addChildAt(eraseFill, parent.getChildIndex(this));
+    }
+
+    /**
+     * @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+        graphics.clear();
+        eraseFill.graphics.clear();
+
+        var calloutSkin:Object = parent;
+        var hostComponent:Callout = calloutSkin.hostComponent;
+        var arrowDirection:String = hostComponent.arrowDirection;
+
+        if (arrowDirection == ArrowDirection.NONE)
+            return;
+
+        // when drawing the arrow, compensate for cornerRadius via padding
+        var arrowGraphics:Graphics = this.graphics;
+        var eraseGraphics:Graphics = eraseFill.graphics;
+        var arrowWidth:Number = unscaledWidth;
+        var arrowHeight:Number = unscaledHeight;
+        var arrowX:Number = 0;
+        var arrowY:Number = 0;
+        var arrowTipX:Number = 0;
+        var arrowTipY:Number = 0;
+        var arrowEndX:Number = 0;
+        var arrowEndY:Number = 0;
+
+        var borderThickness:Number = hostComponent.getStyle("borderThickness"); // does not inherit
+        var borderColor:uint = hostComponent.getStyle("borderColor"); // does not inherit
+        var showBorder:Boolean = !isNaN(borderThickness) && borderThickness > 0;
+        var borderWeight:Number = showBorder ? borderThickness : 0;
+
+        var borderHalf:Number = borderWeight / 2;
+        var isHorizontal:Boolean = false;
+
+        if ((arrowDirection == ArrowDirection.LEFT) ||
+                (arrowDirection == ArrowDirection.RIGHT))
+        {
+            isHorizontal = true;
+
+            arrowX = -borderHalf;
+            arrowY = gap;
+            arrowHeight = arrowHeight - (gap * 2);
+
+            arrowTipX = arrowWidth - borderHalf;
+            arrowTipY = arrowY + (arrowHeight / 2);
+
+            arrowEndX = arrowX;
+            arrowEndY = arrowY + arrowHeight;
+
+            // flip coordinates to point left
+            if (arrowDirection == ArrowDirection.LEFT)
+            {
+                arrowX = arrowWidth - arrowX;
+                arrowTipX = arrowWidth - arrowTipX;
+                arrowEndX = arrowWidth - arrowEndX;
+            }
+        }
+        else
+        {
+            arrowX = gap;
+            arrowY = -borderHalf;
+            arrowWidth = arrowWidth - (gap * 2);
+
+            arrowTipX = arrowX + (arrowWidth / 2);
+            arrowTipY = arrowHeight - borderHalf;
+
+            arrowEndX = arrowX + arrowWidth;
+            arrowEndY = arrowY;
+
+            // flip coordinates to point up
+            if (hostComponent.arrowDirection == ArrowDirection.UP)
+            {
+                arrowY = arrowHeight - arrowY;
+                arrowTipY = arrowHeight - arrowTipY;
+                arrowEndY = arrowHeight - arrowEndY;
+            }
+        }
+
+        var commands:Vector.<int> = new Vector.<int>(3, true);
+        commands[0] = GraphicsPathCommand.MOVE_TO;
+        commands[1] = GraphicsPathCommand.LINE_TO;
+        commands[2] = GraphicsPathCommand.LINE_TO;
+
+        var coords:Vector.<Number> = new Vector.<Number>(6, true);
+        coords[0] = arrowX;
+        coords[1] = arrowY;
+        coords[2] = arrowTipX
+        coords[3] = arrowTipY;
+        coords[4] = arrowEndX
+        coords[5] = arrowEndY;
+
+        var backgroundColor:Number = getStyle("backgroundColor");
+        var backgroundAlpha:Number = getStyle("backgroundAlpha");
+
+        if (useBackgroundGradient)
+        {
+            var backgroundColorTop:Number = ColorUtil.adjustBrightness2(backgroundColor,
+                    CalloutSkin.BACKGROUND_GRADIENT_BRIGHTNESS_TOP);
+            var backgroundColorBottom:Number = ColorUtil.adjustBrightness2(backgroundColor,
+                    CalloutSkin.BACKGROUND_GRADIENT_BRIGHTNESS_BOTTOM);
+
+            // translate the gradient based on the arrow position
+            ActionScriptSkinBase.colorMatrix.createGradientBox(unscaledWidth,
+                    backgroundGradientHeight, Math.PI / 2, 0, -getLayoutBoundsY());
+
+            arrowGraphics.beginGradientFill(GradientType.LINEAR,
+                    [backgroundColorTop, backgroundColorBottom],
+                    [backgroundAlpha, backgroundAlpha],
+                    [0, 255],
+                    ActionScriptSkinBase.colorMatrix);
+        }
+        else
+        {
+            arrowGraphics.beginFill(backgroundColor, backgroundAlpha);
+        }
+
+        // cover the adjacent border from the callout frame
+        if (showBorder)
+        {
+            var coverX:Number = 0;
+            var coverY:Number = 0;
+            var coverWidth:Number = 0;
+            var coverHeight:Number = 0;
+
+            switch (arrowDirection)
+            {
+                case ArrowDirection.UP:
+                {
+                    coverX = arrowX;
+                    coverY = arrowY;
+                    coverWidth = arrowWidth;
+                    coverHeight = borderWeight;
+                    break;
+                }
+                case ArrowDirection.DOWN:
+                {
+                    coverX = arrowX;
+                    coverY = -borderWeight;
+                    coverWidth = arrowWidth;
+                    coverHeight = borderWeight;
+                    break;
+                }
+                case ArrowDirection.LEFT:
+                {
+                    coverX = arrowX;
+                    coverY = arrowY;
+                    coverWidth = borderWeight;
+                    coverHeight = arrowHeight;
+                    break;
+                }
+                case ArrowDirection.RIGHT:
+                {
+                    coverX = -borderWeight;
+                    coverY = arrowY;
+                    coverWidth = borderWeight;
+                    coverHeight = arrowHeight;
+                    break;
+                }
+            }
+
+            arrowGraphics.drawRect(coverX, coverY, coverWidth, coverHeight);
+        }
+
+        // erase the drop shadow from the CalloutSkin
+        if (backgroundAlpha < 1)
+        {
+            // move eraseFill to the same position as the arrow
+            eraseFill.x = getLayoutBoundsX()
+            eraseFill.y = getLayoutBoundsY();
+
+            // draw the arrow shape
+            eraseGraphics.beginFill(0, 1);
+            eraseGraphics.drawPath(commands, coords);
+            eraseGraphics.endFill();
+        }
+
+        // draw arrow path
+        if (showBorder)
+        {
+            arrowGraphics.lineStyle(borderThickness, borderColor, 1, true);
+        }
+
+
+        arrowGraphics.drawPath(commands, coords);
+        arrowGraphics.endFill();
+
+        // adjust the highlight position to the origin of the callout
+        var isArrowUp:Boolean = (arrowDirection == ArrowDirection.UP);
+        var offsetY:Number = (isArrowUp) ? unscaledHeight : -getLayoutBoundsY();
+
+        // highlight starts after the backgroundCornerRadius
+        var highlightX:Number = gap - getLayoutBoundsX();
+
+        // highlight Y position is based on the stroke weight 
+        var highlightOffset:Number = (highlightWeight * 1.5);
+        var highlightY:Number = highlightOffset + offsetY;
+
+        // highlight width spans the callout width minus the corner radius
+        var highlightWidth:Number = IVisualElement(calloutSkin).getLayoutBoundsWidth() - (gap * 2);
+
+        if (isHorizontal)
+        {
+            highlightWidth -= arrowWidth;
+
+            if (arrowDirection == ArrowDirection.LEFT)
+                highlightX += arrowWidth;
+        }
+
+        // highlight on the top edge is drawn in the arrow only in the UP direction
+        if (useBackgroundGradient)
+        {
+            if (isArrowUp)
+            {
+                // highlight follows the top edge, including the arrow
+                var rightWidth:Number = highlightWidth - arrowWidth;
+
+                // highlight style
+                arrowGraphics.lineStyle(highlightWeight, 0xFFFFFF, 0.2 * backgroundAlpha);
+
+                // in the arrow coordinate space, the highlightX must be less than 0
+                if (highlightX < 0)
+                {
+                    arrowGraphics.moveTo(highlightX, highlightY);
+                    arrowGraphics.lineTo(arrowX, highlightY);
+
+                    // compute the remaining highlight
+                    rightWidth -= (arrowX - highlightX);
+                }
+
+                // arrow highlight (adjust Y downward)
+                coords[1] = arrowY + highlightOffset;
+                coords[3] = arrowTipY + highlightOffset;
+                coords[5] = arrowEndY + highlightOffset;
+                arrowGraphics.drawPath(commands, coords);
+
+                // right side
+                if (rightWidth > 0)
+                {
+                    arrowGraphics.moveTo(arrowEndX, highlightY);
+                    arrowGraphics.lineTo(arrowEndX + rightWidth, highlightY);
+                }
+            }
+            else
+            {
+                // straight line across the top
+                arrowGraphics.lineStyle(highlightWeight, 0xFFFFFF, 0.2 * backgroundAlpha);
+                arrowGraphics.moveTo(highlightX, highlightY);
+                arrowGraphics.lineTo(highlightX + highlightWidth, highlightY);
+            }
+        }
+    }
+}
+}
\ No newline at end of file


[08/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - fix case

Posted by jm...@apache.org.
fix case


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/9f7b72f4
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/9f7b72f4
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/9f7b72f4

Branch: refs/heads/release4.11.0
Commit: 9f7b72f4e729048df315278dcae76a627eac0d2a
Parents: 6e0cb6c
Author: Tom Chiverton <to...@apache.org>
Authored: Mon Oct 7 21:44:37 2013 +0100
Committer: Tom Chiverton <to...@apache.org>
Committed: Mon Oct 7 21:44:37 2013 +0100

----------------------------------------------------------------------
 frameworks/projects/experimental/compile-config.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/9f7b72f4/frameworks/projects/experimental/compile-config.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/experimental/compile-config.xml b/frameworks/projects/experimental/compile-config.xml
index c0d7297..4cae153 100644
--- a/frameworks/projects/experimental/compile-config.xml
+++ b/frameworks/projects/experimental/compile-config.xml
@@ -25,7 +25,7 @@
             <path-element>${env.PLAYERGLOBAL_HOME}/${playerglobal.version}/playerglobal.swc</path-element>
             <path-element>../../libs/framework.swc</path-element>
             <path-element>../../libs/spark.swc</path-element>
-            <path-element>../../libs/textlayout.swc</path-element>
+            <path-element>../../libs/textLayout.swc</path-element>
         </external-library-path>
 
         <keep-as3-metadata>


[12/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into callout FIXED https://issues.apache.org/jira/browse/FLEX-33350 - mobile Callout moved to spark - Added borderColor

Posted by jm...@apache.org.
Merge branch 'develop' of https://git-wip-us.apache.org/repos/asf/flex-sdk into callout
FIXED https://issues.apache.org/jira/browse/FLEX-33350
- mobile Callout moved to spark
- Added borderColor and borderThickness styles to Callout
- Desktop & Mobile Callout uses same s:Callout
- MobileSkin refactored
   - new ActionScriptSkinBase class takes 99% of MobileSkin, and belongs to spark
   - MobileSkin inherts from ActionScriptSkinBase with few overriddes
- New skin for desktop  Callout = spark.skins.spark.CalloutSkin
  - inherits from ActionScriptSkinBase
  - duplicated from mobile skin (pure AS skin)
  - with different css settings:  lighter frame, and dark gray 1px border
  - Limitation: CalloutSkin not a SparkSkin (chromeColor has no effect)


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/891df758
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/891df758
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/891df758

Branch: refs/heads/release4.11.0
Commit: 891df758147b14003eb02ff9199482e7a5a09fe5
Parents: 074354c 320dea3
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 02:24:38 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 02:26:29 2013 +0200

----------------------------------------------------------------------
 frameworks/projects/experimental/compile-config.xml                | 2 +-
 frameworks/projects/experimental_mobile/compile-config.xml         | 2 +-
 .../src/spark/skins/mobile/supportClasses/CalloutArrow.as          | 1 -
 3 files changed, 2 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/891df758/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
----------------------------------------------------------------------
diff --cc frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
index 453068c,35f8757..ac8823d
--- a/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
+++ b/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
@@@ -20,7 -20,7 +20,6 @@@
  package spark.skins.mobile.supportClasses
  {
  import flash.display.BlendMode;
--import flash.display.DisplayObject;
  import flash.display.GradientType;
  import flash.display.Graphics;
  import flash.display.GraphicsPathCommand;


[14/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - added mention of 11.9 beta support

Posted by jm...@apache.org.
added mention of 11.9 beta support


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/6b095522
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/6b095522
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/6b095522

Branch: refs/heads/release4.11.0
Commit: 6b095522ef3a7088d712549941e34a8a96bd3b4c
Parents: c3a1552
Author: Justin Mclean <jm...@apache.org>
Authored: Tue Oct 8 14:39:08 2013 +1100
Committer: Justin Mclean <jm...@apache.org>
Committed: Tue Oct 8 14:39:08 2013 +1100

----------------------------------------------------------------------
 README | 23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/6b095522/README
----------------------------------------------------------------------
diff --git a/README b/README
index 6b8c699..2ed02f9 100644
--- a/README
+++ b/README
@@ -72,6 +72,8 @@ Getting the latest sources via git
     use the following command:
 
 	 git clone https://git-wip-us.apache.org/repos/asf/flex-tlf.git tlf
+	 cd tlf
+	 git checkout develop
 
     In an Apache Flex source code package hosted on the distribution server or
     one of its mirrors, the Text Layout Framework code is already included in
@@ -174,7 +176,7 @@ Install Prerequisites
 
         This version of Apache Flex was certified for use with AIR 3.8, and should
         be compatible with other versions of AIR newer than 3.1. However it hasn't
-        been tested on AIR 3.2, 3.3, 3.5, 3.6 or 3.7.
+        been fully tested on AIR 3.2, 3.3, 3.5, 3.6 or 3.7.
 
         Download the AIR SDK for your platform and unzip it. Set AIR_HOME to the
         absolute path of the AIR SDK directory.
@@ -183,10 +185,10 @@ Install Prerequisites
             http://www.adobe.com/support/flashplayer/downloads.html
 
         This version of Apache Flex was certified for use with Adobe Flash Player 11.1,
-        and is compatible with versions 10.2 through 11.8. It has been tested with
-        versions 11.1, 11.7 and 11.8 on Windows and Mac. It has been compiled against
-        other Adobe Flash Player versions but has not been fully tested. It has not been
-        fully tested on Linux.
+        and is compatible with versions 10.2 through 11.9 beta. It has been tested with
+        versions 11.1, 11.7, 11.8 and 11.9 beta on Windows and Mac. It has been compiled
+        against other Adobe Flash Player versions but has not been fully tested. It has
+        not been fully tested on Linux.
             
         On Windows, set FLASHPLAYER_DEBUGGER to the absolute path including the filename
         of the FlashPlayerDebugger.exe. Note the filename of flash player debugger maybe
@@ -232,6 +234,7 @@ Install Prerequisites
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_6.swc
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_7.swc
             http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_8.swc
+            http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer11-9_playerglobal.swc
             
         These can be used with Apache Flex but have not been fully tested.
         
@@ -302,7 +305,7 @@ Adobe Flash Player Version Support
 
     The Apache Flex SDK defaults to using the Adobe Flash Player 11.1. The SDK can be
     used with Flash Player versions 10.2, 10.3, 11.0, 11.1, 11.2, 11.3, 11.4, 11.5,
-    11.6, 11.7 and 11.8.
+    11.6, 11.7, 11.8 and 11.9 beta.
     
     It is recommended that you update to the latest version of Adobe Flash Player.
     Newer versions of the Adobe Flash player address security vulnerabilities, fix
@@ -344,6 +347,7 @@ Adobe Flash Player Version Support
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_6.swc
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_7.swc
     http://download.macromedia.com/get/flashplayer/updaters/11/playerglobal11_8.swc
+    http://labsdownload.adobe.com/pub/labs/flashruntimes/flashplayer/flashplayer11-9_playerglobal.swc
     
     Copy the target playerglobal.swc to the directory:
     
@@ -380,9 +384,12 @@ Adobe Flash Player Version Support
                          /playerglobal.swc 
                     /11.8
                          /playerglobal.swc  
+                    /11.9
+                         /playerglobal.swc  
+    
+    Apache Flex has been tested with Adobe Flash Player 11.1, 11.5, 11.7, 11.8 and
+    11.9 beta on Windows and Mac.
     
-    Apache Flex has been tested with Adobe Flash Player 11.1, 11.5, 11.7 and 11.8 on
-    Windows and Mac.
     Apache Flex has not been tested on Linux so some issue may exist in this release.
     
     It compiles against other Adobe Flash Player versions and is expected to work but


[11/25] git commit: [flex-sdk] [refs/heads/release4.11.0] - FIXED https://issues.apache.org/jira/browse/FLEX-33350 - mobile Callout moved to spark - Added borderColor and borderThickness styles to Callout - Desktop & Mobile Callout uses same s:Callout -

Posted by jm...@apache.org.
FIXED https://issues.apache.org/jira/browse/FLEX-33350
- mobile Callout moved to spark
- Added borderColor and borderThickness styles to Callout
- Desktop & Mobile Callout uses same s:Callout
- MobileSkin refactored
   - new ActionScriptSkinBase class takes 99% of MobileSkin, and belongs to spark
   - MobileSkin inherts from ActionScriptSkinBase with few overriddes
- New skin for desktop  Callout = spark.skins.spark.CalloutSkin
  - inherits from ActionScriptSkinBase
  - duplicated from mobile skin (pure AS skin)
  - with different css settings:  lighter frame, and dark gray 1px border
  - Limitation: CalloutSkin not a SparkSkin (chromeColor has no effect)


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/074354ca
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/074354ca
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/074354ca

Branch: refs/heads/release4.11.0
Commit: 074354ca2b78db404009bf3cf23dadb8045d7615
Parents: 3e23c76
Author: mamsellem <ma...@systar.com>
Authored: Tue Oct 8 02:23:46 2013 +0200
Committer: mamsellem <ma...@systar.com>
Committed: Tue Oct 8 02:23:46 2013 +0200

----------------------------------------------------------------------
 .../src/spark/skins/mobile/CalloutSkin.as       |   4 +
 .../skins/mobile/supportClasses/CalloutArrow.as |  19 +-
 .../skins/mobile/supportClasses/MobileSkin.as   | 756 +---------------
 frameworks/projects/spark/defaults.css          |  10 +
 frameworks/projects/spark/src/SparkClasses.as   |   2 +
 .../spark/src/spark/components/Callout.as       |  25 +
 .../src/spark/skins/ActionScriptSkinBase.as     | 853 +++++++++++++++++++
 .../spark/src/spark/skins/spark/CalloutSkin.as  | 743 ++++++++++++++++
 .../spark/assets/CalloutContentBackground.fxg   |  51 ++
 .../skins/spark/supportClasses/CalloutArrow.as  | 423 +++++++++
 10 files changed, 2121 insertions(+), 765 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as b/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
index b76696c..364327d 100644
--- a/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
+++ b/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
@@ -407,6 +407,10 @@ public class CalloutSkin extends MobileSkin
             contentGroup.id = "contentGroup";
             addChild(contentGroup);
         }
+
+        borderThickness = getStyle("borderThickness");
+        borderColor = getStyle("borderColor");
+
     }
     
     /**

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as b/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
index 35f8757..453068c 100644
--- a/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
+++ b/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as
@@ -36,7 +36,6 @@ import mx.utils.ColorUtil;
 import spark.components.Application;
 import spark.components.ArrowDirection;
 import spark.components.Callout;
-import spark.core.SpriteVisualElement;
 import spark.skins.mobile.CalloutSkin;
 
 use namespace mx_internal;
@@ -148,16 +147,7 @@ public class CalloutArrow extends UIComponent
      */
     protected var useBackgroundGradient:Boolean;
     
-    /**
-     *  @copy spark.skins.mobile.CalloutSkin#borderColor
-     */
-    protected var borderColor:Number;
-    
-    /**
-     *  @copy spark.skins.mobile.CalloutSkin#borderThickness
-     */
-    protected var borderThickness:Number = NaN;
-    
+
     /**
      *  @private
      *  A sibling of the arrow used to erase the drop shadow in CalloutSkin
@@ -208,8 +198,9 @@ public class CalloutArrow extends UIComponent
         var arrowTipY:Number = 0;
         var arrowEndX:Number = 0;
         var arrowEndY:Number = 0;
-        
-        var showBorder:Boolean = !isNaN(borderThickness);
+
+        var borderThickness:Number = getStyle("borderThickness");
+        var showBorder:Boolean = !isNaN(borderThickness) && borderThickness > 0;
         var borderWeight:Number = showBorder ? borderThickness : 0;
         var borderHalf:Number = borderWeight / 2;
         var isHorizontal:Boolean = false;
@@ -358,7 +349,7 @@ public class CalloutArrow extends UIComponent
         
         // draw arrow path
         if (showBorder)
-            arrowGraphics.lineStyle(borderThickness, borderColor, 1, true);
+            arrowGraphics.lineStyle(borderThickness, getStyle("borderColor"), 1, true);
         
         arrowGraphics.drawPath(commands, coords);
         arrowGraphics.endFill();

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as b/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as
index e0abe24..bbaeaf5 100644
--- a/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as
+++ b/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/MobileSkin.as
@@ -19,24 +19,12 @@
 
 package spark.skins.mobile.supportClasses
 {
-import flash.display.DisplayObject;
-import flash.display.GradientType;
-import flash.display.Graphics;
 import flash.geom.ColorTransform;
 import flash.geom.Matrix;
 
-import mx.core.FlexGlobals;
-import mx.core.IFlexDisplayObject;
-import mx.core.ILayoutElement;
-import mx.core.UIComponent;
 import mx.core.mx_internal;
-import mx.utils.ColorUtil;
 
-import spark.components.supportClasses.SkinnableComponent;
-import spark.components.supportClasses.StyleableTextField;
-import spark.core.DisplayObjectSharingMode;
-import spark.core.IGraphicElement;
-import spark.skins.IHighlightBitmapCaptureClient;
+import spark.skins.ActionScriptSkinBase;
 
 use namespace mx_internal;
 
@@ -50,7 +38,7 @@ use namespace mx_internal;
  *  @playerversion AIR 2.5 
  *  @productversion Flex 4.5
  */
-public class MobileSkin extends UIComponent implements IHighlightBitmapCaptureClient
+public class MobileSkin extends ActionScriptSkinBase
 {
     //--------------------------------------------------------------------------
     //
@@ -94,60 +82,10 @@ public class MobileSkin extends UIComponent implements IHighlightBitmapCaptureCl
      */
     public function MobileSkin()
     {
+        useMinimumHitArea = true;
     }
     
-    //--------------------------------------------------------------------------
-    //
-    //  Variables
-    //
-    //--------------------------------------------------------------------------
-    
-    /**
-     *  Specifies whether or not this skin should be affected by the <code>symbolColor</code> style.
-     *
-     *  @default false
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected var useSymbolColor:Boolean = false;
-    
-    /**
-     *  @private
-     *  Toggles transparent, centered hit-area if the unscaled size is less
-     *  than one-quarter inch square. Physical size is based on applicationDPI.
-     */
-    mx_internal var useMinimumHitArea:Boolean = true;
-    
-    /**
-     *  Specifies a default width. <code>measuredWidth</code> returns this value
-     *  when the computed <code>measuredWidth</code> is less than
-     *  <code>measuredDefaultWidth</code>.
-     *
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected var measuredDefaultWidth:Number = 0;
-    
-    /**
-     *  Specifies a default height. <code>measuredHeight</code> returns this value
-     *  when the computed <code>measuredHeight</code> is less than
-     *  <code>measuredDefaultHeight</code>.
-     *
-     *  @default 0
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected var measuredDefaultHeight:Number = 0;
+
     
     //----------------------------------
     //  colorMatrix
@@ -183,691 +121,7 @@ public class MobileSkin extends UIComponent implements IHighlightBitmapCaptureCl
         return _colorTransform;
     }
     
-    //----------------------------------
-    //  applicationDPI
-    //----------------------------------
 
-    /**
-     *  Returns the DPI of the application. This property can only be set in MXML on the root application.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected function get applicationDPI():Number
-    {
-        return FlexGlobals.topLevelApplication.applicationDPI;
-    }
-    
-    //----------------------------------
-    //  symbolItems
-    //----------------------------------
-    
-    /**
-     * Names of items that should have their <code>color</code> property defined by 
-     * the <code>symbolColor</code> style.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    protected function get symbolItems():Array
-    {
-        return null;
-    }
-    
-    //----------------------------------
-    //  currentState
-    //----------------------------------
-    
-    private var _currentState:String;
-    
-    /**
-     *  @private 
-     */ 
-    override public function get currentState():String
-    {
-        return _currentState;
-    }
-    
-    /**
-     *  @private 
-     */ 
-    override public function set currentState(value:String):void
-    {
-        if (value != _currentState)
-        {
-            _currentState = value;
-            commitCurrentState();
-        }
-    }
-    
-    /**
-     *  Called whenever the currentState changes. Skins should override
-     *  this function if they make any appearance changes during 
-     *  a state change.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */ 
-    protected function commitCurrentState():void
-    {
-    }
-    
-    /**
-     *  MobileSkin does not use states. Skins should override this function
-     *  to return false for states that are not implemented.
-     * 
-     * @param stateName The state name.
-     * 
-     * @return false for states that are not implemented.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */ 
-    override public function hasState(stateName:String):Boolean
-    {
-        return true;
-    }
-    
-    /**
-     *  @private
-     */ 
-    override public function setCurrentState(stateName:String,
-                                             playTransition:Boolean = true):void
-    {
-        currentState = stateName;
-    }
-    
-    /**
-     *  @private
-     */ 
-    override public function get measuredWidth():Number
-    {
-        return Math.max(super.measuredWidth, measuredDefaultWidth);
-    }
-    
-    /**
-     *  @private
-     */ 
-    override public function get measuredHeight():Number
-    {
-        return Math.max(super.measuredHeight, measuredDefaultHeight);
-    }
-    
-    /**
-     *  @private
-     */
-    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
-    {
-        graphics.clear();
-        
-        super.updateDisplayList(unscaledWidth, unscaledHeight);
-        
-        layoutContents(unscaledWidth, unscaledHeight);
-        
-        if (useSymbolColor)
-            applySymbolColor();
-        
-        if (useMinimumHitArea)
-            drawMinimumHitArea(unscaledWidth, unscaledHeight);
-        
-        drawBackground(unscaledWidth, unscaledHeight);
-    }
-    
-    /**
-     *  @private
-     *  Make the component's explicitMinWidth property override its skin's.
-     *  This is useful for cases where the skin's minWidth constrains
-     *  the skin's measured size. In those cases the user could set
-     *  explicit limits on the component itself thus relaxing the
-     *  hard-coded limits in the skin. See SDK-24741.
-     */
-    override public function get explicitMinWidth():Number
-    {
-        if (parent is SkinnableComponent)
-        {
-            var parentExplicitMinWidth:Number = SkinnableComponent(parent).explicitMinWidth;
-            if (!isNaN(parentExplicitMinWidth))
-                return parentExplicitMinWidth;
-        }
-        return super.explicitMinWidth;
-    }
-    
-    /**
-     *  @private
-     *  Make the component's explicitMinWidth property override its skin's.
-     *  This is useful for cases where the skin's minWidth constrains
-     *  the skin's measured size. In those cases the user could set
-     *  explicit limits on the component itself thus relaxing the
-     *  hard-coded limits in the skin. See SDK-24741.
-     */
-    override public function get explicitMinHeight():Number
-    {
-        if (parent is SkinnableComponent)
-        {
-            var parentExplicitMinHeight:Number = SkinnableComponent(parent).explicitMinHeight;
-            if (!isNaN(parentExplicitMinHeight))
-                return parentExplicitMinHeight;
-        }
-        return super.explicitMinHeight;
-    }
-    
-    /**
-     *  @private
-     *  Make the component's explicitMinWidth property override its skin's.
-     *  This is useful for cases where the skin's minWidth constrains
-     *  the skin's measured size. In those cases the user could set
-     *  explicit limits on the component itself thus relaxing the
-     *  hard-coded limits in the skin. See SDK-24741.
-     */
-    override public function get explicitMaxWidth():Number
-    {
-        if (parent is SkinnableComponent)
-        {
-            var parentExplicitMaxWidth:Number = SkinnableComponent(parent).explicitMaxWidth;
-            if (!isNaN(parentExplicitMaxWidth))
-                return parentExplicitMaxWidth;
-        }
-        return super.explicitMaxWidth;
-    }
-    
-    /**
-     *  @private
-     *  Make the component's explicitMinWidth property override its skin's.
-     *  This is useful for cases where the skin's minWidth constrains
-     *  the skin's measured size. In those cases the user could set
-     *  explicit limits on the component itself thus relaxing the
-     *  hard-coded limits in the skin. See SDK-24741.
-     */
-    override public function get explicitMaxHeight():Number
-    {
-        if (parent is SkinnableComponent)
-        {
-            var parentExplicitMaxHeight:Number = SkinnableComponent(parent).explicitMaxHeight;
-            if (!isNaN(parentExplicitMaxHeight))
-                return parentExplicitMaxHeight;
-        }
-        return super.explicitMaxHeight;
-    }
-    
-    //--------------------------------------------------------------------------
-    //
-    //  Class methods
-    //
-    //--------------------------------------------------------------------------
-    
-    mx_internal function drawMinimumHitArea(unscaledWidth:Number, unscaledHeight:Number):void
-    {
-        // minimum hit area is 0.25 inches square
-        var minSize:Number = applicationDPI / 4;
-        
-        // skip if skin size is larger than minimum
-        if ((unscaledWidth > minSize) && (unscaledHeight > minSize))
-            return;
-        
-        // center a transparent hit area larger than the skin
-        var hitAreaWidth:Number = Math.max(minSize, unscaledWidth);
-        var hitAreaHeight:Number = Math.max(minSize, unscaledHeight);
-        var hitAreaX:Number = (unscaledWidth - hitAreaWidth) / 2;
-        var hitAreaY:Number = (unscaledHeight - hitAreaHeight) / 2;
-        
-        graphics.beginFill(0, 0);
-        graphics.drawRect(hitAreaX, hitAreaY, hitAreaWidth, hitAreaHeight);
-        graphics.endFill();
-    }
-    
-    /**
-     *  Positions the children for this skin.
-     * 
-     *  <p>This method, along with <code>colorizeContents()</code>, is called 
-     *  by the <code>updateDisplayList()</code> method.</p>
-     * 
-     *  <p>This method positions skin parts and graphic children of the skin.  
-     *  Subclasses should override this to position their children.</p>
-     * 
-     *  @param unscaledWidth Specifies the width of the component, in pixels,
-     *  in the component's coordinates, regardless of the value of the
-     *  <code>scaleX</code> property of the component.
-     *
-     *  @param unscaledHeight Specifies the height of the component, in pixels,
-     *  in the component's coordinates, regardless of the value of the
-     *  <code>scaleY</code> property of the component.
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
-    {
-        
-    }
-    
-    /**
-     *  A helper method to set a color transform on a DisplayObject.
-     * 
-     *  @param displayObject The display object to transform
-     *  @param originalColor The original color
-     *  @param tintColor The desired color
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */
-    protected function applyColorTransform(displayObject:DisplayObject, originalColor:uint, tintColor:uint):void
-    {
-        colorTransform.redOffset = ((tintColor & (0xFF << 16)) >> 16) - ((originalColor & (0xFF << 16)) >> 16);
-        colorTransform.greenOffset = ((tintColor & (0xFF << 8)) >> 8) - ((originalColor & (0xFF << 8)) >> 8);
-        colorTransform.blueOffset = (tintColor & 0xFF) - (originalColor & 0xFF);
-        colorTransform.alphaMultiplier = alpha;
-        
-        displayObject.transform.colorTransform = colorTransform;
-    }
-    
-    /**
-     *  Renders a background for the skin.
-     * 
-     *  <p>This method, along with <code>layoutContents()</code>, is called 
-     *  by the <code>updateDisplayList()</code>.</p>
-     * 
-     *  <p>This method draws the background chromeColor.
-     *  Override this method to change the appearance of the chromeColor.</p>
-     * 
-     *  @param unscaledWidth Specifies the width of the component, in pixels,
-     *  in the component's coordinates, regardless of the value of the
-     *  <code>scaleX</code> property of the component.
-     *
-     *  @param unscaledHeight Specifies the height of the component, in pixels,
-     *  in the component's coordinates, regardless of the value of the
-     *  <code>scaleY</code> property of the component.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
-    {
-        
-    }
-    
-    /**
-     *  @private
-     */
-    mx_internal function applySymbolColor():void
-    {
-        var symbols:Array = symbolItems;
-        var len:uint = (symbols) ? symbols.length : 0;
-        
-        if (len > 0)
-        {
-            var symbolColor:uint = getStyle("symbolColor");
-            var symbolObj:Object;
-            var transformInitialized:Boolean = false;
-            
-            for (var i:uint = 0; i < len; i++)
-            {
-                symbolObj = this[symbols[i]];
-                
-                // SparkSkin assumed symbols were IFill objects
-                // with a color property. MobileSkin instead assumes symbols
-                // are DisplayObjects.
-                if (symbolObj is DisplayObject)
-                {
-                    if (!transformInitialized)
-                    {
-                        colorTransform.redOffset = ((symbolColor & (0xFF << 16)) >> 16) - DEFAULT_SYMBOL_COLOR_VALUE;
-                        colorTransform.greenOffset = ((symbolColor & (0xFF << 8)) >> 8) - DEFAULT_SYMBOL_COLOR_VALUE;
-                        colorTransform.blueOffset = (symbolColor & 0xFF) - DEFAULT_SYMBOL_COLOR_VALUE;
-                        colorTransform.alphaMultiplier = alpha;
-                        
-                        transformInitialized = true;
-                    }
-                    
-                    DisplayObject(symbolObj).transform.colorTransform = colorTransform;
-                }
-            }
-        }
-    }
-    
-    /**
-     *  A helper method to position children elements of this component.
-     * 
-     *  <p>This method is the recommended way to position children elements.  You can 
-     *  use this method instead of checking for and using
-     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
-     *  or StyleableTextField.</p>
-     * 
-     *  <p>Call this method after calling <code>setElementSize()</code></p>
-     *
-     *  @param element The child element to position.  The element could be an 
-     *  ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
-     *  DisplayObject.
-     *
-     *  @param x The x-coordinate of the child.
-     *
-     *  @param y The y-coordinate of the child.
-     *
-     *  @see #setElementSize  
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */
-    protected function setElementPosition(element:Object, x:Number, y:Number):void
-    {
-        if (element is ILayoutElement)
-        {
-            ILayoutElement(element).setLayoutBoundsPosition(x, y, false);
-        }
-        else if (element is IFlexDisplayObject)
-        {
-            IFlexDisplayObject(element).move(x, y);   
-        }
-        else
-        {
-            element.x = x;
-            element.y = y;
-        }
-    }
-    
-    /**
-     *  A helper method to size children elements of this component.
-     * 
-     *  <p>This method is the recommended way to size children elements. You can 
-     *  use this method instead of checking for and using
-     *  interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
-     *  or StyleableTextField.</p>
-     *
-     *  <p>Call this method before calling the <code>setElementPosition()</code> method.</p>
-     * 
-     *  @param element The child element to size. The element could be an 
-     *  ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
-     *  DisplayObject.
-     *
-     *  @param width The width of the child.
-     *
-     *  @param height The height of the child.
-     *
-     *  @see #setElementPosition  
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */
-    protected function setElementSize(element:Object, width:Number, height:Number):void
-    {
-        if (element is ILayoutElement)
-        {
-            ILayoutElement(element).setLayoutBoundsSize(width, height, false);
-        }
-        else if (element is IFlexDisplayObject)
-        {
-            IFlexDisplayObject(element).setActualSize(width, height);
-        }
-        else
-        {
-            element.width = width;
-            element.height = height;
-        }
-    }
-    
-    /**
-     *  A helper method to retrieve the preferred width of a child element.
-     * 
-     *  <p>This method is the recommended way to get a child element's preferred 
-     *  width. You can use this method instead of checking for and using
-     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
-     *  or StyleableTextField.</p>
-     *
-     *  @param element The child element to retrieve the width for. The element could  
-     *  be an ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
-     *  DisplayObject.
-     * 
-     *  @return The child element's preferred width.
-     *
-     *  @see #sizeElement
-     *  @see #getElementPreferredHeight  
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */
-    protected function getElementPreferredWidth(element:Object):Number
-    {
-        if (element is ILayoutElement)
-        {
-            return ILayoutElement(element).getPreferredBoundsWidth();
-        }
-        else if (element is IFlexDisplayObject)
-        {
-            return IFlexDisplayObject(element).measuredWidth;
-        }
-        else
-        {
-            return element.width;
-        }
-    }
-    
-    /**
-     *  A helper method to retrieve the preferred height of a child element.
-     * 
-     *  <p>This method is the recommended way to get a child element's preferred 
-     *  height. You can use this method instead of checking for and using
-     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
-     *  or StyleableTextField.</p>
-     *
-     *  @param element The child element to retrieve the height for. The element could  
-     *  be an ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
-     *  DisplayObject.
-     *
-     *  @return The child element's preferred height.
-     *
-     *  @see #sizeElement
-     *  @see #getElementPreferredWidth 
-     * 
-     *  @langversion 3.0
-     *  @playerversion Flash 10.1
-     *  @playerversion AIR 2.5 
-     *  @productversion Flex 4.5
-     */
-    protected function getElementPreferredHeight(element:Object):Number
-    {
-        if (element is ILayoutElement)
-        {
-            return ILayoutElement(element).getPreferredBoundsHeight();
-        }
-        else if (element is IFlexDisplayObject)
-        {
-            return IFlexDisplayObject(element).measuredHeight;
-        }
-        else
-        {
-            return element.height;
-        }
-    }
-    
-    /**
-     *  List of IDs of items that should be excluded when rendering the focus ring.
-     *  Only items of type DisplayObject or GraphicElement should be excluded. Items
-     *  of other types are ignored.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    protected function get focusSkinExclusions():Array 
-    {
-        return null;
-    }
-    
-    private static var exclusionAlphaValues:Array;
-    
-    private static var oldContentBackgroundAlpha:Number;
-    
-    private static var contentBackgroundAlphaSetLocally:Boolean;
-    
-    /**
-     *  Called before a bitmap capture is made for this skin. The default implementation
-     *  excludes items in the focusSkinExclusions array.
-     * 
-     * @return <code>true</code> if the component needs to be redrawn; otherwise <code>false</code>.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function beginHighlightBitmapCapture():Boolean
-    {
-        var exclusions:Array = focusSkinExclusions;
-        if (!exclusions)
-        {
-            if (("hostComponent" in this) && this["hostComponent"] is SkinnableComponent)
-                exclusions = SkinnableComponent(this["hostComponent"]).suggestedFocusSkinExclusions;
-        }
-        var exclusionCount:Number = (exclusions == null) ? 0 : exclusions.length;
-        
-        /* we'll store off the previous alpha of the exclusions so we
-        can restore them when we're done
-        */
-        exclusionAlphaValues = [];
-        var needRedraw:Boolean = false;
-        
-        for (var i:int = 0; i < exclusionCount; i++)        
-        {
-            // skip if the part isn't there
-            if (!(exclusions[i] in this))
-                continue;
-            
-            var ex:Object = this[exclusions[i]];
-            /* we're going to go under the covers here to try and modify alpha with the least
-            amount of disruption to the component.  For UIComponents, we go to Sprite's alpha property;
-            */
-            if (ex is UIComponent)
-            {
-                exclusionAlphaValues[i] = (ex as UIComponent).$alpha; 
-                (ex as UIComponent).$alpha = 0;
-            } 
-            else if (ex is DisplayObject)
-            {
-                exclusionAlphaValues[i] = (ex as DisplayObject).alpha; 
-                (ex as DisplayObject).alpha = 0;
-            }
-            else if (ex is IGraphicElement) 
-            {
-                /* if we're lucky, the IGE has its own DisplayObject, and we can just trip its alpha.
-                If not, we're going to have to set it to 0, and force a redraw of the whole component */
-                var ge:IGraphicElement = ex as IGraphicElement;
-                if (ge.displayObjectSharingMode == DisplayObjectSharingMode.OWNS_UNSHARED_OBJECT)
-                {
-                    exclusionAlphaValues[i] = ge.displayObject.alpha;
-                    ge.displayObject.alpha = 0;
-                }
-                else
-                {
-                    exclusionAlphaValues[i] = ge.alpha;
-                    ge.alpha = 0;
-                    needRedraw = true;
-                }
-            }
-        }
-        
-        // If we have a mostly-transparent content background, temporarily bump
-        // up the contentBackgroundAlpha so the captured bitmap includes an opaque
-        // snapshot of the background.
-        if (getStyle("contentBackgroundAlpha") < 0.5)
-        {
-            if (styleDeclaration && styleDeclaration.getStyle("contentBackgroundAlpha") !== null)
-                contentBackgroundAlphaSetLocally = true;
-            else
-                contentBackgroundAlphaSetLocally = false;
-            oldContentBackgroundAlpha = getStyle("contentBackgroundAlpha");
-            setStyle("contentBackgroundAlpha", 0.5);
-            needRedraw = true;
-        }
-        
-        /* if we excluded an IGE without its own DO, we need to update the component before grabbing the bitmap */
-        return needRedraw;
-    }
-    
-    /**
-     *  Called after a bitmap capture is made for this skin. The default implementation 
-     *  restores the items in the focusSkinExclusions array.
-     * 
-     * @return <code>true</code> if the component needs to be redrawn; otherwise <code>false</code>.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 2.5
-     *  @productversion Flex 4.5
-     */
-    public function endHighlightBitmapCapture():Boolean
-    {
-        var exclusions:Array = focusSkinExclusions;
-        if (!exclusions)
-        {
-            if (this["hostComponent"] is SkinnableComponent)
-                exclusions = SkinnableComponent(this["hostComponent"]).suggestedFocusSkinExclusions;
-        }
-        var exclusionCount:Number = (exclusions == null) ? 0 : exclusions.length;
-        var needRedraw:Boolean = false;
-        
-        for (var i:int=0; i < exclusionCount; i++)      
-        {
-            // skip if the part isn't there
-            if (!(exclusions[i] in this))
-                continue;
-            
-            var ex:Object = this[exclusions[i]];
-            if (ex is UIComponent)
-            {
-                (ex as UIComponent).$alpha = exclusionAlphaValues[i];
-            } 
-            else if (ex is DisplayObject)
-            {
-                (ex as DisplayObject).alpha = exclusionAlphaValues[i];
-            }
-            else if (ex is IGraphicElement) 
-            {
-                var ge:IGraphicElement = ex as IGraphicElement;
-                if (ge.displayObjectSharingMode == DisplayObjectSharingMode.OWNS_UNSHARED_OBJECT)
-                {
-                    ge.displayObject.alpha = exclusionAlphaValues[i];
-                }
-                else
-                {
-                    ge.alpha = exclusionAlphaValues[i];         
-                    needRedraw = true;
-                }
-            }
-        }
-        
-        exclusionAlphaValues = null;
-        
-        if (!isNaN(oldContentBackgroundAlpha))
-        {
-            if (contentBackgroundAlphaSetLocally)
-                setStyle("contentBackgroundAlpha", oldContentBackgroundAlpha);
-            else
-                clearStyle("contentBackgroundAlpha");
-            needRedraw = true;
-            oldContentBackgroundAlpha = NaN;
-        }
-        
-        return needRedraw;
-    }
+
 }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/defaults.css b/frameworks/projects/spark/defaults.css
index 754c860..0b6ba5c 100644
--- a/frameworks/projects/spark/defaults.css
+++ b/frameworks/projects/spark/defaults.css
@@ -50,6 +50,16 @@ ButtonBar
     skinClass: ClassReference("spark.skins.spark.ButtonBarSkin");
 }
 
+Callout
+{
+    backgroundColor: #ffffff;
+    contentBackgroundAppearance: flat;
+    contentBackgroundColor: #FFFFFF;
+    skinClass: ClassReference("spark.skins.spark.CalloutSkin");
+    borderColor: #3d3d3d;
+    borderThickness: 1;
+}
+
 CheckBox
 {
     skinClass: ClassReference("spark.skins.spark.CheckBoxSkin");

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/SparkClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/SparkClasses.as b/frameworks/projects/spark/src/SparkClasses.as
index 0800608..0aa207f 100644
--- a/frameworks/projects/spark/src/SparkClasses.as
+++ b/frameworks/projects/spark/src/SparkClasses.as
@@ -121,6 +121,8 @@ import spark.skins.spark.VSliderTrackSkin; VSliderTrackSkin;
 import spark.utils.TextFlowUtil; TextFlowUtil;
 
 import spark.components.ContentBackgroundAppearance;ContentBackgroundAppearance;
+import spark.skins.ActionScriptSkinBase; ActionScriptSkinBase ;
+import spark.skins.spark.CalloutSkin;  CalloutSkin;
 }
 
 }

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/spark/components/Callout.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/components/Callout.as b/frameworks/projects/spark/src/spark/components/Callout.as
index 8d81b4a..85593dd 100644
--- a/frameworks/projects/spark/src/spark/components/Callout.as
+++ b/frameworks/projects/spark/src/spark/components/Callout.as
@@ -64,6 +64,31 @@ use namespace mx_internal;
  */ 
 [Style(name="contentBackgroundAppearance", type="String", enumeration="inset,flat,none", inherit="no")]
 
+/**
+ *  Color  of the frame border  and arrow outline  of the Callout control.
+ *  @default 0
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 3.8
+ *  @productversion Flex 4.11
+ */
+
+[Style(name="borderColor", type="uint", format="Color", inherit="no", theme="spark, mobile")]
+
+/**
+ *   Thickness of the border stroke around the <code>backgroundColor</code> Callout "frame" and arrow.
+ *  Set to NaN or 0 to hide the border ;
+ *
+ *  @default NaN
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 3.8
+ *  @productversion Flex 4.11
+ */
+[Style(name="borderThickness", type="Number", format="Length", inherit="no", theme="spark,mobile")]
+
 //--------------------------------------
 //  Other metadata
 //--------------------------------------

http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/074354ca/frameworks/projects/spark/src/spark/skins/ActionScriptSkinBase.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/spark/src/spark/skins/ActionScriptSkinBase.as b/frameworks/projects/spark/src/spark/skins/ActionScriptSkinBase.as
new file mode 100644
index 0000000..93a49ba
--- /dev/null
+++ b/frameworks/projects/spark/src/spark/skins/ActionScriptSkinBase.as
@@ -0,0 +1,853 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.skins
+{
+import flash.display.DisplayObject;
+import flash.geom.ColorTransform;
+import flash.geom.Matrix;
+
+import mx.core.FlexGlobals;
+import mx.core.IFlexDisplayObject;
+import mx.core.ILayoutElement;
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+
+import spark.components.supportClasses.SkinnableComponent;
+import spark.core.DisplayObjectSharingMode;
+import spark.core.IGraphicElement;
+
+use namespace mx_internal;
+
+/**
+ *  ActionScript-based skin for both mobile and desktop applications.
+ *  This skin is the base class for MobileSkin.
+ *  As an optimization,  it removes state transition support.
+ * 
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5 
+ *  @productversion Flex 4.5
+ */
+public class ActionScriptSkinBase extends UIComponent implements IHighlightBitmapCaptureClient
+{
+    //--------------------------------------------------------------------------
+    //
+    //  Class constants
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Default symbol color for <code>symbolColor</code> style.
+     */
+    mx_internal static const DEFAULT_SYMBOL_COLOR_VALUE:uint = 0x00;
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+    /**
+     *  Constructor.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     * 
+     */
+    public function ActionScriptSkinBase()
+    {
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Variables
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  Specifies whether or not this skin should be affected by the <code>symbolColor</code> style.
+     *
+     *  @default false
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected var useSymbolColor:Boolean = false;
+    
+    /**
+     *  @private
+     *  Toggles transparent, centered hit-area if the unscaled size is less
+     *  than one-quarter inch square. Physical size is based on applicationDPI.
+     */
+    mx_internal var useMinimumHitArea:Boolean = false;
+    
+    /**
+     *  Specifies a default width. <code>measuredWidth</code> returns this value
+     *  when the computed <code>measuredWidth</code> is less than
+     *  <code>measuredDefaultWidth</code>.
+     *
+     *  @default 0
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected var measuredDefaultWidth:Number = 0;
+    
+    /**
+     *  Specifies a default height. <code>measuredHeight</code> returns this value
+     *  when the computed <code>measuredHeight</code> is less than
+     *  <code>measuredDefaultHeight</code>.
+     *
+     *  @default 0
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected var measuredDefaultHeight:Number = 0;
+    
+    //----------------------------------
+    //  colorMatrix
+    //----------------------------------
+    
+    private static var _colorMatrix:Matrix = new Matrix();
+    
+    /**
+     *  @private
+     */
+    mx_internal static function get colorMatrix():Matrix
+    {
+        if (!_colorMatrix)
+            _colorMatrix = new Matrix();
+        
+        return _colorMatrix;
+    }
+    
+    //----------------------------------
+    //  colorTransform
+    //----------------------------------
+    
+    private static var _colorTransform:ColorTransform;
+    
+    /**
+     *  @private
+     */
+    mx_internal static function get colorTransform():ColorTransform
+    {
+        if (!_colorTransform)
+            _colorTransform = new ColorTransform();
+        
+        return _colorTransform;
+    }
+    
+    //----------------------------------
+    //  applicationDPI
+    //----------------------------------
+
+    /**
+     *  Returns the DPI of the application. This property can only be set in MXML on the root application.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function get applicationDPI():Number
+    {
+        return FlexGlobals.topLevelApplication.applicationDPI;
+    }
+    
+    //----------------------------------
+    //  symbolItems
+    //----------------------------------
+    
+    /**
+     * Names of items that should have their <code>color</code> property defined by 
+     * the <code>symbolColor</code> style.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    protected function get symbolItems():Array
+    {
+        return null;
+    }
+    
+    //----------------------------------
+    //  currentState
+    //----------------------------------
+    
+    private var _currentState:String;
+    
+    /**
+     *  @private 
+     */ 
+    override public function get currentState():String
+    {
+        return _currentState;
+    }
+    
+    /**
+     *  @private 
+     */ 
+    override public function set currentState(value:String):void
+    {
+        if (value != _currentState)
+        {
+            _currentState = value;
+            commitCurrentState();
+        }
+    }
+    
+    /**
+     *  Called whenever the currentState changes. Skins should override
+     *  this function if they make any appearance changes during 
+     *  a state change.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */ 
+    protected function commitCurrentState():void
+    {
+    }
+    
+    /**
+     *  MobileSkin does not use states. Skins should override this function
+     *  to return false for states that are not implemented.
+     * 
+     * @param stateName The state name.
+     * 
+     * @return false for states that are not implemented.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */ 
+    override public function hasState(stateName:String):Boolean
+    {
+        return true;
+    }
+    
+    /**
+     *  @private
+     */ 
+    override public function setCurrentState(stateName:String,
+                                             playTransition:Boolean = true):void
+    {
+        currentState = stateName;
+    }
+    
+    /**
+     *  @private
+     */ 
+    override public function get measuredWidth():Number
+    {
+        return Math.max(super.measuredWidth, measuredDefaultWidth);
+    }
+    
+    /**
+     *  @private
+     */ 
+    override public function get measuredHeight():Number
+    {
+        return Math.max(super.measuredHeight, measuredDefaultHeight);
+    }
+    
+    /**
+     *  @private
+     */
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        graphics.clear();
+        
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+        
+        layoutContents(unscaledWidth, unscaledHeight);
+        
+        if (useSymbolColor)
+            applySymbolColor();
+        
+        if (useMinimumHitArea)
+            drawMinimumHitArea(unscaledWidth, unscaledHeight);
+        
+        drawBackground(unscaledWidth, unscaledHeight);
+    }
+    
+    /**
+     *  @private
+     *  Make the component's explicitMinWidth property override its skin's.
+     *  This is useful for cases where the skin's minWidth constrains
+     *  the skin's measured size. In those cases the user could set
+     *  explicit limits on the component itself thus relaxing the
+     *  hard-coded limits in the skin. See SDK-24741.
+     */
+    override public function get explicitMinWidth():Number
+    {
+        if (parent is SkinnableComponent)
+        {
+            var parentExplicitMinWidth:Number = SkinnableComponent(parent).explicitMinWidth;
+            if (!isNaN(parentExplicitMinWidth))
+                return parentExplicitMinWidth;
+        }
+        return super.explicitMinWidth;
+    }
+    
+    /**
+     *  @private
+     *  Make the component's explicitMinWidth property override its skin's.
+     *  This is useful for cases where the skin's minWidth constrains
+     *  the skin's measured size. In those cases the user could set
+     *  explicit limits on the component itself thus relaxing the
+     *  hard-coded limits in the skin. See SDK-24741.
+     */
+    override public function get explicitMinHeight():Number
+    {
+        if (parent is SkinnableComponent)
+        {
+            var parentExplicitMinHeight:Number = SkinnableComponent(parent).explicitMinHeight;
+            if (!isNaN(parentExplicitMinHeight))
+                return parentExplicitMinHeight;
+        }
+        return super.explicitMinHeight;
+    }
+    
+    /**
+     *  @private
+     *  Make the component's explicitMinWidth property override its skin's.
+     *  This is useful for cases where the skin's minWidth constrains
+     *  the skin's measured size. In those cases the user could set
+     *  explicit limits on the component itself thus relaxing the
+     *  hard-coded limits in the skin. See SDK-24741.
+     */
+    override public function get explicitMaxWidth():Number
+    {
+        if (parent is SkinnableComponent)
+        {
+            var parentExplicitMaxWidth:Number = SkinnableComponent(parent).explicitMaxWidth;
+            if (!isNaN(parentExplicitMaxWidth))
+                return parentExplicitMaxWidth;
+        }
+        return super.explicitMaxWidth;
+    }
+    
+    /**
+     *  @private
+     *  Make the component's explicitMinWidth property override its skin's.
+     *  This is useful for cases where the skin's minWidth constrains
+     *  the skin's measured size. In those cases the user could set
+     *  explicit limits on the component itself thus relaxing the
+     *  hard-coded limits in the skin. See SDK-24741.
+     */
+    override public function get explicitMaxHeight():Number
+    {
+        if (parent is SkinnableComponent)
+        {
+            var parentExplicitMaxHeight:Number = SkinnableComponent(parent).explicitMaxHeight;
+            if (!isNaN(parentExplicitMaxHeight))
+                return parentExplicitMaxHeight;
+        }
+        return super.explicitMaxHeight;
+    }
+    
+    //--------------------------------------------------------------------------
+    //
+    //  Class methods
+    //
+    //--------------------------------------------------------------------------
+    
+    mx_internal function drawMinimumHitArea(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        // minimum hit area is 0.25 inches square
+        var minSize:Number = applicationDPI / 4;
+        
+        // skip if skin size is larger than minimum
+        if ((unscaledWidth > minSize) && (unscaledHeight > minSize))
+            return;
+        
+        // center a transparent hit area larger than the skin
+        var hitAreaWidth:Number = Math.max(minSize, unscaledWidth);
+        var hitAreaHeight:Number = Math.max(minSize, unscaledHeight);
+        var hitAreaX:Number = (unscaledWidth - hitAreaWidth) / 2;
+        var hitAreaY:Number = (unscaledHeight - hitAreaHeight) / 2;
+        
+        graphics.beginFill(0, 0);
+        graphics.drawRect(hitAreaX, hitAreaY, hitAreaWidth, hitAreaHeight);
+        graphics.endFill();
+    }
+    
+    /**
+     *  Positions the children for this skin.
+     * 
+     *  <p>This method, along with <code>colorizeContents()</code>, is called 
+     *  by the <code>updateDisplayList()</code> method.</p>
+     * 
+     *  <p>This method positions skin parts and graphic children of the skin.  
+     *  Subclasses should override this to position their children.</p>
+     * 
+     *  @param unscaledWidth Specifies the width of the component, in pixels,
+     *  in the component's coordinates, regardless of the value of the
+     *  <code>scaleX</code> property of the component.
+     *
+     *  @param unscaledHeight Specifies the height of the component, in pixels,
+     *  in the component's coordinates, regardless of the value of the
+     *  <code>scaleY</code> property of the component.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.1
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        
+    }
+    
+    /**
+     *  A helper method to set a color transform on a DisplayObject.
+     * 
+     *  @param displayObject The display object to transform
+     *  @param originalColor The original color
+     *  @param tintColor The desired color
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */
+    protected function applyColorTransform(displayObject:DisplayObject, originalColor:uint, tintColor:uint):void
+    {
+        colorTransform.redOffset = ((tintColor & (0xFF << 16)) >> 16) - ((originalColor & (0xFF << 16)) >> 16);
+        colorTransform.greenOffset = ((tintColor & (0xFF << 8)) >> 8) - ((originalColor & (0xFF << 8)) >> 8);
+        colorTransform.blueOffset = (tintColor & 0xFF) - (originalColor & 0xFF);
+        colorTransform.alphaMultiplier = alpha;
+        
+        displayObject.transform.colorTransform = colorTransform;
+    }
+    
+    /**
+     *  Renders a background for the skin.
+     * 
+     *  <p>This method, along with <code>layoutContents()</code>, is called 
+     *  by the <code>updateDisplayList()</code>.</p>
+     * 
+     *  <p>This method draws the background chromeColor.
+     *  Override this method to change the appearance of the chromeColor.</p>
+     * 
+     *  @param unscaledWidth Specifies the width of the component, in pixels,
+     *  in the component's coordinates, regardless of the value of the
+     *  <code>scaleX</code> property of the component.
+     *
+     *  @param unscaledHeight Specifies the height of the component, in pixels,
+     *  in the component's coordinates, regardless of the value of the
+     *  <code>scaleY</code> property of the component.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        
+    }
+    
+    /**
+     *  @private
+     */
+    mx_internal function applySymbolColor():void
+    {
+        var symbols:Array = symbolItems;
+        var len:uint = (symbols) ? symbols.length : 0;
+        
+        if (len > 0)
+        {
+            var symbolColor:uint = getStyle("symbolColor");
+            var symbolObj:Object;
+            var transformInitialized:Boolean = false;
+            
+            for (var i:uint = 0; i < len; i++)
+            {
+                symbolObj = this[symbols[i]];
+                
+                // SparkSkin assumed symbols were IFill objects
+                // with a color property. MobileSkin instead assumes symbols
+                // are DisplayObjects.
+                if (symbolObj is DisplayObject)
+                {
+                    if (!transformInitialized)
+                    {
+                        colorTransform.redOffset = ((symbolColor & (0xFF << 16)) >> 16) - DEFAULT_SYMBOL_COLOR_VALUE;
+                        colorTransform.greenOffset = ((symbolColor & (0xFF << 8)) >> 8) - DEFAULT_SYMBOL_COLOR_VALUE;
+                        colorTransform.blueOffset = (symbolColor & 0xFF) - DEFAULT_SYMBOL_COLOR_VALUE;
+                        colorTransform.alphaMultiplier = alpha;
+                        
+                        transformInitialized = true;
+                    }
+                    
+                    DisplayObject(symbolObj).transform.colorTransform = colorTransform;
+                }
+            }
+        }
+    }
+    
+    /**
+     *  A helper method to position children elements of this component.
+     * 
+     *  <p>This method is the recommended way to position children elements.  You can 
+     *  use this method instead of checking for and using
+     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
+     *  or StyleableTextField.</p>
+     * 
+     *  <p>Call this method after calling <code>setElementSize()</code></p>
+     *
+     *  @param element The child element to position.  The element could be an 
+     *  ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
+     *  DisplayObject.
+     *
+     *  @param x The x-coordinate of the child.
+     *
+     *  @param y The y-coordinate of the child.
+     *
+     *  @see #setElementSize  
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.1
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */
+    protected function setElementPosition(element:Object, x:Number, y:Number):void
+    {
+        if (element is ILayoutElement)
+        {
+            ILayoutElement(element).setLayoutBoundsPosition(x, y, false);
+        }
+        else if (element is IFlexDisplayObject)
+        {
+            IFlexDisplayObject(element).move(x, y);   
+        }
+        else
+        {
+            element.x = x;
+            element.y = y;
+        }
+    }
+    
+    /**
+     *  A helper method to size children elements of this component.
+     * 
+     *  <p>This method is the recommended way to size children elements. You can 
+     *  use this method instead of checking for and using
+     *  interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
+     *  or StyleableTextField.</p>
+     *
+     *  <p>Call this method before calling the <code>setElementPosition()</code> method.</p>
+     * 
+     *  @param element The child element to size. The element could be an 
+     *  ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
+     *  DisplayObject.
+     *
+     *  @param width The width of the child.
+     *
+     *  @param height The height of the child.
+     *
+     *  @see #setElementPosition  
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.1
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */
+    protected function setElementSize(element:Object, width:Number, height:Number):void
+    {
+        if (element is ILayoutElement)
+        {
+            ILayoutElement(element).setLayoutBoundsSize(width, height, false);
+        }
+        else if (element is IFlexDisplayObject)
+        {
+            IFlexDisplayObject(element).setActualSize(width, height);
+        }
+        else
+        {
+            element.width = width;
+            element.height = height;
+        }
+    }
+    
+    /**
+     *  A helper method to retrieve the preferred width of a child element.
+     * 
+     *  <p>This method is the recommended way to get a child element's preferred 
+     *  width. You can use this method instead of checking for and using
+     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
+     *  or StyleableTextField.</p>
+     *
+     *  @param element The child element to retrieve the width for. The element could  
+     *  be an ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
+     *  DisplayObject.
+     * 
+     *  @return The child element's preferred width.
+     *
+     *  @see #sizeElement
+     *  @see #getElementPreferredHeight  
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.1
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */
+    protected function getElementPreferredWidth(element:Object):Number
+    {
+        if (element is ILayoutElement)
+        {
+            return ILayoutElement(element).getPreferredBoundsWidth();
+        }
+        else if (element is IFlexDisplayObject)
+        {
+            return IFlexDisplayObject(element).measuredWidth;
+        }
+        else
+        {
+            return element.width;
+        }
+    }
+    
+    /**
+     *  A helper method to retrieve the preferred height of a child element.
+     * 
+     *  <p>This method is the recommended way to get a child element's preferred 
+     *  height. You can use this method instead of checking for and using
+     *  various interfaces/classes such as ILayoutElement, IFlexDisplayObject, 
+     *  or StyleableTextField.</p>
+     *
+     *  @param element The child element to retrieve the height for. The element could  
+     *  be an ILayoutElement, IFlexDisplayObject, StyleableTextField, or a generic 
+     *  DisplayObject.
+     *
+     *  @return The child element's preferred height.
+     *
+     *  @see #sizeElement
+     *  @see #getElementPreferredWidth 
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.1
+     *  @playerversion AIR 2.5 
+     *  @productversion Flex 4.5
+     */
+    protected function getElementPreferredHeight(element:Object):Number
+    {
+        if (element is ILayoutElement)
+        {
+            return ILayoutElement(element).getPreferredBoundsHeight();
+        }
+        else if (element is IFlexDisplayObject)
+        {
+            return IFlexDisplayObject(element).measuredHeight;
+        }
+        else
+        {
+            return element.height;
+        }
+    }
+    
+    /**
+     *  List of IDs of items that should be excluded when rendering the focus ring.
+     *  Only items of type DisplayObject or GraphicElement should be excluded. Items
+     *  of other types are ignored.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function get focusSkinExclusions():Array 
+    {
+        return null;
+    }
+    
+    private static var exclusionAlphaValues:Array;
+    
+    private static var oldContentBackgroundAlpha:Number;
+    
+    private static var contentBackgroundAlphaSetLocally:Boolean;
+    
+    /**
+     *  Called before a bitmap capture is made for this skin. The default implementation
+     *  excludes items in the focusSkinExclusions array.
+     * 
+     * @return <code>true</code> if the component needs to be redrawn; otherwise <code>false</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public function beginHighlightBitmapCapture():Boolean
+    {
+        var exclusions:Array = focusSkinExclusions;
+        if (!exclusions)
+        {
+            if (("hostComponent" in this) && this["hostComponent"] is SkinnableComponent)
+                exclusions = SkinnableComponent(this["hostComponent"]).suggestedFocusSkinExclusions;
+        }
+        var exclusionCount:Number = (exclusions == null) ? 0 : exclusions.length;
+        
+        /* we'll store off the previous alpha of the exclusions so we
+        can restore them when we're done
+        */
+        exclusionAlphaValues = [];
+        var needRedraw:Boolean = false;
+        
+        for (var i:int = 0; i < exclusionCount; i++)        
+        {
+            // skip if the part isn't there
+            if (!(exclusions[i] in this))
+                continue;
+            
+            var ex:Object = this[exclusions[i]];
+            /* we're going to go under the covers here to try and modify alpha with the least
+            amount of disruption to the component.  For UIComponents, we go to Sprite's alpha property;
+            */
+            if (ex is UIComponent)
+            {
+                exclusionAlphaValues[i] = (ex as UIComponent).$alpha; 
+                (ex as UIComponent).$alpha = 0;
+            } 
+            else if (ex is DisplayObject)
+            {
+                exclusionAlphaValues[i] = (ex as DisplayObject).alpha; 
+                (ex as DisplayObject).alpha = 0;
+            }
+            else if (ex is IGraphicElement) 
+            {
+                /* if we're lucky, the IGE has its own DisplayObject, and we can just trip its alpha.
+                If not, we're going to have to set it to 0, and force a redraw of the whole component */
+                var ge:IGraphicElement = ex as IGraphicElement;
+                if (ge.displayObjectSharingMode == DisplayObjectSharingMode.OWNS_UNSHARED_OBJECT)
+                {
+                    exclusionAlphaValues[i] = ge.displayObject.alpha;
+                    ge.displayObject.alpha = 0;
+                }
+                else
+                {
+                    exclusionAlphaValues[i] = ge.alpha;
+                    ge.alpha = 0;
+                    needRedraw = true;
+                }
+            }
+        }
+        
+        // If we have a mostly-transparent content background, temporarily bump
+        // up the contentBackgroundAlpha so the captured bitmap includes an opaque
+        // snapshot of the background.
+        if (getStyle("contentBackgroundAlpha") < 0.5)
+        {
+            if (styleDeclaration && styleDeclaration.getStyle("contentBackgroundAlpha") !== null)
+                contentBackgroundAlphaSetLocally = true;
+            else
+                contentBackgroundAlphaSetLocally = false;
+            oldContentBackgroundAlpha = getStyle("contentBackgroundAlpha");
+            setStyle("contentBackgroundAlpha", 0.5);
+            needRedraw = true;
+        }
+        
+        /* if we excluded an IGE without its own DO, we need to update the component before grabbing the bitmap */
+        return needRedraw;
+    }
+    
+    /**
+     *  Called after a bitmap capture is made for this skin. The default implementation 
+     *  restores the items in the focusSkinExclusions array.
+     * 
+     * @return <code>true</code> if the component needs to be redrawn; otherwise <code>false</code>.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    public function endHighlightBitmapCapture():Boolean
+    {
+        var exclusions:Array = focusSkinExclusions;
+        if (!exclusions)
+        {
+            if (this["hostComponent"] is SkinnableComponent)
+                exclusions = SkinnableComponent(this["hostComponent"]).suggestedFocusSkinExclusions;
+        }
+        var exclusionCount:Number = (exclusions == null) ? 0 : exclusions.length;
+        var needRedraw:Boolean = false;
+        
+        for (var i:int=0; i < exclusionCount; i++)      
+        {
+            // skip if the part isn't there
+            if (!(exclusions[i] in this))
+                continue;
+            
+            var ex:Object = this[exclusions[i]];
+            if (ex is UIComponent)
+            {
+                (ex as UIComponent).$alpha = exclusionAlphaValues[i];
+            } 
+            else if (ex is DisplayObject)
+            {
+                (ex as DisplayObject).alpha = exclusionAlphaValues[i];
+            }
+            else if (ex is IGraphicElement) 
+            {
+                var ge:IGraphicElement = ex as IGraphicElement;
+                if (ge.displayObjectSharingMode == DisplayObjectSharingMode.OWNS_UNSHARED_OBJECT)
+                {
+                    ge.displayObject.alpha = exclusionAlphaValues[i];
+                }
+                else
+                {
+                    ge.alpha = exclusionAlphaValues[i];         
+                    needRedraw = true;
+                }
+            }
+        }
+        
+        exclusionAlphaValues = null;
+        
+        if (!isNaN(oldContentBackgroundAlpha))
+        {
+            if (contentBackgroundAlphaSetLocally)
+                setStyle("contentBackgroundAlpha", oldContentBackgroundAlpha);
+            else
+                clearStyle("contentBackgroundAlpha");
+            needRedraw = true;
+            oldContentBackgroundAlpha = NaN;
+        }
+        
+        return needRedraw;
+    }
+}
+}
\ No newline at end of file