Transferred from the Adobe Open Source Subversion Repository

Revision: 3243
Author:   rfrishbe@adobe.com
Date:     2008-09-17T16:14:14.399661Z

Log Message:
-----------
DataGroup/Group split work.  DataGroup is for holding data items that may require item rendering. Group only holds visual items now.  The Group APIs stay the same (numItems, addItem, etc...).  DataGroup uses the IList APIs through its dataProvider.  So the equivalent methods are now dataProvider.length, dataProvider, addItem, etc...  This is just the initial split work as there's more to come to get the files up to spec.  We will also have to visit how we deal with graphic elements in DataGroup vs. Group.  For now the implementations are roughly the same.

QE: Yes - tests may break.  please update them.
Doc: Yes
Bugs: -
Reviewer: Glenn

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/layout/BasicLayout.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/component/DataComponent.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/skin/DataComponentSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/skin/PanelSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/Flex4Classes.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/layout/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/events/FlexEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/mxml-2009-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/component/ItemsComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/gumbo-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/component/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/Graphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/skin/ListSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/manifest.xml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/DataGroup.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/GroupBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/component/Selector.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/skin/SelectorSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/core/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/layout/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/intf/ILayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/flex4test.mxml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/skin/ComplexPanelSkin.mxml</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1280664 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/SkinnableDataContainer.as
+++ frameworks/projects/spark/src/spark/components/SkinnableDataContainer.as
@@ -0,0 +1,262 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2008 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package flex.component
+{
+
+import flex.core.DataGroup;
+import flex.core.SkinnableComponent;
+import flex.intf.ILayout;
+import flex.events.FlexEvent;
+import flex.events.ItemExistenceChangedEvent;
+
+import mx.collections.IList;
+import mx.core.IFactory;
+import mx.managers.IFocusManagerContainer;
+
+/**
+ *  Dispatched prior to the dataProvider being changed.
+ */
+[Event(name="dataProviderChanging", type="flex.events.FlexEvent")]
+
+/**
+ *  Dispatched after the dataProvider has changed.
+ */
+[Event(name="dataProviderChanged", type="flex.events.FlexEvent")]
+
+[DefaultProperty("dataProvider")]
+
+/**
+ * The DataComponent class is the base class for all skinnable components that have
+ * data content. This class is not typically instantiated in MXML. It is primarily
+ * used as a base class, or as a SkinPart.
+ */
+public class DataComponent extends SkinnableComponent implements IFocusManagerContainer
+{
+    include "../core/Version.as";
+
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Constructor.
+     */
+	public function DataComponent()
+	{
+		super();
+
+		tabChildren = true;
+	}
+
+	//--------------------------------------------------------------------------
+	//
+	//  Skin Parts
+	//
+	//--------------------------------------------------------------------------
+
+	[SkinPart]
+	public var dataGroup:DataGroup;
+
+	//--------------------------------------------------------------------------
+	//
+	//  Properties
+	//
+	//--------------------------------------------------------------------------
+
+	//--------------------------------------------------------------------------
+	//
+	//  Properties proxied to dataGroup
+	//
+	//--------------------------------------------------------------------------
+
+	//----------------------------------
+	//  content
+	//----------------------------------
+
+	private var _dataProvider:*;
+
+	/**
+	 *  @copy flex.core.DataGroup#dataProvider
+	 */
+	[Bindable]
+	public function get dataProvider():IList
+	{
+		if (dataGroup)
+			return dataGroup.dataProvider;
+		else
+			return _dataProvider;
+	}
+
+	public function set dataProvider(value:IList):void
+	{
+		if (value == _dataProvider)
+			return;
+
+		_dataProvider = value;
+
+		if (dataGroup)
+			dataGroup.dataProvider = value;
+	}
+
+	//----------------------------------
+	//  layout
+	//----------------------------------
+
+	/**
+	 *  @copy flex.core.DataGroup#layout
+	 */
+
+	private var _layout:ILayout;
+
+    public function get layout():ILayout
+    {
+    	return (dataGroup) ? dataGroup.layout : _layout;
+    }
+
+    public function set layout(value:ILayout):void
+    {
+		if (value != _layout) {
+    		_layout = value;
+    		if (dataGroup) {
+    			dataGroup.layout = _layout;
+    		}
+		}
+    }
+
+	//----------------------------------
+	//  itemRenderer
+	//----------------------------------
+
+	private var _itemRenderer:IFactory;
+
+	/**
+	 *  @copy flex.core.Group#itemRenderer
+	 */
+	public function get itemRenderer():IFactory
+	{
+		if (dataGroup)
+			return dataGroup.itemRenderer;
+
+		return _itemRenderer;
+	}
+
+	public function set itemRenderer(value:IFactory):void
+	{
+		if (value == _itemRenderer)
+			return;
+
+		_itemRenderer = value;
+
+		if (dataGroup)
+			dataGroup.itemRenderer = _itemRenderer;
+	}
+
+	//----------------------------------
+	//  itemRendererFunction
+	//----------------------------------
+
+	private var _itemRendererFunction:Function;
+
+	/**
+	 *  @copy flex.core.Group#itemRendererFunction
+	 */
+	public function get itemRendererFunction():Function
+	{
+		if (dataGroup)
+			return dataGroup.itemRendererFunction;
+
+		return _itemRendererFunction;
+	}
+
+	public function set itemRendererFunction(value:Function):void
+	{
+		if (value == _itemRendererFunction)
+			return;
+
+		_itemRendererFunction = value;
+
+		if (dataGroup)
+			dataGroup.itemRendererFunction = _itemRendererFunction;
+	}
+
+	//--------------------------------------------------------------------------
+	//
+	//  Overridden methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Called when a skin part has been added or assigned.
+	 *  This method pushes the content, layout, itemRenderer, and
+	 *  itemRendererFunction properties down to the contentGroup
+	 *  skin part.
+	 */
+	override protected function partAdded(partName:String, instance:*):void
+	{
+		if (instance == dataGroup)
+		{
+			if (_dataProvider != undefined)
+			{
+				dataGroup.dataProvider = _dataProvider;
+			}
+			if (_layout != null)
+				dataGroup.layout = _layout;
+			if (_itemRenderer != null || _itemRendererFunction != null)
+			{
+				dataGroup.itemRenderer = _itemRenderer;
+				dataGroup.itemRendererFunction = _itemRendererFunction;
+			}
+
+			dataGroup.addEventListener(
+			    FlexEvent.DATA_PROVIDER_CHANGING, dataGroup_dataProviderChangingHandler);
+			dataGroup.addEventListener(
+			    FlexEvent.DATA_PROVIDER_CHANGED, dataGroup_dataProviderChangedHandler);
+		}
+	}
+
+	/**
+	 *  Called when a skin part is removed.
+	 */
+	override protected function partRemoved(partName:String, instance:*):void
+	{
+		if (instance == dataGroup)
+		{
+			dataGroup.removeEventListener(
+			    FlexEvent.DATA_PROVIDER_CHANGING, dataGroup_dataProviderChangingHandler);
+			dataGroup.removeEventListener(
+			    FlexEvent.DATA_PROVIDER_CHANGED, dataGroup_dataProviderChangedHandler);
+		}
+	}
+
+
+	//--------------------------------------------------------------------------
+	//
+	//  Event Handlers
+	//
+	//--------------------------------------------------------------------------
+
+	private function dataGroup_dataProviderChangingHandler(event:FlexEvent):void
+	{
+		// Re-dispatch the event
+		dispatchEvent(event);
+	}
+
+	private function dataGroup_dataProviderChangedHandler(event:FlexEvent):void
+	{
+		// Re-dispatch the event
+		dispatchEvent(event);
+	}
+}
+
+}


字符串拼接逻辑修改

字符串拼接逻辑修改

--- OcgSee/src/com/application/ocgsee/mediators/SearchViewMediator.as
+++ OcgSee/src/com/application/ocgsee/mediators/SearchViewMediator.as
@@ -114,7 +114,8 @@
 			var re:String="";
 			if (value != "")
 			{
-				re="(texts.name like '%" + value + "%' or texts.desc like '%" + value + "%' or datas.id='"+value+"')"
+
+				re=formatString("(texts.name like '%{0}%' or texts.desc like '%{0}%' or datas.id='{0}')",value);
 			}
 			return re;
 		}
@@ -186,7 +187,7 @@
 				case localize("system_unlimit"):
 					return "";
 			}
-			return "datas.id in(" + idList + ")";
+			return formatString("datas.id in({0})",idList);
 		}

 		private function createView():void


Transferred from the Adobe Open Source Subversion Repository

Revision: 4364
Author:   smgilson@adobe.com
Date:     2008-12-19T15:54:46.325001Z

Log Message:
-----------
Update ASDoc comments for enterState and exitState events

QE Notes: None
Doc Notes: None
Bugs: -

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/states/State.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1262427 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/states/State.as
+++ frameworks/projects/framework/src/mx/states/State.as
@@ -25,18 +25,16 @@
 //--------------------------------------

 /**
- *  Dispatched when the view state has been entered.
- *  This event is dispatched after the changes
- *  to the base view state have been applied.
+ *  Dispatched after a view state has been entered.
  *
  *  @eventType mx.events.FlexEvent.ENTER_STATE
  */
 [Event(name="enterState", type="mx.events.FlexEvent")]

 /**
- *  Dispatched before a view state is exited.
+ *  Dispatched just before a view state is exited.
  *  This event is dispatched before the changes
- *  to the base view state have been removed.
+ *  to the default view state have been removed.
  *
  *  @eventType mx.events.FlexEvent.EXIT_STATE
  */


Transferred from the Adobe Open Source Subversion Repository

Revision: 5367
Author:   rfrishbe@adobe.com
Date:     2009-03-17T22:26:35.014500Z

Log Message:
-----------
The changes here are mostly fixing some sizing issues.

For the FlashContainerPlaceholder, the first child is now MyFlexContentHolder, which extends mx.flash.FlexContentHolder but meets the invariant that it has 1 child and that child is  FlexContentHolderThumbnail, which I’ve added as a swc to the project.  I changed this by accident last time to refer to mx.flash.FlexContentHolder, when it should've referred to a concrete instance created by Flash from a swc.  I also added a chrome of 151x151 to match the FlexContentHolderThumbnail since otherwise the container itself would have no chrome at all, and this let’s it size correctly.

Also, for sizing, in a container, rather than sizing to the size of the chrome, I now size to the size of the FlexContentHolder thumbnail that all FlexContentHolder’s have.  This means in ContainerMovieClip, I don’t need to override bounds anymore.

ContainerMovieClip now implements IVisualElementContainer.

Also, I fixed a resizing event bug in UIMovieClip where the resize event was getting dispatched more than once.

QE Notes: -
Doc Notes: -
Bugs: SDK-19271, SDK-19788, SDK-19789
Reviewer: Glenn
tests: checkintests

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/FlashComponentPlaceholder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/FlashContainerPlaceholder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/build.xml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/utilities/libs/FlexContentHolderThumbnail.swc</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/UIMovieClip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/FlexContentHolder.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/utilities/src/MyFlexContentHolder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flash-integration/src/mx/flash/ContainerMovieClip.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/utilities/libs</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1250932 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/authoringsupport/src/FlashContainerPlaceholder.as
+++ frameworks/projects/authoringsupport/src/FlashContainerPlaceholder.as
@@ -11,66 +11,70 @@

 package
 {
-	import mx.containers.Canvas;
-	import mx.controls.Image;
-	import mx.flash.ContainerMovieClip;
-	import mx.flash.FlexContentHolder;
-
-	[IconFile("flash_container_icon_small.png")]
-	public class FlashContainerPlaceholder extends ContainerMovieClip
-	{
-		protected var image1:Image;
-
-		public function FlashContainerPlaceholder()
-		{
-			super();
+    import mx.containers.Canvas;
+    import mx.controls.Image;
+    import mx.flash.ContainerMovieClip;
+    import mx.flash.FlexContentHolder;
+
+    [IconFile("flash_container_icon_small.png")]
+    public class FlashContainerPlaceholder extends ContainerMovieClip
+    {
+        protected var image1:Image;
+
+        public function FlashContainerPlaceholder()
+        {
+            super();
+
+            fillContentToSize = true;
+
+            // 151, 151 is the size of the flex content holder image,
+            // so I'm going to make it that size by default.
+            graphics.beginFill(0, 0);
+            graphics.drawRect(0, 0, 151, 151);
+            graphics.endFill();

-			var fch:FlexContentHolder = new FlexContentHolder();
-			fch.percentHeight = 100;
-			fch.percentWidth = 100;
-
-	       	var canvas1:Canvas = new Canvas();
-	       	canvas1.horizontalScrollPolicy = "off";
-	       	canvas1.verticalScrollPolicy = "off";
-	       	canvas1.setStyle('borderStyle', 'solid');
-	       	canvas1.setStyle('borderThickness', '2');
-	       	canvas1.setStyle('borderColor', '0xCCCCCC');
-	       	canvas1.percentHeight = 100;
-	       	canvas1.percentWidth = 100;
-	    	canvas1.addChild(createImage());
+            var fch:FlexContentHolder = new MyFlexContentHolder();
+
+            var canvas1:Canvas = new Canvas();
+            canvas1.horizontalScrollPolicy = "off";
+            canvas1.verticalScrollPolicy = "off";
+            canvas1.setStyle('borderStyle', 'solid');
+            canvas1.setStyle('borderThickness', '2');
+            canvas1.setStyle('borderColor', '0xCCCCCC');
+            canvas1.percentHeight = 100;
+            canvas1.percentWidth = 100;
+            canvas1.addChild(createImage());

-			this.addChild(fch);
-
-			this.content = canvas1;
-		}
-
-		protected function createImage():Image
-		{
-	       	image1 = new Image();
-	       	image1.source = _embed_mxml_flash_container_icon_png;
-	       	image1.scaleContent = false;
-	       	image1.percentHeight = 100;
-	       	image1.percentWidth = 100;
-	       	image1.setStyle('horizontalAlign' , 'center');
-	       	image1.setStyle('verticalAlign' , 'middle');
-	       	return image1;
-		}
-
-		override public function setActualSize(newWidth:Number, newHeight:Number):void
-		{
-			if (image1 != null) {
-				if (newWidth < 128 || newHeight < 128)
-					image1.scaleContent = true;
-				else
-					image1.scaleContent = false;
-			}
+            this.addChild(fch);
+
+            this.content = canvas1;
+        }
+
+        protected function createImage():Image
+        {
+            image1 = new Image();
+            image1.source = _embed_mxml_flash_container_icon_png;
+            image1.scaleContent = false;
+            image1.percentHeight = 100;
+            image1.percentWidth = 100;
+            image1.setStyle('horizontalAlign' , 'center');
+            image1.setStyle('verticalAlign' , 'middle');
+            return image1;
+        }
+
+        override public function setActualSize(newWidth:Number, newHeight:Number):void
+        {
+            if (image1 != null) {
+                if (newWidth < 128 || newHeight < 128)
+                    image1.scaleContent = true;
+                else
+                    image1.scaleContent = false;
+            }

-			contentHolderObj.setActualSize(newWidth, newHeight);
-			_width = newWidth;
-			_height = newHeight;
-		}
+            super.setActualSize(newWidth, newHeight);
+        }

-		[Embed(source='flash_container_icon.png')]
-		private var _embed_mxml_flash_container_icon_png:Class;
-	}
+        [Embed(source='flash_container_icon.png')]
+        private var _embed_mxml_flash_container_icon_png:Class;
+    }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 21629
Author:   jasonsj@adobe.com
Date:     2011-07-19T23:02:20.729244Z

Log Message:
-----------
Callout
* CalloutPosition.AUTO support with automatic re-positioning/nudging (similar to PopUpAnchor)
* Fixed arrow positioning when scaling
* Fixed centering arrow on owner when owner is off screen
* Updated skins to XD design

CalloutButton
* Proxy properties before Callout is created
* Create Callout as a dynamic skin part

Skins
* CalloutViewNavigatorSkin and CalloutActionBarSkin to support ViewNavigators in Callouts
* Allow ActionBar borderClass to be optional

QE notes: Ready for visual review
Doc notes:
Bugs:
Reviewer: chiedozi
Tests run: checkintests, mustella-mobile
Is noteworthy for integration: yes

Modified Paths:
--------------
<path kind="file" action="A">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutViewNavigatorSkin.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile320/assets/CalloutContentBackground.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/defaults.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarSkin.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile240/assets/CalloutContentBackground.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile160/assets/CalloutContentBackground.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/MobileThemeClasses.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutActionBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/Callout.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1265221 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as
@@ -12,9 +12,14 @@
 package spark.skins.mobile
 {
 import flash.display.GradientType;
+import flash.display.Graphics;
 import flash.display.GraphicsPathCommand;
-
+import flash.display.Sprite;
+import flash.events.Event;
+
+import mx.core.DPIClassification;
 import mx.core.mx_internal;
+import mx.events.EffectEvent;
 import mx.events.FlexEvent;
 import mx.utils.ColorUtil;

@@ -22,7 +27,12 @@
 import spark.components.Callout;
 import spark.components.Group;
 import spark.core.SpriteVisualElement;
+import spark.effects.Fade;
+import spark.primitives.RectangularDropShadow;
 import spark.skins.mobile.supportClasses.MobileSkin;
+import spark.skins.mobile160.assets.CalloutContentBackground;
+import spark.skins.mobile240.assets.CalloutContentBackground;
+import spark.skins.mobile320.assets.CalloutContentBackground;

 use namespace mx_internal;

@@ -33,11 +43,15 @@
  *  @see spark.components.Callout
  *
  *  @langversion 3.0
- *  @playerversion AIR 2.5
- *  @productversion Flex 4.5
+ *  @playerversion AIR 3
+ *  @productversion Flex 4.5.2
  */
 public class CalloutSkin extends MobileSkin
 {
+    mx_internal static const BACKGROUND_GRADIENT_BRIGHTNESS_TOP:int = 15;
+
+    mx_internal static const BACKGROUND_GRADIENT_BRIGHTNESS_BOTTOM:int = -60;
+
     //--------------------------------------------------------------------------
     //
     //  Constructor
@@ -55,9 +69,55 @@
     {
         super();

-        // TODO (jasonsj): DPI-specific arrow size, padding
-        padding = 9;
-        cornerRadius = 9;
+        switch (applicationDPI)
+        {
+            case DPIClassification.DPI_320:
+            {
+                backgroundCornerRadius = 16;
+                contentBackgroundClass = spark.skins.mobile320.assets.CalloutContentBackground;
+                backgroundGradientHeight = 220;
+                frameSize = 20;
+                arrowWidth = 88;
+                arrowHeight = 52;
+                contentCornerRadius = 10;
+                dropShadowBlur = 80;
+                dropShadowDistance = 8;
+                highlightWeight = 2;
+
+                break;
+            }
+            case DPIClassification.DPI_240:
+            {
+                backgroundCornerRadius = 12;
+                contentBackgroundClass = spark.skins.mobile240.assets.CalloutContentBackground;
+                backgroundGradientHeight = 165;
+                frameSize = 15;
+                arrowWidth = 66;
+                arrowHeight = 39;
+                contentCornerRadius = 7;
+                dropShadowBlur = 60;
+                dropShadowDistance = 6;
+                highlightWeight = 1;
+
+                break;
+            }
+            default:
+            {
+                // default DPI_160
+                backgroundCornerRadius = 8;
+                contentBackgroundClass = spark.skins.mobile160.assets.CalloutContentBackground;
+                backgroundGradientHeight = 110;
+                frameSize = 10;
+                arrowWidth = 44;
+                arrowHeight = 26;
+                contentCornerRadius = 5;
+                dropShadowBlur = 40;
+                dropShadowDistance = 4;
+                highlightWeight = 1;
+
+                break;
+            }
+        }
     }

     //--------------------------------------------------------------------------
@@ -71,9 +131,39 @@
      */
     public var hostComponent:Callout;

-    private var padding:uint;
-
-    private var cornerRadius:uint;
+    // TODO (jasonsj): PARB these properties as protected?
+
+    mx_internal var contentCornerRadius:uint;
+
+    mx_internal var contentBackgroundClass:Class;
+
+    mx_internal var backgroundCornerRadius:Number;
+
+    mx_internal var backgroundGradientHeight:Number;
+
+    mx_internal var contentBackgroundGraphic:SpriteVisualElement;
+
+//    mx_internal var contentMask:Sprite;
+
+    mx_internal var frameSize:Number;
+
+    mx_internal var arrowWidth:Number;
+
+    mx_internal var arrowHeight:Number;
+
+    mx_internal var backgroundFill:SpriteVisualElement;
+
+    mx_internal var dropShadow:RectangularDropShadow;
+
+    mx_internal var dropShadowBlur:Number;
+
+    mx_internal var dropShadowDistance:Number;
+
+    mx_internal var fade:Fade;
+
+    mx_internal var isOpen:Boolean;
+
+    mx_internal var highlightWeight:Number;

     //--------------------------------------------------------------------------
     //
@@ -81,9 +171,15 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     *  @copy spark.components.SkinnableContainer#contentGroup
+     */
     public var contentGroup:Group;

-    public var arrow:SpriteVisualElement;
+    /**
+     * @copy spark.components.Callout#arrow
+     */
+    public var arrow:Arrow;

     //--------------------------------------------------------------------------
     //
@@ -91,239 +187,498 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     * @private
+     */
     override protected function createChildren():void
     {
         super.createChildren();
+
+        // FIXME (jasonsj): clicking on drop shadow should dismiss the callout
+        dropShadow = new RectangularDropShadow();
+        dropShadow.angle = 90;
+        dropShadow.distance = dropShadowDistance;
+        dropShadow.blurX = dropShadow.blurY = dropShadowBlur;
+        dropShadow.tlRadius = dropShadow.trRadius = dropShadow.blRadius =
+            dropShadow.brRadius = backgroundCornerRadius;
+        addChild(dropShadow);
+
+        // background fill placed above the drop shadow
+        backgroundFill = new SpriteVisualElement();
+        addChild(backgroundFill);
+
+        arrow = new Arrow(this);
+        arrow.id = "arrow";
+        addChild(arrow);
+
+        contentBackgroundGraphic = new contentBackgroundClass() as SpriteVisualElement;
+        addChild(contentBackgroundGraphic);

         contentGroup = new Group();
         contentGroup.id = "contentGroup";
         addChild(contentGroup);

-        // TODO (jasonsj): FXG
-        arrow = new SpriteVisualElement();
-        arrow.id = "arrow";
-        addChild(arrow);
-
-        // TODO (jasonsj): RectangularDropShadow
-    }
-
+        // TODO (jasonsj): add mask
+//        contentMask = new Sprite();
+//        contentGroup.mask = contentMask;
+    }
+
+    /**
+     * @private
+     */
     override protected function commitProperties():void
     {
         super.commitProperties();

-        // TODO (jasonsj): FXG
-        if (isArrowHorizontal)
-        {
-            arrow.width = 26;
-            arrow.height = 52 + (cornerRadius * 2);
-        }
-        else if (isArrowVertical)
-        {
-            arrow.width = 52 + (cornerRadius * 2);
-            arrow.height = 26;
-        }
-
+        // always invalidate to accomodate arrow direction changes
         invalidateSize();
         invalidateDisplayList();
     }

+    /**
+     * @private
+     */
     override protected function measure():void
     {
         super.measure();

-        var backgroundWidth:Number = contentGroup.getPreferredBoundsWidth() + (padding * 4);
-        var backgroundHeight:Number = contentGroup.getPreferredBoundsHeight() + (padding * 4);
-        var arrowWidth:Number = arrow.getPreferredBoundsWidth();
-        var arrowHeight:Number = arrow.getPreferredBoundsHeight();
-
-        measuredMinWidth = arrowWidth;
-        measuredMinHeight = arrowHeight;
+        var backgroundPadding:Number = (Math.max(backgroundCornerRadius, frameSize) * 2);
+
+        var backgroundWidth:Number = contentGroup.getPreferredBoundsWidth()
+            + backgroundPadding;
+        var backgroundHeight:Number = contentGroup.getPreferredBoundsHeight()
+            + backgroundPadding;
+
+        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;
+        }
+
+        measuredMinWidth = Math.max(arrowMeasuredWidth, contentGroup.measuredMinWidth);
+        measuredMinHeight = Math.max(arrowMeasuredHeight, contentGroup.measuredMinHeight);
         measuredWidth = backgroundWidth;
         measuredHeight = backgroundHeight;

         if (isArrowHorizontal)
         {
-            measuredWidth += arrowWidth;
+            measuredWidth += arrowMeasuredWidth;
+            measuredHeight = Math.max(measuredHeight, arrowMeasuredHeight);
         }
         else if (isArrowVertical)
         {
-            measuredHeight += arrowHeight;
-        }
-    }
-
+            measuredWidth = Math.max(measuredWidth, arrowMeasuredWidth);
+            measuredHeight += arrowMeasuredHeight;
+        }
+    }
+
+    /**
+     * @private
+     */
     override protected function commitCurrentState():void
     {
         super.commitCurrentState();

-        // FIXME (jasonsj): SkinnablePopUpContainer relies on state changes
-        //                  for open and close
-        dispatchEvent(new FlexEvent(FlexEvent.STATE_CHANGE_COMPLETE));
-    }
-
+        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 = 250;
+                fade.alphaTo = 0;
+            }
+
+            // play a short fade effect
+            fade.addEventListener(EffectEvent.EFFECT_END, stateChangeComplete);
+            fade.play();
+
+            isOpen = false;
+        }
+        else
+        {
+            isOpen = isNormal || isDisabled;
+
+            if (isNormal)
+                alpha = 1;
+            else if (isDisabled)
+                alpha = 0.5;
+            else
+                alpha = 0;
+
+            stateChangeComplete();
+        }
+    }
+
+    /**
+     * @private
+     */
     override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
     {
-        var ellipseSize:Number = cornerRadius * 2;
-        var contentPadding:Number = padding * 2;
+        super.drawBackground(unscaledWidth, unscaledHeight);
+
+        var frameEllipseSize:Number = backgroundCornerRadius * 2;
+
+        // contentBackgroundGraphic already accounts for the arrow position
+        // use it's positioning instead of recalculating based on unscaledWidth
+        // and unscaledHeight
+        var frameX:Number = Math.floor(contentBackgroundGraphic.getLayoutBoundsX() - frameSize);
+        var frameY:Number = Math.floor(contentBackgroundGraphic.getLayoutBoundsY() - frameSize);
+        var frameWidth:Number = contentBackgroundGraphic.getLayoutBoundsWidth() + (frameSize * 2);
+        var frameHeight:Number = contentBackgroundGraphic.getLayoutBoundsHeight() + (frameSize * 2) ;
+
         var backgroundColor:Number = getStyle("backgroundColor");
-        var backgroundColorTop:Number = ColorUtil.adjustBrightness2(backgroundColor, 20);
-
-        // FIXME (jasonsj): fixed gradient height?
-        colorMatrix.createGradientBox(unscaledWidth, 40, Math.PI / 2, 0, 0);
-
-        var backgroundX:Number = Math.floor(contentGroup.getLayoutBoundsX() - contentPadding);
-        var backgroundY:Number = Math.floor(contentGroup.getLayoutBoundsY() - contentPadding);
-
-        // TODO (jasonsj): FXG
-        graphics.beginGradientFill(GradientType.LINEAR,
-            [backgroundColorTop, backgroundColor],
-            [1, 1],
+        var backgroundAlpha:Number = getStyle("backgroundAlpha");
+
+        // 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);
+
+        var bgFill:Graphics = backgroundFill.graphics;
+        bgFill.clear();
+
+        bgFill.beginGradientFill(GradientType.LINEAR,
+            [backgroundColorTop, backgroundColorBottom],
+            [backgroundAlpha, backgroundAlpha],
             [0, 255],
             colorMatrix);
-        graphics.drawRoundRect(backgroundX,
-            backgroundY,
-            contentGroup.getLayoutBoundsWidth() + (contentPadding * 2),
-            contentGroup.getLayoutBoundsHeight() + (contentPadding * 2),
-            ellipseSize,
-            ellipseSize);
-        graphics.endFill();
-
-        graphics.beginFill(getStyle("contentBackgroundColor"), getStyle("contentBackgroundAlpha"));
-        graphics.drawRoundRect(contentGroup.getLayoutBoundsX() - padding,
-            contentGroup.getLayoutBoundsY() - padding,
-            contentGroup.getLayoutBoundsWidth() + contentPadding,
-            contentGroup.getLayoutBoundsHeight() + contentPadding,
-            ellipseSize,
-            ellipseSize);
-        graphics.endFill();
-
-        arrow.graphics.clear();
-
-        if (isArrowHorizontal || isArrowVertical)
-        {
-            // when drawing the arrow, compensate for cornerRadius
-            var arrowWidth:Number = getElementPreferredWidth(arrow);
-            var arrowHeight:Number = getElementPreferredHeight(arrow);
-            var arrowX:Number = 0;
-            var arrowY:Number = 0;
-            var arrowTipX:Number = 0;
-            var arrowTipY:Number = 0;
-            var arrowEndX:Number = 0;
-            var arrowEndY:Number = 0;
-
-            if (isArrowHorizontal)
-            {
-                arrowY = cornerRadius;
-                arrowHeight = arrowHeight - (cornerRadius * 2);
-
-                arrowTipX = arrowWidth;
-                arrowTipY = arrowY + (arrowHeight / 2);
-
-                arrowEndX = arrowX;
-                arrowEndY = arrowY + arrowHeight;
-
-                // flip coordinates to point left
-                if (hostComponent.arrowDirection == ArrowDirection.LEFT)
-                {
-                    arrowX = arrowWidth - arrowX;
-                    arrowTipX = arrowWidth - arrowTipX;
-                    arrowEndX = arrowWidth - arrowEndX;
-                }
-            }
-            else if (isArrowVertical)
-            {
-                arrowX = cornerRadius;
-                arrowWidth = arrowWidth - (cornerRadius * 2);
-
-                arrowTipX = arrowX + (arrowWidth / 2);
-                arrowTipY = arrowHeight;
-
-                arrowEndX = arrowX + arrowWidth;
-                arrowEndY = arrowY;
-
-                // flip coordinates to point up
-                if (hostComponent.arrowDirection == ArrowDirection.UP)
-                {
-                    arrowY = arrowHeight - arrowY;
-                    arrowTipY = arrowHeight - arrowTipY;
-                    arrowEndY = arrowHeight - arrowEndY;
-                }
-            }
-
-            // TODO (jasonsj): swap FXG for each arrow direction? mask for gradient fill?
-            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;
-
-            colorMatrix.createGradientBox(unscaledWidth, 40, Math.PI / 2, 0, -arrow.getLayoutBoundsY());
-
-            arrow.graphics.beginGradientFill(GradientType.LINEAR,
-                [backgroundColorTop, backgroundColor],
-                [1, 1],
-                [0, 255],
-                colorMatrix);
-            arrow.graphics.drawPath(commands, coords);
-            arrow.graphics.endFill();
-        }
-    }
-
+        bgFill.drawRoundRect(frameX, frameY, frameWidth,
+            frameHeight, frameEllipseSize, frameEllipseSize);
+        bgFill.endFill();
+
+        // draw the contentBackgroundColor
+        // the shading and highlight are drawn in FXG
+        var contentEllipseSize:Number = contentCornerRadius * 2;
+        var contentBackgroundAlpha:Number = getStyle("contentBackgroundAlpha");
+        var contentWidth:Number = contentBackgroundGraphic.getLayoutBoundsWidth();
+        var contentHeight:Number = contentBackgroundGraphic.getLayoutBoundsHeight();
+
+        bgFill.beginFill(getStyle("contentBackgroundColor"),
+            contentBackgroundAlpha);
+        bgFill.drawRoundRect(contentBackgroundGraphic.getLayoutBoundsX(),
+            contentBackgroundGraphic.getLayoutBoundsY(),
+            contentWidth, contentHeight, contentEllipseSize, contentEllipseSize);
+        bgFill.endFill();
+
+        // content mask 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();
+
+        contentBackgroundGraphic.alpha = contentBackgroundAlpha;
+
+        // draw highlight in the callout when the arrow is hidden
+        if (!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);
+
         // 1x padding of backgroundColor, 1x padding of contentBackgroundColor
-        var contentX:Number = padding * 2;
-        var contentY:Number = padding * 2;
-        var contentWidth:Number = unscaledWidth - (padding * 4);
-        var contentHeight:Number = unscaledHeight - (padding * 4);
-
-        // TODO (jasonsj): Arrow FXG
-        var arrowWidth:Number = arrow.getPreferredBoundsWidth();
-        var arrowHeight:Number = arrow.getPreferredBoundsHeight();
+        var frameX:Number = 0;
+        var frameY:Number = 0;
+        var frameWidth:Number = unscaledWidth;
+        var frameHeight:Number = unscaledHeight;

         switch (hostComponent.arrowDirection)
         {
             case ArrowDirection.UP:
-                contentY += arrowHeight;
-                contentHeight -= arrowHeight;
+                frameY += arrow.height;
+                frameHeight -= arrow.height;
                 break;
             case ArrowDirection.DOWN:
-                contentHeight -= arrowHeight;
+                frameHeight -= arrow.height;
                 break;
             case ArrowDirection.LEFT:
-                contentX += arrowWidth;
-                contentWidth -= arrowWidth;
+                frameX += arrow.width;
+                frameWidth -= arrow.width;
                 break;
             case ArrowDirection.RIGHT:
-                contentWidth -= arrowWidth;
+                frameWidth -= arrow.width;
                 break;
             default:
                 // no arrow, content takes all available space
                 break;
         }

-        setElementPosition(contentGroup, contentX, contentY);
-        setElementSize(contentGroup, contentWidth, contentHeight);
-    }
-
-    private function get isArrowHorizontal():Boolean
+        setElementSize(dropShadow, frameWidth, frameHeight);
+        setElementPosition(dropShadow, frameX, frameY);
+
+        // the inset from the bounds of the callout to the contentGroup
+        // visually represented by the backgroundColor "border"
+        var contentBackgroundAdjustment:Number = (frameSize * 2);
+
+        var contentBackgroundX:Number = frameX + frameSize;
+        var contentBackgroundY:Number = frameY + frameSize;
+        var contentBackgroundWidth:Number = frameWidth - contentBackgroundAdjustment;
+        var contentBackgroundHeight:Number = frameHeight - contentBackgroundAdjustment;
+
+        setElementSize(contentBackgroundGraphic, contentBackgroundWidth, contentBackgroundHeight);
+        setElementPosition(contentBackgroundGraphic, contentBackgroundX, contentBackgroundY);
+
+        setElementSize(contentGroup, contentBackgroundWidth, contentBackgroundHeight);
+        setElementPosition(contentGroup, contentBackgroundX, contentBackgroundY);
+
+        // mask position is in the contentGroup coordinate space
+//        setElementSize(contentMask, contentBackgroundWidth, contentBackgroundHeight);
+    }
+
+    /**
+     * @private
+     */
+    mx_internal function get isArrowHorizontal():Boolean
     {
         return (hostComponent.arrowDirection == ArrowDirection.LEFT
             || hostComponent.arrowDirection == ArrowDirection.RIGHT);
     }

-    private function get isArrowVertical():Boolean
+    /**
+     * @private
+     */
+    mx_internal function get isArrowVertical():Boolean
     {
         return (hostComponent.arrowDirection == ArrowDirection.UP
             || hostComponent.arrowDirection == ArrowDirection.DOWN);
     }
+
+    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));
+    }
 }
+}
+import flash.display.GradientType;
+import flash.display.GraphicsPathCommand;
+
+import mx.core.UIComponent;
+import mx.core.mx_internal;
+import mx.utils.ColorUtil;
+
+import spark.components.ArrowDirection;
+import spark.skins.mobile.CalloutSkin;
+import spark.skins.mobile.supportClasses.MobileSkin;
+
+use namespace mx_internal;
+
+class Arrow extends UIComponent
+{
+    public function Arrow(calloutSkin:CalloutSkin)
+    {
+        super();
+
+        _calloutSkin = calloutSkin;
+    }
+
+    private var _calloutSkin:CalloutSkin;
+
+    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
+    {
+        super.updateDisplayList(unscaledWidth, unscaledHeight);
+
+        graphics.clear();
+
+        if (!_calloutSkin.isArrowHorizontal && !_calloutSkin.isArrowVertical)
+            return;
+
+        // when drawing the arrow, compensate for cornerRadius
+        var arrowDirection:String = _calloutSkin.hostComponent.arrowDirection;
+        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;
+
+        if (_calloutSkin.isArrowHorizontal)
+        {
+            arrowY = _calloutSkin.backgroundCornerRadius;
+            arrowHeight = arrowHeight - (_calloutSkin.backgroundCornerRadius * 2);
+
+            arrowTipX = arrowWidth;
+            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 if (_calloutSkin.isArrowVertical)
+        {
+            arrowX = _calloutSkin.backgroundCornerRadius;
+            arrowWidth = arrowWidth - (_calloutSkin.backgroundCornerRadius * 2);
+
+            arrowTipX = arrowX + (arrowWidth / 2);
+            arrowTipY = arrowHeight;
+
+            arrowEndX = arrowX + arrowWidth;
+            arrowEndY = arrowY;
+
+            // flip coordinates to point up
+            if (_calloutSkin.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 = _calloutSkin.getStyle("backgroundColor");
+        var backgroundAlpha:Number = _calloutSkin.getStyle("backgroundAlpha");
+
+        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
+        MobileSkin.colorMatrix.createGradientBox(unscaledWidth,
+            _calloutSkin.backgroundGradientHeight, Math.PI / 2, 0, -getLayoutBoundsY());
+
+        graphics.beginGradientFill(GradientType.LINEAR,
+            [backgroundColorTop, backgroundColorBottom],
+            [backgroundAlpha, backgroundAlpha],
+            [0, 255],
+            MobileSkin.colorMatrix);
+        graphics.drawPath(commands, coords);
+        graphics.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 = _calloutSkin.backgroundCornerRadius - getLayoutBoundsX();
+
+        // highlight Y position is based on the stroke weight
+        var highlightOffset:Number = (_calloutSkin.highlightWeight * 1.5);
+        var highlightY:Number = highlightOffset + offsetY;
+
+        // highlight width spans the callout width minus the corner radius
+        var highlightWidth:Number = _calloutSkin.getLayoutBoundsWidth() - (_calloutSkin.backgroundCornerRadius * 2);
+
+        if (_calloutSkin.isArrowHorizontal)
+        {
+            highlightWidth -= arrowWidth;
+
+            if (arrowDirection == ArrowDirection.LEFT)
+                highlightX += arrowWidth;
+        }
+
+        // highlight on the top edge is drawn in the arrow only in the UP direction
+        if (isArrowUp)
+        {
+            // highlight follows the top edge, including the arrow
+            var rightWidth:Number = highlightWidth - arrowWidth;
+
+            // highlight style
+            graphics.lineStyle(_calloutSkin.highlightWeight, 0xFFFFFF, 0.2 * backgroundAlpha);
+
+            // in the arrow coordinate space, the highlightX must be less than 0
+            if (highlightX < 0)
+            {
+                graphics.moveTo(highlightX, highlightY);
+                graphics.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;
+            graphics.drawPath(commands, coords);
+
+            // right side
+            if (rightWidth > 0)
+            {
+                graphics.moveTo(arrowEndX, highlightY);
+                graphics.lineTo(arrowEndX + rightWidth, highlightY);
+            }
+        }
+        else
+        {
+            // straight line across the top
+            graphics.lineStyle(_calloutSkin.highlightWeight, 0xFFFFFF, 0.2 * backgroundAlpha);
+            graphics.moveTo(highlightX, highlightY);
+            graphics.lineTo(highlightX + highlightWidth, highlightY);
+        }
+    }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 4492
Author:   gosmith@adobe.com
Date:     2009-01-12T22:47:10.154251Z

Log Message:
-----------
Simplified how an accessibility class gets hooked into its corresponding component class.

We now do the hooking in the static method enableAccessibility(), which is called by code that is autogenerated by the compiler. Previously this method did nothing and the hooking happened at static initialization time. This allows us to remove the static var accessibilityHooked and the static method hookAccessibility() in each accessibility class.

QE Notes: None
Doc Notes: None
Bugs: None
Reviewer: Deepa and Alex

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ListAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ColorPickerAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/AccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DataGridAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DateFieldAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/SliderAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/CheckBoxAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/LinkButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/MenuBarAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/RadioButtonAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ComboBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TabBarAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TreeAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/PanelAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/DateChooserAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/UIComponentAccProps.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/MenuAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ListBaseAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/AlertAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/ComboBoxAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/TitleWindowAccImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/accessibility/AccordionHeaderAccImpl.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1267289 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mx/src/mx/accessibility/AccordionHeaderAccImpl.as
+++ frameworks/projects/mx/src/mx/accessibility/AccordionHeaderAccImpl.as
@@ -24,12 +24,8 @@
 use namespace mx_internal;

 /**
- *  The AccordionHeaderAccImpl is the class
- *  for enabling Accordion Accessibility.
- *
- *  @helpid
- *  @tiptext This is the AccordionHeader Accessibility Class.
- *  @review
+ *  AccordionHeaderAccImpl is a subclass of AccessibilityImplementation
+ *  which implements accessibility for the AccordionHeader class.
  */
 public class AccordionHeaderAccImpl extends AccImpl
 {
@@ -37,99 +33,77 @@

 	//--------------------------------------------------------------------------
 	//
-	//  Class initialization
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 *  Static variable triggering the hookAccessibility() method.
-	 *  This is used for initializing AccordionHeaderAccImpl class to hook its
-	 *  createAccessibilityImplementation() method to AccordionHeader class
-	 *  before it gets called from UIComponent.
-	 */
-	private static var accessibilityHooked:Boolean = hookAccessibility();
-
-	/**
-	 *  @private
-	 *  Static method for swapping the createAccessibilityImplementation()
-	 *  method of AccordionHeader with the AccordionHeaderAccImpl class.
-	 */
-	private static function hookAccessibility():Boolean
+	//  Class constants
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  @private
+	 */
+	private static const STATE_SYSTEM_FOCUSED:uint = 0x00000004;
+
+	/**
+	 *  @private
+	 */
+	private static const STATE_SYSTEM_SELECTABLE:uint = 0x00200000;
+
+	/**
+	 *  @private
+	 */
+	private static const STATE_SYSTEM_SELECTED:uint = 0x00000002;
+
+	/**
+	 *  @private
+	 */
+	private static const STATE_SYSTEM_UNAVAILABLE:uint = 0x00000001;
+
+	/**
+	 *  @private
+	 */
+	private static const EVENT_OBJECT_FOCUS:uint = 0x8005;
+
+	/**
+	 *  @private
+	 */
+	private static const EVENT_OBJECT_SELECTION:uint = 0x8006;
+
+	/**
+	 *  @private
+	 */
+	private static const MAX_NUM:uint = 100000;
+
+	//--------------------------------------------------------------------------
+	//
+	//  Class methods
+	//
+	//--------------------------------------------------------------------------
+
+	/**
+	 *  Enables accessibility in the AccordionHeader class.
+	 *
+	 *
This method is called by application startup code
+	 *  that is autogenerated by the MXML compiler.
+	 *  Afterwards, when instances of AccordionHeader are initialized,
+	 *  their accessibilityImplementation property
+	 *  will be set to an instance of this class.

+	 */
+	public static function enableAccessibility():void
 	{
 		AccordionHeader.createAccessibilityImplementation =
 			createAccessibilityImplementation;
-
-		return true;
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Class constants
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 */
-	private static const STATE_SYSTEM_FOCUSED:uint = 0x00000004;
-
-	/**
-	 *  @private
-	 */
-	private static const STATE_SYSTEM_SELECTABLE:uint = 0x00200000;
-
-	/**
-	 *  @private
-	 */
-	private static const STATE_SYSTEM_SELECTED:uint = 0x00000002;
-
-	/**
-	 *  @private
-	 */
-	private static const STATE_SYSTEM_UNAVAILABLE:uint = 0x00000001;
-
-	/**
-	 *  @private
-	 */
-	private static const EVENT_OBJECT_FOCUS:uint = 0x8005;
-
-	/**
-	 *  @private
-	 */
-	private static const EVENT_OBJECT_SELECTION:uint = 0x8006;
-
-	/**
-	 *  @private
-	 */
-	private static const MAX_NUM:uint = 100000;
-
-	//--------------------------------------------------------------------------
-	//
-	//  Class methods
-	//
-	//--------------------------------------------------------------------------
-
-	/**
-	 *  @private
-	 *  Method for creating the Accessibility class.
-	 *  This method is called from UIComponent.
-	 *  @review
+	}
+
+	/**
+	 *  @private
+	 *  Creates an AccordionHeader's AccessibilityImplementation object.
+	 *  This method is called from UIComponent's
+	 *  initializeAccessibility() method.
 	 */
 	mx_internal static function createAccessibilityImplementation(
 								component:UIComponent):void
 	{
 		component.accessibilityImplementation =
 			new AccordionHeaderAccImpl(component);
-	}
-
-	/**
-	 *  Method call for enabling accessibility for a component.
-	 *  This method is required for the compiler to activate
-	 *  the accessibility classes for a component.
-	 */
-	public static function enableAccessibility():void
-	{
 	}

 	//--------------------------------------------------------------------------
@@ -186,7 +160,6 @@
 	 *  @param childID uint
 	 *
 	 *  @return State uint
-	 *  @review
 	 */
 	override public function get_accState(childID:uint):uint
 	{


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1269793 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mx/src/mx/skins/halo/DateChooserMonthArrowSkin.as
+++ frameworks/projects/mx/src/mx/skins/halo/DateChooserMonthArrowSkin.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2005-2007 Adobe Systems Incorporated
-//  All Rights Reserved.
-//
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//  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.
 //
 ////////////////////////////////////////////////////////////////////////////////


fixed bug in registering class aliases for internal message types

--- WeaveData/src/weave/services/collaboration/CollaborationService.as
+++ WeaveData/src/weave/services/collaboration/CollaborationService.as
@@ -31,27 +31,25 @@
 	import mx.utils.ObjectUtil;
 	import mx.utils.StringUtil;

-	import org.igniterealtime.xiff.auth.*;
-	import org.igniterealtime.xiff.bookmark.*;
-	import org.igniterealtime.xiff.conference.*;
-	import org.igniterealtime.xiff.core.*;
-	import org.igniterealtime.xiff.data.*;
-	import org.igniterealtime.xiff.events.*;
-	import org.igniterealtime.xiff.exception.*;
-	import org.igniterealtime.xiff.filter.*;
-	import org.igniterealtime.xiff.im.*;
-	import org.igniterealtime.xiff.privatedata.*;
-	import org.igniterealtime.xiff.util.*;
-	import org.igniterealtime.xiff.vcard.*;
-
-	import weave.api.core.IDisposableObject;
-	import weave.api.core.ILinkableObject;
+	import org.igniterealtime.xiff.conference.Room;
+	import org.igniterealtime.xiff.core.EscapedJID;
+	import org.igniterealtime.xiff.core.UnescapedJID;
+	import org.igniterealtime.xiff.core.XMPPConnection;
+	import org.igniterealtime.xiff.data.Message;
+	import org.igniterealtime.xiff.events.DisconnectionEvent;
+	import org.igniterealtime.xiff.events.LoginEvent;
+	import org.igniterealtime.xiff.events.MessageEvent;
+	import org.igniterealtime.xiff.events.RoomEvent;
+	import org.igniterealtime.xiff.events.XIFFErrorEvent;
+
 	import weave.api.disposeObject;
 	import weave.api.getCallbackCollection;
 	import weave.api.getSessionState;
 	import weave.api.registerDisposableChild;
 	import weave.api.reportError;
 	import weave.api.setSessionState;
+	import weave.api.core.IDisposableObject;
+	import weave.api.core.ILinkableObject;
 	import weave.core.SessionStateLog;

 	public class CollaborationService extends EventDispatcher implements IDisposableObject
@@ -92,9 +90,10 @@
 		{
 			this.root = root;
 			// register these classes so they will not lose their type when they get serialized and then deserialized.
-			// all of these classes are internal
+			// all of these classes are internal so they need fake packages to work across different builds of Weave
+			var pkg:String = getQualifiedClassName(this).split('::')[0];
 			for each (var c:Class in [FullSessionState, SessionStateMessage, TextMessage, MouseMessage, RequestMouseMessage, Ping, AddonsMessage, AddonStatus])
-			registerClassAlias(getQualifiedClassName(c), c);
+				registerClassAlias(pkg + '::' + getQualifiedClassName(c).split('::').pop(), c);

 			CollaborationWeaveExtension.enable();


Transferred from the Adobe Open Source Subversion Repository

Revision: 21981
Author:   cframpto@adobe.com
Date:     2011-08-15T18:54:28.190117Z

Log Message:
-----------
First pass of ASdoc corrections/additions for StageText.  Want to see results from tomorrow morning's ASdoc build.

QE notes:
Doc notes:
Bugs: SDK-31078, SDK-31109, SDK-31015, SDK-31127, SDK-31107, SDK-31113
Reviewer:
Tests run:
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/TextSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/TextInput.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/StageTextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/TextArea.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/StageTextInputSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1282890 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
@@ -241,8 +241,8 @@
  *  The base class for skinnable components, such as the Spark TextInput
  *  and TextArea, that include an instance of IEditableText in their skin
  *  to provide text display, scrolling, selection, and editing.
- *  IEditableText is RichEditableText for the Spark theme and StyleableTextField
- *  for the Mobile theme.
+ *  By default, IEditableText is RichEditableText for the Spark theme and StyleableStageText
+ *  for the Mobile theme. StyleableTextField is also available for the Mobile theme.
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -462,7 +462,7 @@
      *  The IEditableText that may be present
      *  in any skin assigned to this component.
      *  This is RichEditableText for the Spark theme
-     *  and StyleableTextField for the Mobile theme.
+     *  and StyleableStageText for the Mobile theme.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -906,10 +906,10 @@
      *  spark.components.RichEditableText.editable

      *
      *
For the Mobile theme, see
-     *  spark.components.supportClasses.StyleableTextField.editable

+     *  spark.components.supportClasses.StyleableStageText.editable

      *
      *  @see spark.components.RichEditableText#editable
-     *  @see spark.components.supportClasses.StyleableTextField#editable
+     *  @see spark.components.supportClasses.StyleableStageText#editable
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -1132,10 +1132,10 @@
      *  spark.components.RichEditableText.selectable

      *
      *
For the Mobile theme, see
-     *  spark.components.supportClasses.StyleableTextField.selectable

+     *  spark.components.supportClasses.StyleableStageText.selectable

      *
      *  @see spark.components.RichEditableText#selectable
-     *  @see spark.components.supportClasses.StyleableTextField#selectable
+     *  @see spark.components.supportClasses.StyleableStageText#selectable
      *
      *  @default true
      *
@@ -1192,10 +1192,10 @@
      *  spark.components.RichEditableText.selectionActivePosition

      *
      *
For the Mobile theme, see
-     *  spark.components.supportClasses.StyleableTextField.selectionActivePosition

+     *  spark.components.supportClasses.StyleableStageText.selectionActivePosition

      *
      *  @see spark.components.RichEditableText#selectionActivePosition
-     *  @see spark.components.supportClasses.StyleableTextField#selectionActivePosition
+     *  @see spark.components.supportClasses.StyleableStageText#selectionActivePosition
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -1225,10 +1225,10 @@
      *  spark.components.RichEditableText.selectionAnchorPosition

      *
      *
For the Mobile theme, see
-     *  spark.components.supportClasses.StyleableTextField.selectionAnchorPosition

+     *  spark.components.supportClasses.StyleableStageText.selectionAnchorPosition

      *
      *  @see spark.components.RichEditableText#selectionAnchorPosition
-     *  @see spark.components.supportClasses.StyleableTextField#selectionAnchorPosition
+     *  @see spark.components.supportClasses.StyleableStageText#selectionAnchorPosition
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -1312,10 +1312,10 @@
      *  spark.components.RichEditableText.text

      *
      *
For the Mobile theme, see
-     *  spark.components.supportClasses.StyleableTextField.text

+     *  spark.components.supportClasses.StyleableStageText.text

      *
      *  @see spark.components.RichEditableText#text
-     *  @see spark.components.supportClasses.StyleableTextField#text
+     *  @see spark.components.supportClasses.StyleableStageText#text
      *
      *  @default ""
      *
@@ -1391,7 +1391,7 @@
      *
"all" - capitalize every letter

      *

      *
-     *
For the Desktop theme, this is not supported.

+     *
For the Spark theme, this is not supported.

      *
      *  @default "none"
      *
@@ -1440,7 +1440,7 @@
     /**
      *  Hint indicating whether a soft keyboard should use its auto-correct
      *  behavior, if supported.
-     *
For the Desktop theme, this is not supported.

+     *
For the Spark theme, this is not supported.

      *
      *  @default true
      *
@@ -1504,7 +1504,7 @@
      *          entered text should be searched for

      *

      *
-     *
For the Desktop theme, this is not supported.

+     *
For the Spark theme, this is not supported.

      *
      *  @default "default"
      *
@@ -1571,7 +1571,7 @@
      *          '.com'

      *

      *
-     *
For the Desktop theme, this is not supported.

+     *
For the Spark theme, this is not supported.

      *
      *  @default "default"
      *


Transferred from the Adobe Open Source Subversion Repository

Revision: 17425
Author:   rfrishbe@adobe.com
Date:     2010-08-20T17:29:56.448841Z

Log Message:
-----------
Pretty basic refactoring for PARB (though it is a lot of files).  Renamed GestureCaptureEvent/GestureCaptureReason (these were previously TouchScrollEvent) to TouchInteractionEvent/TouchInteractionReason.  inputMode has been renamed to interactionMode and has a new enumeration class, mx.core.InteractionMode.

There's on non-PARB change that was made was in List and mobiletheme/defaults.css. I found a bug in that the item renderer wasn't highlighting on mousedown anymore. There were two issues at play. Firstly the touchDelay was set to 100 ms in the Scroller only, so I added it to List and added a FIXME comment to myself figuring out if the code in List should use scroller.getStyle("touchDelay") or itemRenderer.getStyle("touchDelay") instead of getStyle("touchDelay"). Also, I found out that the code doesn't deal with touchDelay=0 very well. Since we're planning on working on this code anyways (and possibly moving it in to ItemRenderer itself with a new downstate), I just put in a hack with a FIXME to handle this case for now.

QE notes: None
Doc notes: None
Bugs: -
Reviewer: Jason SJ, Chiedo
Tests run: checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/GestureCaptureEvent.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/InteractionMode.as</path>
<path kind="file" action="D">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/GestureCaptureReason.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/MobileItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/defaults.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/List.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/skins/spark/DefaultItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/defaults.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ScrollerLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/tools/dependencychecker/flex/tools/dependencychecker/FrameworkSwcDependencyRules.java</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/FrameworkClasses.as</path>
<path kind="file" copyfrom-path="/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/GestureCaptureEvent.as" copyfrom-rev="17393" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/TouchInteractionEvent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/TrackBase.as</path>
<path kind="file" copyfrom-path="/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/GestureCaptureReason.as" copyfrom-rev="17393" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/events/TouchInteractionReason.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/spark/src/spark/components/supportClasses/ButtonBase.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1282855 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as
@@ -27,7 +27,7 @@
 import mx.core.IVisualElement;
 import mx.core.mx_internal;
 import mx.events.FlexEvent;
-import mx.events.GestureCaptureEvent;
+import mx.events.TouchInteractionEvent;
 import mx.events.SandboxMouseEvent;
 import mx.managers.IFocusManagerComponent;
 import mx.utils.BitFlagUtil;
@@ -1173,7 +1173,7 @@
      */
     private function addHandlers():void
     {
-        addEventListener(GestureCaptureEvent.GESTURE_CAPTURE_STARTING, gestureCaptureStartingHandler);
+        addEventListener(TouchInteractionEvent.TOUCH_INTERACTION_STARTING, touchInteractionStartingHandler);
     }

     /**
@@ -1740,10 +1740,10 @@
     /**
      *  @private
      */
-    private function gestureCaptureStartingHandler(event:GestureCaptureEvent):void
+    private function touchInteractionStartingHandler(event:TouchInteractionEvent):void
     {
         // This implementation prevents the scroll from happening, which means
-        // the gesture will be interpreted by the text (ie selection).
+        // the touch interaction will be interpreted by the text (ie selection).
         if (selectable || editable)
             event.preventDefault();
     }


Transferred from the Adobe Open Source Subversion Repository

Revision: 23247
Author:   cframpto@adobe.com
Date:     2011-12-20T19:21:13.134833Z

Log Message:
-----------
Remove ADOBE SYSTEMS license and replace with Apache license in headers - frameworks.  A 2nd pass will be needed to get the files not handled up by the scripts.

Modified Paths:
--------------
4959 paths were modified

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1284206 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/effects/supportClasses/AnimateColorInstance.as
+++ frameworks/projects/spark/src/spark/effects/supportClasses/AnimateColorInstance.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2008 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  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
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      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.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 9453
Author:   egeorgie@adobe.com
Date:     2009-08-21T17:48:14.795338Z

Log Message:
-----------
Fix ASDoc comments, exclude the LayoutElementHelper class.

QE notes: None
Doc notes: None
Bugs: None
Reviewer: Hans
Tests run: N/A
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as</path>

git-svn-id: 7146a936b37d36e51ea0d66f8acbe0b8281bc7b7@1285506 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
+++ frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as
@@ -12,14 +12,11 @@
 package spark.layouts.supportClasses
 {

+[ExcludeClass]
+
 /**
  *  @private
- *  Documentation is not currently available.
- *
- *  @langversion 3.0
- *  @playerversion Flash 10
- *  @playerversion AIR 1.5
- *  @productversion Flex 4
+ *  The LayoutElementHelper class is for internal use only.
  */
 public class LayoutElementHelper
 {
@@ -47,8 +44,6 @@
         return Math.min(max, Math.max(min, val));
     }

-    // FIXME (egeorgie): this currently works only for constraints specified to
-    // the parent. Add constraintRow and constraintColumn support.
     /**
      *  @return returns the number for the passed in constraint value. Constraint value
      *  can be a Number, or a string in the format "col1:10".