Transferred from the Adobe Open Source Subversion Repository

Revision: 4337
Author:   egeorgie@adobe.com
Date:     2008-12-17T01:41:36.131845Z

Log Message:
-----------
ILayoutElement methods renames

Interface ILayoutElement
{
getLayoutWidth -> getLayoutBoundsWidth
getLayoutHeight -> getLayoutBoundsHeight
getLayoutPositionX -> getLayoutBoundsX
getLayoutPositionY -> getLayoutBoundsY
setLayoutSize -> setLayoutBoundsSize
setLayoutPosition -> setLayoutBoundsPosition
getPreferredWidth -> getPreferredBoundsWidth
getPreferredHeight -> getPreferredBoundsHeight
getMinWidth -> getMinBoundsWidth
getMinHeight -> getMinBoundsHeight
getMaxWidth -> getMaxBoundsWidth
getMaxHeight -> getMaxBoundsHeight

…unrelated stuff…
}

Reviewed by Gordon

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/layout/layout_tester.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/LinearLayoutVector.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/layouts/WheelLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxHSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/ILayoutElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxHScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimate3DInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/LayoutBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/graphics/GraphicTags_checkintests.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/skins/spark/FxScrollerSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxVSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxVScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/BasicLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/Ellipse.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/layout/LayoutElementUIC.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -2239,14 +2239,14 @@
     {
         // NOTE: This code will not work correctly when we share
         // display objects across multiple graphic elements.
-        var bitmapData:BitmapData = new BitmapData(getLayoutWidth(), getLayoutHeight(), transparent, fillColor);
+        var bitmapData:BitmapData = new BitmapData(getLayoutBoundsWidth(), getLayoutBoundsHeight(), transparent, fillColor);

         if (displayObject && nextSiblingNeedsDisplayObject)
         {
             var m:Matrix = displayObject.transform.matrix;

             if (m)
-                m.translate(-getLayoutPositionX(), -getLayoutPositionY());
+                m.translate(-getLayoutBoundsX(), -getLayoutBoundsY());
             bitmapData.draw(displayObject, m);
         }
         else
@@ -2743,7 +2743,7 @@
     /**
      *  @inheritDoc
      */
-    public function getMaxWidth(postTransform:Boolean=true):Number
+    public function getMaxBoundsWidth(postTransform:Boolean = true):Number
     {
         return transformWidthForLayout(maxWidth, maxHeight, postTransform);
     }
@@ -2751,7 +2751,7 @@
     /**
      *  @inheritDoc
      */
-    public function getMaxHeight(postTransform:Boolean=true):Number
+    public function getMaxBoundsHeight(postTransform:Boolean = true):Number
     {
         return transformHeightForLayout(maxWidth, maxHeight, postTransform);
     }
@@ -2759,7 +2759,7 @@
     /**
      *  @inheritDoc
      */
-    public function getMinWidth(postTransform:Boolean=true):Number
+    public function getMinBoundsWidth(postTransform:Boolean = true):Number
     {
         return transformWidthForLayout(minWidth, minHeight, postTransform);
     }
@@ -2767,7 +2767,7 @@
     /**
      *  @inheritDoc
      */
-    public function getMinHeight(postTransform:Boolean=true):Number
+    public function getMinBoundsHeight(postTransform:Boolean = true):Number
     {
         return transformHeightForLayout(minWidth, minHeight, postTransform);
     }
@@ -2775,7 +2775,7 @@
     /**
      *  @inheritDoc
      */
-    public function getPreferredWidth(postTransform:Boolean=true):Number
+    public function getPreferredBoundsWidth(postTransform:Boolean = true):Number
     {
         return transformWidthForLayout(preferredWidthPreTransform(),
                                        preferredHeightPreTransform(),
@@ -2785,7 +2785,7 @@
     /**
      *  @inheritDoc
      */
-    public function getPreferredHeight(postTransform:Boolean=true):Number
+    public function getPreferredBoundsHeight(postTransform:Boolean = true):Number
     {
         return transformHeightForLayout(preferredWidthPreTransform(),
                                        preferredHeightPreTransform(),
@@ -2795,7 +2795,7 @@
     /**
      *  @inheritDoc
      */
-    public function getLayoutPositionX(postTransform:Boolean=true):Number
+    public function getLayoutBoundsX(postTransform:Boolean = true):Number
     {
         var left:Number;
         // Account for transform
@@ -2828,7 +2828,7 @@
     /**
      *  @inheritDoc
      */
-    public function getLayoutPositionY(postTransform:Boolean=true):Number
+    public function getLayoutBoundsY(postTransform:Boolean = true):Number
     {
         var top:Number;
         // Account for transform
@@ -2861,7 +2861,7 @@
     /**
      *  @inheirtDoc
      */
-    public function getLayoutWidth(postTransform:Boolean=true):Number
+    public function getLayoutBoundsWidth(postTransform:Boolean = true):Number
     {
         return transformWidthForLayout(_width, _height, postTransform);
     }
@@ -2869,7 +2869,7 @@
     /**
      *  @inheritDoc
      */
-    public function getLayoutHeight(postTransform:Boolean=true):Number
+    public function getLayoutBoundsHeight(postTransform:Boolean = true):Number
     {
         return transformHeightForLayout(_width, _height, postTransform);
     }
@@ -2909,7 +2909,7 @@
      */
     protected function transformWidthForLayout(width:Number,
                                                height:Number,
-                                               postTransform:Boolean=true):Number
+                                               postTransform:Boolean = true):Number
     {
         if (postTransform)
         {
@@ -2939,7 +2939,7 @@
      */
     protected function transformHeightForLayout(width:Number,
                                                 height:Number,
-                                                postTransform:Boolean=true):Number
+                                                postTransform:Boolean = true):Number
     {
         if (postTransform)
         {
@@ -2998,7 +2998,7 @@
     /**
      *  @inheritDoc
      */
-    public function setLayoutPosition(x:Number, y:Number, postTransform:Boolean=true):void
+    public function setLayoutBoundsPosition(x:Number, y:Number, postTransform:Boolean = true):void
     {

         var currentX:Number = this.x;
@@ -3055,9 +3055,9 @@
     /**
      *  @inheritDoc
      */
-    public function setLayoutSize(width:Number = Number.NaN,
-                                  height:Number = Number.NaN,
-                                  postTransform:Boolean=true):void
+    public function setLayoutBoundsSize(width:Number = NaN,
+                                  height:Number = NaN,
+                                  postTransform:Boolean = true):void
     {
         var strokeExtents:Point = getStrokeExtents(postTransform);
         if (!isNaN(width))
@@ -3217,7 +3217,7 @@
     // TODO EGeorgie: return rectangle instead so that the function can
     // correctly indicate the left, right, top and bottom extents. Right
     // now we assume they are the same on both sides.
-    protected function getStrokeExtents(postTransform:Boolean=true):Point
+    protected function getStrokeExtents(postTransform:Boolean = true):Point
     {
         // TODO EGeorgie: currently we take only scale into account,
         // but depending on joint style, cap style, etc. we need to take


Transferred from the Adobe Open Source Subversion Repository

Revision: 2644
Author:   egeorgie@adobe.com
Date:     2008-07-28T23:58:09.872940Z

Log Message:
-----------
First pass at unifying layout APIs between UIComponent and GraphicElement, more to come with additional check-ins.

reviewed by Ryan, Glenn, Gordon, Chet

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/Ellipse.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/Rect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/TextBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/IGraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/TextGraphic.as</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/graphics/StrokedElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/Line.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/FilledElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/BitmapGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/graphics/graphicsClasses/TextGraphicElement.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -25,17 +25,20 @@
 import flex.intf.ILayoutItem;

 import mx.core.IConstraintClient;
+import mx.core.IInvalidating;
 import mx.core.mx_internal;
+import mx.core.UIComponentGlobals;
 import mx.events.PropertyChangeEvent;
 import mx.events.PropertyChangeEventKind;
 import mx.graphics.IStroke;
+import mx.managers.ILayoutManagerClient;

 use namespace mx_internal;

-public class GraphicElement extends EventDispatcher
-							implements IGraphicElement, ILayoutItem, IConstraintClient, IDisplayObjectElement
+public class GraphicElement extends EventDispatcher
+							implements IGraphicElement, ILayoutItem, IConstraintClient, IDisplayObjectElement, IInvalidating
 {
-
+
 	 /**
      *  The default value for the maxWidth property.
      *
@@ -49,7 +52,7 @@
      *  @default 10000
      */
     public static const DEFAULT_MAX_HEIGHT:Number = 10000;
-
+
      /**
      *  The default value for the minWidth property.
      *
@@ -63,24 +66,18 @@
      *  @default 0
      */
     public static const DEFAULT_MIN_HEIGHT:Number = 0;
-
-
+
+
 	public function GraphicElement()
 	{
 	}
-
-	private var sizeChanged:Boolean = false;
-
-	protected var drawWidth:Number = 0;
-	protected var drawHeight:Number = 0;
-
-
+
 	//--------------------------------------------------------------------------
 	//
 	//  IGraphicElement properties
 	//
 	//--------------------------------------------------------------------------
-
+
 	//----------------------------------
 	//  alpha
 	//----------------------------------
@@ -94,20 +91,21 @@
 	{
 		return _alpha;
 	}
-
+
 	public function set alpha(value:Number):void
 	{
-		if (value != _alpha)
-		{
-			var oldValue:Number = _alpha;
-			_alpha = value;
-			dispatchPropertyChangeEvent("alpha", oldValue, value);
-
-			alphaChanged = true;
-			notifyElementLayerChanged();
-		}
-	}
-
+		if (_alpha == value)
+		    return;
+
+		var oldValue:Number = _alpha;
+		_alpha = value;
+		dispatchPropertyChangeEvent("alpha", oldValue, value);
+
+		alphaChanged = true;
+		notifyElementLayerChanged();
+		invalidateDisplayList();
+	}
+
 	//----------------------------------
 	//  blendMode
 	//----------------------------------
@@ -121,70 +119,69 @@
 	{
 		return _blendMode;
 	}
-
+
 	public function set blendMode(value:String):void
 	{
-		if (value != _blendMode)
-		{
-			var oldValue:String = _blendMode;
-			_blendMode = value;
-			dispatchPropertyChangeEvent("blendMode", oldValue, value);
-
-			blendModeChanged = true;
-			notifyElementLayerChanged();
-		}
-	}
-
+		if (_blendMode == value)
+		    return;
+
+		var oldValue:String = _blendMode;
+		_blendMode = value;
+		dispatchPropertyChangeEvent("blendMode", oldValue, value);
+
+		blendModeChanged = true;
+		notifyElementLayerChanged();
+        invalidateDisplayList();
+	}
+
 	//----------------------------------
 	//  baseline
 	//----------------------------------
 	private var _baseline:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get baseline():Number
 	{
 		return _baseline;
 	}
-
+
 	public function set baseline(value:Number):void
 	{
-		if (_baseline != value)
-		{
-			var oldValue:Number = _baseline;
-			_baseline = value;
-			dispatchPropertyChangeEvent("baseline", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_baseline == value)
+		    return;
+
+		var oldValue:Number = _baseline;
+		_baseline = value;
+		dispatchPropertyChangeEvent("baseline", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  bottom
 	//----------------------------------
 	private var _bottom:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get bottom():Number
 	{
 		return _bottom;
 	}
-
+
 	public function set bottom(value:Number):void
 	{
-		if (_bottom != value)
-		{
-			var oldValue:Number = _bottom;
-			_bottom = value;
-			dispatchPropertyChangeEvent("bottom", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_bottom == value)
+		    return;
+
+		var oldValue:Number = _bottom;
+		_bottom = value;
+		dispatchPropertyChangeEvent("bottom", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  bounds
 	//----------------------------------
@@ -195,12 +192,12 @@
 	{
 		return new Rectangle();
 	}
-
+
 	//----------------------------------
 	//  elementHost
 	//----------------------------------
 	protected var _host:IGraphicElementHost;
-
+
 	/**
 	 *  @private
 	 *  The host of this element. This is the Group or Graphic tag that contains
@@ -215,22 +212,22 @@
 				_host.addMaskElement(_mask); */
 		}
 	}
-
-	public function get elementHost():IGraphicElementHost
+
+	public function get elementHost():IGraphicElementHost
 	{
 		return _host;
 	}
-
+
 	//----------------------------------
 	//  filters
 	//----------------------------------
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
-
+
 	private var _filters:Array = [];
 	private var _clonedFilters:Array;
 	private var filtersChanged:Boolean;
-
+
 	/**
 	 *  @private
 	 */
@@ -240,7 +237,7 @@
 		var oldFilters:Array = _filters ? _filters.slice() : null;
 		var len:int = oldFilters ? oldFilters.length : 0;
 		var edFilter:EventDispatcher;
-
+
 		for (i = 0; i < len; i++)
 		{
 			if (oldFilters[i] is IBitmapFilter)
@@ -250,11 +247,11 @@
 					edFilter.removeEventListener(BaseFilter.FILTER_CHANGED_TYPE, filterChangedHandler);
 			}
 		}
-
+
 		_clonedFilters = new Array();
 		_filters = value;
 		len = value.length;
-
+
 		for (i = 0; i < len; i++)
 		{
 			if (value[i] is IBitmapFilter)
@@ -267,348 +264,416 @@
 			else
 				_clonedFilters.push(value[i]);
 		}
-
+
 		dispatchPropertyChangeEvent("filters", oldFilters, _filters);
-
+
 		filtersChanged = true;
 		notifyElementLayerChanged();
 	}
-
+
 	public function get filters():Array
 	{
 		return _filters;
 	}
-
+
+	//----------------------------------
+	//  explicitHeight
+	//----------------------------------
+	private var _explicitHeight:Number;
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
+	public function get explicitHeight():Number
+	{
+        return _explicitHeight;
+	}
+
+	public function set explicitHeight(value:Number):void
+	{
+	    if (_explicitHeight == value)
+	        return;
+
+        // height can be pixel or percent, not both
+        if (!isNaN(value))
+            percentHeight = NaN;
+
+        var oldValue:Number = _explicitHeight;
+        _explicitHeight = value;
+        dispatchPropertyChangeEvent("explicitHeight", oldValue, value);
+
+        invalidateSize();
+        invalidateParentSizeAndDisplayList();
+	}
+
+	//----------------------------------
+	//  explicitWidth
+	//----------------------------------
+	private var _explicitWidth:Number;
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
+	public function get explicitWidth():Number
+	{
+        return _explicitWidth;
+	}
+
+	public function set explicitWidth(value:Number):void
+	{
+	    if (_explicitWidth == value)
+	        return;
+
+        // height can be pixel or percent, not both
+        if (!isNaN(value))
+            percentWidth = NaN;
+
+        var oldValue:Number = _explicitWidth;
+        _explicitWidth = value;
+        dispatchPropertyChangeEvent("explicitWidth", oldValue, value);
+
+        invalidateSize();
+        invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  height
 	//----------------------------------
-
-	private var _height:Number = 0;
-	protected var _explicitHeight:Number;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+	mx_internal var _height:Number = 0;
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
 	 *  The height of the rect.
-	 *
+	 *
 	 *  @default 0
 	 */
-	public function get height():Number
+	public function get height():Number
 	{
 		return _height;
 	}
-
+
 	public function set height(value:Number):void
 	{
-		_explicitHeight = value;
+		explicitHeight = value;
+
+		if (_height == value)
+		    return;
+
 		var oldValue:Number = _height;
-
-		if (value != oldValue)
-		{
-			_height = value;
-			drawHeight = value;
-			dispatchPropertyChangeEvent("height", oldValue, value);
-			notifyElementChanged();
-		}
-	}
-
+		_height = value;
+		dispatchPropertyChangeEvent("height", oldValue, value);
+
+        // Invalidate the display list, since we're changing the actual width
+        // and we're not going to correctly detect whether the layout sets
+        // new actual width different from our previous value.
+        // TODO EGeorgie: is this worth optimizing?
+		invalidateDisplayList();
+	}
+
 	//----------------------------------
 	//  horizontalCenter
 	//----------------------------------
 	private var _horizontalCenter:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get horizontalCenter():Number
 	{
 		return _horizontalCenter;
 	}
-
+
 	public function set horizontalCenter(value:Number):void
 	{
-		if (_horizontalCenter != value)
-		{
-			var oldValue:Number = _horizontalCenter;
-			_horizontalCenter = value;
-			dispatchPropertyChangeEvent("horizontalCenter", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_horizontalCenter == value)
+		    return;
+
+		var oldValue:Number = _horizontalCenter;
+		_horizontalCenter = value;
+		dispatchPropertyChangeEvent("horizontalCenter", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  left
 	//----------------------------------
 	private var _left:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get left():Number
 	{
 		return _left;
 	}
-
+
 	public function set left(value:Number):void
 	{
-		if (_left != value)
-		{
-			var oldValue:Number = _left;
-			_left = value;
-			dispatchPropertyChangeEvent("left", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_left == value)
+		    return;
+
+		var oldValue:Number = _left;
+		_left = value;
+		dispatchPropertyChangeEvent("left", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  mask
 	//----------------------------------
-
+
 	private var _mask:DisplayObject;
 	private var previousMask:DisplayObject;
 	private var isMaskInElementSpace:Boolean;
 	private var maskChanged:Boolean;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	public function set mask(value:DisplayObject):void
 	{
-		if (_mask !== value)
-		{
-			var oldValue:DisplayObject = _mask;
-			previousMask = _mask;
-			_mask = value;
-			dispatchPropertyChangeEvent("mask", oldValue, value);
-			maskChanged = true;
-			maskTypeChanged = true;
-			isMaskInElementSpace = false;
-			notifyElementLayerChanged();
-		}
-	}
-
+		if (_mask == value)
+		    return;
+
+		var oldValue:DisplayObject = _mask;
+		previousMask = _mask;
+		_mask = value;
+		dispatchPropertyChangeEvent("mask", oldValue, value);
+		maskChanged = true;
+		maskTypeChanged = true;
+		isMaskInElementSpace = false;
+		notifyElementLayerChanged();
+
+        // TODO EGeorgie: currently need to invalidate the display list,
+        // because the mask gets applied on updateDisplayList. Should it get
+        // applied on commit properties?
+		invalidateDisplayList();
+	}
+
 	public function get mask():DisplayObject
 	{
 		return _mask;
 	}
-
+
 	//----------------------------------
 	//  maskType
 	//----------------------------------
 	private var _maskType:String = MaskType.CLIP;
 	private var maskTypeChanged:Boolean;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General",enumeration="clip,alpha", defaultValue="clip")]
 	public function get maskType():String
 	{
 		return _maskType;
 	}
-
+
 	public function set maskType(value:String):void
 	{
-		if (_maskType != value)
-		{
-			var oldValue:String = _maskType;
-			_maskType = value;
-			dispatchPropertyChangeEvent("maskType", oldValue, value);
-
-			maskTypeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_maskType == value)
+		    return;
+
+		var oldValue:String = _maskType;
+		_maskType = value;
+		dispatchPropertyChangeEvent("maskType", oldValue, value);
+
+		maskTypeChanged = true;
+		invalidateDisplayList();
+	}
+
 	//----------------------------------
 	//  maxHeight
 	//----------------------------------
 	private var _maxHeight:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get maxHeight():Number
 	{
 		// TODO!!! Examine this logic, Make this arbitrarily large (use UIComponent max)
-		return !isNaN(_maxHeight) ? _maxHeight : DEFAULT_MAX_HEIGHT;
-	}
-
+		return !isNaN(_maxHeight) ? _maxHeight : DEFAULT_MAX_HEIGHT;
+	}
+
 	public function set maxHeight(value:Number):void
 	{
-		if (_maxHeight != value)
-		{
-			var oldValue:Number = _maxHeight;
-			_maxHeight = value;
-			dispatchPropertyChangeEvent("maxHeight", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
+		if (_maxHeight == value)
+		    return;
+
+		var oldValue:Number = _maxHeight;
+		_maxHeight = value;
+		dispatchPropertyChangeEvent("maxHeight", oldValue, value);
+
+		invalidateSize();
+        invalidateParentSizeAndDisplayList();
 	}

 	//----------------------------------
 	//  maxWidth
 	//----------------------------------
 	private var _maxWidth:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get maxWidth():Number
 	{
 		// TODO!!! Examine this logic, Make this arbitrarily large (use UIComponent max)
-		return !isNaN(_maxWidth) ? _maxWidth : DEFAULT_MAX_WIDTH;
-	}
-
+		return !isNaN(_maxWidth) ? _maxWidth : DEFAULT_MAX_WIDTH;
+	}
+
 	public function set maxWidth(value:Number):void
 	{
-		if (_maxWidth != value)
-		{
-			var oldValue:Number = _maxWidth;
-			_maxWidth = value;
-			dispatchPropertyChangeEvent("maxWidth", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_maxWidth == value)
+		    return;
+
+        var oldValue:Number = _maxWidth;
+		_maxWidth = value;
+		dispatchPropertyChangeEvent("maxWidth", oldValue, value);
+
+		invalidateSize();
+        invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  minHeight
 	//----------------------------------
 	private var _minHeight:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get minHeight():Number
 	{
 		// TODO!!! Examine this logic
-		return !isNaN(_minHeight) ? _minHeight : DEFAULT_MIN_HEIGHT;
-	}
-
+		return !isNaN(_minHeight) ? _minHeight : DEFAULT_MIN_HEIGHT;
+	}
+
 	public function set minHeight(value:Number):void
 	{
-		if (_minHeight != value)
-		{
-			var oldValue:Number = _minHeight;
-			_minHeight = value;
-			dispatchPropertyChangeEvent("minHeight", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_minHeight == value)
+		    return;
+
+        var oldValue:Number = _minHeight;
+		_minHeight = value;
+		dispatchPropertyChangeEvent("minHeight", oldValue, value);
+
+		invalidateSize();
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  minWidth
 	//----------------------------------
 	private var _minWidth:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get minWidth():Number
 	{
 		// TODO!!! Examine this logic
-		return !isNaN(_minWidth) ? _minWidth : DEFAULT_MIN_WIDTH;
-	}
-
+		return !isNaN(_minWidth) ? _minWidth : DEFAULT_MIN_WIDTH;
+	}
+
 	public function set minWidth(value:Number):void
 	{
-		if (_minWidth != value)
-		{
-			var oldValue:Number = _minWidth;
-			_minWidth = value;
-			dispatchPropertyChangeEvent("minWidth", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_minWidth == value)
+		    return;
+
+		var oldValue:Number = _minWidth;
+		_minWidth = value;
+		dispatchPropertyChangeEvent("minWidth", oldValue, value);
+
+		invalidateSize();
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  percentHeight
 	//----------------------------------
 	private var _percentHeight:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get percentHeight():Number
 	{
 		// TODO!!! Examine this logic
-		return _percentHeight;
-	}
-
+		return _percentHeight;
+	}
+
 	public function set percentHeight(value:Number):void
 	{
-		if (_percentHeight != value)
-		{
-			var oldValue:Number = _percentHeight;
-			_percentHeight = value;
-			dispatchPropertyChangeEvent("percentHeight", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_percentHeight == value)
+		    return;
+
+	    if (!isNaN(value))
+	        explicitHeight = NaN;
+
+	    var oldValue:Number = _percentHeight;
+		_percentHeight = value;
+		dispatchPropertyChangeEvent("percentHeight", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  percentWidth
 	//----------------------------------
 	private var _percentWidth:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get percentWidth():Number
 	{
 		// TODO!!! Examine this logic
-		return _percentWidth;
-	}
-
+		return _percentWidth;
+	}
+
 	public function set percentWidth(value:Number):void
 	{
-		if (_percentWidth != value)
-		{
-			var oldValue:Number = _percentWidth;
-			_percentWidth = value;
-			dispatchPropertyChangeEvent("percentWidth", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
+		if (_percentWidth == value)
+		    return;
+
+	    if (!isNaN(value))
+	        explicitWidth = NaN;
+
+	    var oldValue:Number = _percentWidth;
+		_percentWidth = value;
+		dispatchPropertyChangeEvent("percentWidth", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
 	}

 	//----------------------------------
 	//  right
 	//----------------------------------
 	private var _right:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get right():Number
 	{
 		return _right;
 	}
-
+
 	public function set right(value:Number):void
 	{
-		if (_right != value)
-		{
-			var oldValue:Number = _right;
-			_right = value;
-			dispatchPropertyChangeEvent("right", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_right == value)
+		    return;
+
+		var oldValue:Number = _right;
+		_right = value;
+		dispatchPropertyChangeEvent("right", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  rotation
 	//----------------------------------
-
+
 	private var _rotation:Number = 0;
 	private var rotationChanged:Boolean;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	/**
@@ -618,30 +683,33 @@
 	{
 		return _rotation;
 	}
-
+
 	public function set rotation(value:Number):void
 	{
-		if (_rotation != value)
-		{
-			var oldValue:Number = _rotation;
-			_rotation = value;
-			dispatchPropertyChangeEvent("rotation", oldValue, value);
-
-			rotationChanged = true;
-			notifyElementTransformChanged();
-		}
-	}
-
+		if (_rotation == value)
+		    return;
+
+		var oldValue:Number = _rotation;
+		_rotation = value;
+		dispatchPropertyChangeEvent("rotation", oldValue, value);
+
+		rotationChanged = true;
+		invalidateParentSizeAndDisplayList();
+		// TODO EGeorgie: currently we apply rotation during setActualSize,
+		// however we should do this on commitProperties.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  scaleX
 	//----------------------------------
-
+
 	mx_internal var _scaleX:Number = 1;
 	private var scaleXChanged:Boolean;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
 	 *  Indicates the horizontal scale (percentage) of the element as applied from the transform point.
 	 */
@@ -649,29 +717,36 @@
 	{
 		return _scaleX;
 	}
-
+
 	public function set scaleX(value:Number):void
 	{
-		if (_scaleX != value)
-		{
-			var oldValue:Number = _scaleX;
-			_scaleX = value;
-			dispatchPropertyChangeEvent("scaleX", oldValue, value);
-
-			scaleXChanged = true;
-			notifyElementTransformChanged();
-		}
-	}
-
+		if (_scaleX == value)
+		    return;
+
+		var oldValue:Number = _scaleX;
+		_scaleX = value;
+		dispatchPropertyChangeEvent("scaleX", oldValue, value);
+
+		scaleXChanged = true;
+		notifyElementLayerChanged();
+
+		// Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  scaleY
 	//----------------------------------
 	mx_internal var _scaleY:Number = 1;
 	private var scaleYChanged:Boolean;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
 	 *  Indicates the vertical scale (percentage) of the element as applied from the transform point.
 	 */
@@ -679,210 +754,238 @@
 	{
 		return _scaleY;
 	}
-
+
 	public function set scaleY(value:Number):void
 	{
-		if (_scaleY != value)
-		{
-			var oldValue:Number = _scaleY;
-			_scaleY = value;
-			dispatchPropertyChangeEvent("scaleY", oldValue, value);
-
-			scaleYChanged = true;
-			notifyElementTransformChanged();
-		}
+		if (_scaleY == value)
+		    return;
+
+		var oldValue:Number = _scaleY;
+		_scaleY = value;
+		dispatchPropertyChangeEvent("scaleY", oldValue, value);
+
+		scaleYChanged = true;
+		notifyElementLayerChanged();
+
+		// Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
 	}

 	//----------------------------------
 	//  top
 	//----------------------------------
 	private var _top:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get top():Number
 	{
 		return _top;
 	}
-
+
 	public function set top(value:Number):void
 	{
-		if (_top != value)
-		{
-			var oldValue:Number = _top;
-			_top = value;
-			dispatchPropertyChangeEvent("top", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_top == value)
+		    return;
+
+		var oldValue:Number = _top;
+		_top = value;
+		dispatchPropertyChangeEvent("top", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  transform
 	//----------------------------------
 	private var _matrix:Matrix;
 	private var _colorTransform:ColorTransform;
 	private var _transform:flash.geom.Transform;
-
+
 	/**
-	 *  The x position transform point of the element.
+	 *  The x position transform point of the element.
 	 */
 	public function get transform():flash.geom.Transform
 	{
 		return _transform;
 	}
-
+
 	public function set transform(value:flash.geom.Transform):void
 	{
 		// Clean up the old event listeners
-		var oldTransform:flex.geom.Transform = _transform as flex.geom.Transform;
+		var oldTransform:flex.geom.Transform = _transform as flex.geom.Transform;
 		if (oldTransform)
 		{
 			oldTransform.removeEventListener(PropertyChangeEvent.PROPERTY_CHANGE, transformPropertyChangeHandler);
 		}
-
+
 		var newTransform:flex.geom.Transform = value as flex.geom.Transform;
-
+
 		if (newTransform)
-		{
+		{
 			newTransform.addEventListener(PropertyChangeEvent.PROPERTY_CHANGE, transformPropertyChangeHandler);
 			_matrix = value.matrix.clone(); // Make sure it is a copy
 			clearTransformProperties();
-			_colorTransform = value.colorTransform;
+			_colorTransform = value.colorTransform;
 		}
-
-		_transform = value;
-		notifyElementTransformChanged();
-	}
-
+
+		_transform = value;
+		notifyElementLayerChanged();
+
+        // Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  transformX
 	//----------------------------------
 	private var _transformX:Number = 0;
 	private var transformXChanged:Boolean;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
-	 *  The x position transform point of the element.
+	 *  The x position transform point of the element.
 	 */
 	public function get transformX():Number
 	{
 		return _transformX;
 	}
-
+
 	public function set transformX(value:Number):void
 	{
-		if (_transformX != value)
-		{
-			var oldValue:Number = _transformX;
-			_transformX = value;
-			dispatchPropertyChangeEvent("transformX", oldValue, value);
-
-			transformXChanged = true;
-			notifyElementTransformChanged();
-		}
-	}
-
+		if (_transformX == value)
+		    return;
+
+		var oldValue:Number = _transformX;
+		_transformX = value;
+		dispatchPropertyChangeEvent("transformX", oldValue, value);
+
+		transformXChanged = true;
+		notifyElementLayerChanged();
+
+        // Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  transformY
 	//----------------------------------
 	private var _transformY:Number = 0;
 	private var transformYChanged:Boolean;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
-	 *  The y position transform point of the element.
+	 *  The y position transform point of the element.
 	 */
 	public function get transformY():Number
 	{
 		return _transformY;
 	}
-
+
 	public function set transformY(value:Number):void
 	{
-		if (_transformY != value)
-		{
-			var oldValue:Number = _transformY;
-			_transformY = value;
-			dispatchPropertyChangeEvent("transformY", oldValue, value);
-
-			transformYChanged = true;
-			notifyElementTransformChanged();
-		}
-	}
-
-
+		if (_transformY == value)
+		    return;
+		var oldValue:Number = _transformY;
+		_transformY = value;
+		dispatchPropertyChangeEvent("transformY", oldValue, value);
+
+		transformYChanged = true;
+		notifyElementLayerChanged();
+
+        // Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
+
 	//----------------------------------
 	//  verticalCenter
 	//----------------------------------
 	private var _verticalCenter:Number;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	public function get verticalCenter():Number
 	{
 		return _verticalCenter;
 	}
-
+
 	public function set verticalCenter(value:Number):void
 	{
-		if (_verticalCenter != value)
-		{
-			var oldValue:Number = _verticalCenter;
-			_verticalCenter = value;
-			dispatchPropertyChangeEvent("verticalCenter", oldValue, value);
-
-			sizeChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_verticalCenter == value)
+		    return;
+
+		var oldValue:Number = _verticalCenter;
+		_verticalCenter = value;
+		dispatchPropertyChangeEvent("verticalCenter", oldValue, value);
+
+		invalidateParentSizeAndDisplayList();
+	}
+
 	//----------------------------------
 	//  width
 	//----------------------------------

-	private var _width:Number = 0;
-	protected var _explicitWidth:Number;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+	mx_internal var _width:Number = 0;
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	/**
 	 *  The width of the Graphic Element.
-	 *
+	 *
 	 *  @default 0
 	 */
-	public function get width():Number
+	public function get width():Number
 	{
 		return _width;
 	}
-
+
 	public function set width(value:Number):void
 	{
-	    _explicitWidth = value;
-		var oldValue:Number = _width;
-
-		if (value != oldValue)
-		{
-			_width = value;
-			drawWidth = value;
-			dispatchPropertyChangeEvent("width", oldValue, value);
-			notifyElementChanged();
-		}
-	}
-
+	    explicitWidth = value;
+
+		if (_width == value)
+		    return;
+
+	    var oldValue:Number = _width;
+		_width = value;
+		dispatchPropertyChangeEvent("width", oldValue, value);
+
+        // Invalidate the display list, since we're changing the actual height
+        // and we're not going to correctly detect whether the layout sets
+        // new actual height different from our previous value.
+        // TODO EGeorgie: is this worth optimizing?
+	    invalidateDisplayList();
+	}
+
 	//----------------------------------
 	//  x
 	//----------------------------------
 	// TODO!!! Change to NaN and integrate Rect/Ellipse bounds/draw functions
 	private var _x:Number = 0;
 	private var xChanged:Boolean;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	/**
@@ -892,28 +995,33 @@
 	{
 		return _x;
 	}
-
+
 	public function set x(value:Number):void
 	{
-
-		if (value != _x)
-		{
-			var oldValue:Number = _x;
-			_x = value;
-			dispatchPropertyChangeEvent("x", oldValue, value);
-
-			xChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_x == value)
+		    return;
+
+		var oldValue:Number = _x;
+		_x = value;
+		dispatchPropertyChangeEvent("x", oldValue, value);
+
+		xChanged = true;
+
+        // Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  y
 	//----------------------------------
 	// TODO!!! Change to NaN and integrate Rect/Ellipse bounds/draw functions
 	private var _y:Number = 0;
 	private var yChanged:Boolean;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]
 	/**
@@ -923,88 +1031,99 @@
 	{
 		return _y;
 	}
-
+
 	public function set y(value:Number):void
 	{
-
-		if (value != _y)
-		{
-			var oldValue:Number = _y;
-			_y = value;
-			dispatchPropertyChangeEvent("y", oldValue, value);
-
-			yChanged = true;
-			notifyElementChanged();
-		}
-	}
-
+		if (_y == value)
+		    return;
+
+		var oldValue:Number = _y;
+		_y = value;
+		dispatchPropertyChangeEvent("y", oldValue, value);
+
+		yChanged = true;
+
+        // Parent layout takes transform into account
+		invalidateParentSizeAndDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	//----------------------------------
 	//  visible
 	//----------------------------------

 	private var _visible:Boolean = true;
 	private var visibleChanged:Boolean;
-
+
 	[Bindable("propertyChange")]
 	[Inspectable(category="General")]

 	/**
 	 *  The visible flag for this element.
 	 */
+	public function get visible():Boolean
+	{
+		return _visible;
+	}
+
 	public function set visible(value:Boolean):void
 	{
-		if (value != _visible)
-		{
-			var oldValue:Boolean = _visible;
-			_visible = value;
-			dispatchPropertyChangeEvent("visible", oldValue, value);
-
-			visibleChanged = true;
-			notifyElementChanged();
-		}
-	}
-
-	public function get visible():Boolean
-	{
-		return _visible;
-	}
-
-
+		if (_visible == value)
+		    return;
+
+		var oldValue:Boolean = _visible;
+		_visible = value;
+		dispatchPropertyChangeEvent("visible", oldValue, value);
+
+		visibleChanged = true;
+
+        // TODO EGeorgie: should we redraw for visibility changes?
+		invalidateDisplayList();
+	}
+
 	//--------------------------------------------------------------------------
 	//
 	//  IDisplayObjectElement properties
 	//
 	//--------------------------------------------------------------------------
-
-
+
 	//----------------------------------
 	//  displayObject
 	//----------------------------------
 	private var _displayObject:DisplayObject;
-
-	[Bindable("propertyChange")]
-	[Inspectable(category="General")]
-
+
+	[Bindable("propertyChange")]
+	[Inspectable(category="General")]
+
 	public function get displayObject():DisplayObject
 	{
 		return _displayObject;
 	}
-
+
 	// TODO!!! Figure out what happens when DO is set.
 	public function set displayObject(value:DisplayObject):void
 	{
-		if (value != _displayObject)
-		{
-			var oldValue:DisplayObject = _displayObject;
-			_displayObject = value;
-			//applyTransforms();
-			/* TransformUtil.applyTransforms(value, _matrix, _x, _y, _scaleX, _scaleY,
-				_rotation, _transformX, _transformY); */
-			dispatchPropertyChangeEvent("displayObject", oldValue, value);
-
-		}
-	}
-
+		if (_displayObject == value)
+		    return;
+
+		var oldValue:DisplayObject = _displayObject;
+		_displayObject = value;
+		//applyTransforms();
+		/* TransformUtil.applyTransforms(value, _matrix, _x, _y, _scaleX, _scaleY,
+			_rotation, _transformX, _transformY); */
+		dispatchPropertyChangeEvent("displayObject", oldValue, value);
+
+        // New display object, we need to redraw
+        invalidateDisplayList();
+
+		// TODO EGeorgie: apply the transform properties in commitProperties
+		// instead of in setActualSize, setActualPosition.
+		// invalidateProperties();
+	}
+
 	public function createDisplayObject():DisplayObject
 	{
 		if (displayObject)
@@ -1012,17 +1131,17 @@
 		else
 			return new Sprite();
 	}
-
+
 	public function needsDisplayObject():Boolean
 	{
 		return true;
 	}
-
-
+
+
 	public function draw(g:Graphics):void
 	{
 	}
-
+
 	public function applyMask():void
 	{
 		if (displayObject && _mask)
@@ -1037,13 +1156,13 @@
         	}
 		}
 	}
-
+
 	//--------------------------------------------------------------------------
 	//
 	//  Methods
 	//
 	//--------------------------------------------------------------------------
-
+
 	protected function applyDisplayObjectProperties():void
 	{
 		if (displayObject)
@@ -1053,20 +1172,20 @@
 				alphaChanged = false;
 				displayObject.alpha = _alpha;
 			}
-
-
+
+
 			if (blendModeChanged)
 			{
 				blendModeChanged = true;
 				displayObject.blendMode = _blendMode;
 			}
-
+
 			if (filtersChanged)
 			{
 				filtersChanged = false;
 				displayObject.filters = _clonedFilters;
 			}
-
+
 			if (maskChanged)
 			{
 				maskChanged = false;
@@ -1079,16 +1198,16 @@
 							displayObject.mask = null;
 					}
 					if (_mask)
-						elementHost.addMaskElement(_mask, this);
+						elementHost.addMaskElement(_mask, this);
 				}
 			}
-
+
 			if (maskTypeChanged)
 			{
 				maskTypeChanged = false;
 				applyMaskType();
 			}
-
+
 			if (visibleChanged)
 			{
 				visibleChanged = false;
@@ -1096,10 +1215,10 @@
 			}
 		}
 	}
-
+
 	protected function applyMaskType():void
 	{
-		if (_mask)
+		if (_mask)
 		{
 			if (_maskType == MaskType.CLIP)
 			{
@@ -1107,7 +1226,7 @@
 				_mask.cacheAsBitmap = false;
 				// Save the original filters and clear the filters property
 				//originalMaskFilters = _mask.filters;
-				_mask.filters = [];
+				_mask.filters = [];
 			}
 			else if (_maskType == MaskType.ALPHA)
 			{
@@ -1117,17 +1236,17 @@
 			}
 		}
 	}
-
+
 	protected function clearTransformProperties():void
 	{
 		scaleXChanged = false;
 		scaleYChanged = false;
 		xChanged = false;
 		yChanged = false;
-		rotationChanged = false;
-	}
-
-	/**
+		rotationChanged = false;
+	}
+
+	/**
 	 *  Dispatch a propertyChange event.
 	 */
 	protected function dispatchPropertyChangeEvent(prop:String, oldValue:*, value:*):void
@@ -1135,47 +1254,37 @@
 		dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, prop, oldValue, value));

 	}
-
-	/**
-	 *  Utility method that notifies our host that we have changed and need
-	 *  to be updated.
-	 */
-	protected function notifyElementChanged():void
-	{
-		if (elementHost)
-			elementHost.elementChanged(this);
-	}
-
+
+	// TODO EGeorgie: can we use the standart IInvalidating methods instead of
+	// notifyElementLayerChanged()?
 	/**
 	 *  Utility method that notifies our host that we have changed and need
 	 *  our layer to be updated.
 	 */
 	protected function notifyElementLayerChanged():void
 	{
+	    // TODO EGeorgie: figure this out. For now, invalidateDisplayList
+	    // to preseve original behavior before layout API unification.
+	    invalidateDisplayList();
 		if (elementHost)
 			elementHost.elementLayerChanged(this);
 	}
-
-	protected function notifyElementTransformChanged():void
-	{
-		notifyElementLayerChanged();
-	}
-
+
 	//--------------------------------------------------------------------------
 	//
 	//  EventHandlers
 	//
 	//--------------------------------------------------------------------------
-
+
 	protected function filterChangedHandler(event:Event):void
 	{
 		filters = _filters;
 	}
-
+
 	protected function transformPropertyChangeHandler(event:PropertyChangeEvent):void
 	{
 		if (event.kind == PropertyChangeEventKind.UPDATE)
-		{
+		{
 			if (event.property == "matrix")
 			{
 				// Apply matrix
@@ -1183,8 +1292,15 @@
 				{
 					_matrix = _transform.matrix.clone();
 					clearTransformProperties();
-					notifyElementTransformChanged();
-				}
+					notifyElementLayerChanged();
+
+                    // Parent layout takes transform into account
+					invalidateParentSizeAndDisplayList();
+
+					// TODO EGeorgie: apply the transform properties in commitProperties
+                	// instead of in setActualSize, setActualPosition.
+                	// invalidateProperties();
+				}
 			}
 			else if (event.property == "colorTransform")
 			{
@@ -1192,12 +1308,335 @@
 				if (_transform)
 				{
 					_colorTransform = _transform.colorTransform;
-					notifyElementTransformChanged();
+					invalidateDisplayList();
+					notifyElementLayerChanged();
 				}
 			}
 		}
 	}
-
+
+	//--------------------------------------------------------------------------
+	//
+	//  IInvalidating
+	//
+	//--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     *  Whether this component needs to have its
+     *  commitProperties() method called.
+     */
+    mx_internal var invalidatePropertiesFlag:Boolean = false;
+
+    /**
+     *  @private
+     *  Whether this component needs to have its
+     *  measure() method called.
+     */
+    mx_internal var invalidateSizeFlag:Boolean = false;
+
+    /**
+     *  @private
+     *  Whether this component needs to be have its
+     *  updateDisplayList() method called.
+     */
+    mx_internal var invalidateDisplayListFlag:Boolean = false;
+
+
+	/**
+	 *  Calling this method results in a call to the component's
+	 *  validateProperties() method
+	 *  before the display list is rendered.
+	 *
+	 *
For components that extend UIComponent, this implies
+	 *  that commitProperties() is called.

+	 */
+	public function invalidateProperties():void
+	{
+	    if (invalidatePropertiesFlag)
+	        return;
+	    invalidatePropertiesFlag = true;
+
+        // TODO EGeorgie: hook up directly with the layout manager?
+	    if (elementHost && elementHost is IInvalidating)
+	        IInvalidating(elementHost).invalidateProperties();
+	}
+
+	/**
+	 *  Calling this method results in a call to the component's
+	 *  validateSize() method
+	 *  before the display list is rendered.
+	 *
+	 *
For components that extend UIComponent, this implies
+	 *  that measure() is called, unless the component
+	 *  has both explicitWidth and explicitHeight
+	 *  set.

+	 */
+	public function invalidateSize():void
+	{
+	    if (invalidateSizeFlag)
+	        return;
+	    invalidateSizeFlag = true;
+
+        // TODO EGeorgie: hook up directly with the layout manager?
+	    if (elementHost)
+	        elementHost.elementSizeChanged(this);
+	}
+
+	/**
+	 *  Helper method to invalidate parent size and display list if
+	 *  this object affects its layout (includeInLayout is true).
+	 */
+	protected function invalidateParentSizeAndDisplayList():void
+	{
+	    if (!includeInLayout)
+	        return;
+
+	    // We want to invalidate both the parent size and parent display list.
+	    if (elementHost && elementHost is IInvalidating)
+	    {
+	        IInvalidating(elementHost).invalidateSize();
+	        IInvalidating(elementHost).invalidateDisplayList();
+	    }
+	}
+
+	/**
+	 *  Calling this method results in a call to the component's
+	 *  validateDisplayList() method
+	 *  before the display list is rendered.
+	 *
+	 *
For components that extend UIComponent, this implies
+	 *  that updateDisplayList() is called.

+	 */
+	public function invalidateDisplayList():void
+	{
+	    if (invalidateDisplayListFlag)
+	        return;
+	    invalidateDisplayListFlag = true;
+
+        // TODO EGeorgie: make sure elements that share the display object
+        // will be invalidated as well.
+
+        // TODO EGeorgie: hook up directly with the layout manager?
+        if (elementHost)
+            elementHost.elementChanged(this);
+	}
+
+    /**
+     *  Validates and updates the properties and layout of this object
+     *  by immediately calling validateProperties(),
+	 *  validateSize(), and validateDisplayList(),
+	 *  if necessary.
+     *
+     *
When properties are changed, the new values do not usually have
+	 *  an immediate effect on the component.
+	 *  Usually, all of the application code that needs to be run
+	 *  at that time is executed. Then the LayoutManager starts
+	 *  calling the validateProperties(),
+	 *  validateSize(), and validateDisplayList()
+	 *  methods on components, based on their need to be validated and their
+	 *  depth in the hierarchy of display list objects.

+	 *
+     *
For example, setting the width property is delayed, because
+	 *  it may require recalculating the widths of the object's children
+	 *  or its parent.
+     *  Delaying the processing also prevents it from being repeated
+     *  multiple times if the application code sets the width property
+	 *  more than once.
+     *  This method lets you manually override this behavior.

+     */
+    public function validateNow():void
+    {
+        if (elementHost)
+            UIComponentGlobals.layoutManager.validateClient(ILayoutManagerClient(elementHost));
+    }
+
+    /**
+     *  Used by layout logic to validate the properties of a component
+     *  by calling the commitProperties() method.
+     *  In general, subclassers should
+     *  override the commitProperties() method and not this method.
+     */
+    public function validateProperties():void
+    {
+        if (!invalidatePropertiesFlag)
+            return;
+        commitProperties();
+        invalidatePropertiesFlag = false;
+    }
+
+    /**
+     *  Processes the properties set on the component.
+     *  This is an advanced method that you might override
+     *  when creating a subclass of UIComponent.
+     *
+     *
You do not call this method directly.
+     *  Flex calls the commitProperties() method when you
+     *  use the addChild() method to add a component to a container,
+     *  or when you call the invalidateProperties() method of the component.
+     *  Calls to the commitProperties() method occur before calls to the
+     *  measure() method. This lets you set property values that might
+     *  be used by the measure() method.

+     *
+     *
Some components have properties that affect the number or kinds
+     *  of child objects that they need to create, or have properties that
+     *  interact with each other, such as the horizontalScrollPolicy
+     *  and horizontalScrollPosition properties.
+     *  It is often best at startup time to process all of these
+     *  properties at one time to avoid duplicating work.

+     */
+    protected function commitProperties():void
+    {
+    }
+
+    /**
+     *  @inheritDoc
+     */
+    public function validateSize(recursive:Boolean = false):void
+    {
+        if (!invalidateSizeFlag)
+            return;
+        invalidateSizeFlag = false;
+
+        var sizeChanging:Boolean = measureSizes();
+        if (!sizeChanging || !includeInLayout)
+            return;
+
+        // Our size has changed, parent has to resize and run layout code
+        invalidateParentSizeAndDisplayList();
+    }
+
+    /**
+     *  @private
+     */
+    private function measureSizes():Boolean
+    {
+        var changed:Boolean = false;
+
+        // TODO EGeorgie: Optimize. We don't always need to
+        // call measure() when we have explicit sizes.
+        measure();
+
+        // TODO EGeorgie: Optimize. Detect when the size has changed.
+        changed = true;
+        return changed;
+    }
+
+    /**
+     *  Calculates the default size, and optionally the default minimum size,
+     *  of the component. This is an advanced method that you might override when
+     *  creating a subclass of UIComponent.
+     *
+     *
You do not call this method directly. Flex calls the
+     *  measure() method when the component is added to a container
+     *  using the addChild() method, and when the component's
+     *  invalidateSize() method is called.

+     *
+     *
When you set a specific height and width of a component,
+     *  Flex does not call the measure() method,
+     *  even if you explicitly call the invalidateSize() method.
+     *  That is, Flex only calls the measure() method if
+     *  the explicitWidth property or the explicitHeight
+     *  property of the component is NaN.

+     *
+     *
In your override of this method, you must set the
+     *  measuredWidth and measuredHeight properties
+     *  to define the default size.
+     *  You may optionally set the measuredMinWidth and
+     *  measuredMinHeight properties to define the default
+     *  minimum size.

+     *
+     *
Most components calculate these values based on the content they are
+     *  displaying, and from the properties that affect content display.
+     *  A few components simply have hard-coded default values.

+     *
+     *
The conceptual point of measure() is for the component to provide
+     *  its own natural or intrinsic size as a default. Therefore, the
+     *  measuredWidth and measuredHeight properties
+     *  should be determined by factors such as:

+     *

+     *
The amount of text the component needs to display.

+     *
The styles, such as fontSize, for that text.

+     *
The size of a JPEG image that the component displays.

+     *
The measured or explicit sizes of the component's children.

+     *
Any borders, margins, and gaps.

+     *

+     *
+     *
In some cases, there is no intrinsic way to determine default values.
+     *  For example, a simple GreenCircle component might simply set
+     *  measuredWidth = 100 and measuredHeight = 100 in its measure() method to
+     *  provide a reasonable default size. In other cases, such as a TextArea,
+     *  an appropriate computation (such as finding the right width and height
+     *  that would just display all the text and have the aspect ratio of a Golden Rectangle)
+     *  might be too time-consuming to be worthwhile.

+     *
+     *
The default implementation of measure()
+     *  sets measuredWidth, measuredHeight,
+     *  measuredMinWidth, and measuredMinHeight
+     *  to 0.

+     */
+    protected function measure():void
+    {
+        // TODO EGeorgie:
+//        measuredMinWidth = 0;
+//        measuredMinHeight = 0;
+//        measuredWidth = 0;
+//        measuredHeight = 0;
+    }
+
+    /**
+     *  @inheritDoc
+     */
+    public function validateDisplayList():void
+    {
+        if (!invalidateDisplayListFlag)
+            return;
+        invalidateDisplayListFlag = false;
+
+        updateDisplayList(_width, _height);
+    }
+
+    /**
+     *  Draws the object and/or sizes and positions its children.
+     *  This is an advanced method that you might override
+     *  when creating a subclass of UIComponent.
+     *
+     *
You do not call this method directly. Flex calls the
+     *  updateDisplayList() method when the component is added to a container
+     *  using the addChild() method, and when the component's
+     *  invalidateDisplayList() method is called.

+     *
+     *
If the component has no children, this method
+     *  is where you would do programmatic drawing
+     *  using methods on the component's Graphics object
+     *  such as graphics.drawRect().

+     *
+     *
If the component has children, this method is where
+     *  you would call the move() and setActualSize()
+     *  methods on its children.

+     *
+     *
Components may do programmatic drawing even if
+     *  they have children. In doing either, you should use the
+     *  component's unscaledWidth and unscaledHeight
+     *  as its bounds.

+     *
+     *
It is important to use unscaledWidth and
+     *  unscaledHeight instead of the width
+     *  and height properties.

+     *
+     *  @param unscaledWidth Specifies the width of the component, in pixels,
+     *  in the component's coordinates, regardless of the value of the
+     *  scaleX 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
+     *  scaleY property of the component.
+     */
+    protected function updateDisplayList(unscaledWidth:Number,
+                                         unscaledHeight:Number):void
+    {
+    }
+
 	//--------------------------------------------------------------------------
     //
     //  ILayoutItem
@@ -1207,7 +1646,7 @@
     /**
      *  @return Returns the transformation matrix for this element, or null
      *  if it is detla identity.
-     */
+     */
     protected function computeMatrix(actualMatrix:Boolean):Matrix
     {
     	if (_matrix)
@@ -1217,14 +1656,14 @@
             return null;

         // TODO EGeorgie: share the duplicated code with the TransformUtil.applyTransforms?
-        var m:Matrix = new Matrix();
+        var m:Matrix = new Matrix();
         m.translate(-_transformX, -_transformY);
-        m.scale(_scaleX, _scaleY);
+        m.scale(_scaleX, _scaleY);
         m.rotate(TransformUtil.rotationInRadians(_rotation));
         m.translate(_transformX, _transformY);
         return m;
     }
-
+
     /**
      *  @return Returns the transformed size. Transformation is this element's
      *  transformation matrix.
@@ -1245,7 +1684,7 @@

     /**
      *  Indicates whether to layout should ignore this item or not.
-     */
+     */
     public function get includeInLayout():Boolean
     {
         return true;
@@ -1278,7 +1717,7 @@
     {
         return transformSizeForLayout(maxWidth, maxHeight, false /*actualMatrix*/);
     }
-
+
     /**
      *  @return Returns the desired item TBounds size
      *  as a percentage of parent UBounds. Could be NaN.
@@ -1286,14 +1725,14 @@
     public function get percentSize():Point
     {
         return new Point(percentWidth, percentHeight);
-    }
+    }

     /**
      *  @return Returns the item TBounds size.
-     */
+     */
     public function get actualSize():Point
     {
-    	return transformSizeForLayout(drawWidth, drawHeight, true /*actualMatrix*/);
+    	return transformSizeForLayout(_width, _height, true /*actualMatrix*/);
     }

     /**
@@ -1311,8 +1750,8 @@
     	{
 	        // Calculate the vector from pre-transform top-left to
 	        // post-transform top-left:
-	    	TransformUtil.transformBounds(new Point(drawWidth, drawHeight), m, vec);
-
+	    	TransformUtil.transformBounds(new Point(_width, _height), m, vec);
+
 	    	// Subtract it from (xPos, yPos):
 	    	vec.x = xPos - vec.x;
 	    	vec.y = yPos - vec.y;
@@ -1331,7 +1770,7 @@
     /**
      *  setActualPosition moves the item such that the item TBounds
      *  top left corner has the specified coordinates.
-     */
+     */
     public function setActualPosition(x:Number, y:Number):void
     {
         x -= bounds.left;
@@ -1343,14 +1782,14 @@
         {
         	// Calculate the vector from pre-transform top-left to
         	// post-transform top-left:
-	        var vec:Point = new Point();
-	        TransformUtil.transformBounds(new Point(drawWidth, drawHeight), m, vec);
+	        var vec:Point = new Point();
+	        TransformUtil.transformBounds(new Point(_width, _height), m, vec);

             // Add it to (x,y):
 	        x += vec.x;
 	        y += vec.y;
         }
-
+
         // Take stroke into account:
         // TODO EGeorgie: We assume that the stroke extents are even on both sides.
         // and that's not necessarily true.
@@ -1367,23 +1806,23 @@
     /**
      *  setActualSize modifies the item size/transform so that
      *  its TBounds have the specified width and height.
-     *
+     *
      *  If one of the desired TBounds dimensions is left unspecified, it's size
      *  will be picked such that item can be optimally sized to fit the other
-     *  TBounds dimension. This is useful when the layout doesn't want to
+     *  TBounds dimension. This is useful when the layout doesn't want to
      *  overconstrain the item in cases where the item TBounds width & height
      *  are dependent (text, components with complex transforms, etc.)
-     *
+     *
      *  If both TBounds dimensions are left unspecified, the item will have its
      *  preferred size set.
-     *
+     *
      *  setActualSize does not clip against minSize and
      *  maxSize properties.
-     *
+     *
      *  setActualSize must preserve the item's TBounds position,
      *  which means that in some cases it will move the item in addition to
      *  changing its size.
-     *
+     *
      *  @return Returns the TBounds of the new item size.
      */
     public function setActualSize(width:Number = Number.NaN, height:Number = Number.NaN):Point
@@ -1393,7 +1832,7 @@
     	// Calculate the width and height pre-transform:
     	var m:Matrix = computeMatrix(true /*actualMatrix*/);
         if (!m)
-        {
+        {
 	        if (isNaN(width))
 	        	width = preferredSize.x;
 	        if (isNaN(height))
@@ -1407,10 +1846,10 @@
         {
         	if (!isNaN(width))
                width -= strokeExtents.x;
-
+
             if (!isNaN(height))
                height -= strokeExtents.y;
-
+
             var newSize:Point = TransformUtil.fitBounds(width, height, m,
                                                         bounds.width, bounds.height,
                                                         minWidth, minHeight,
@@ -1427,28 +1866,33 @@
             }
         }

-        drawWidth = width;
-        drawHeight = height;
-
+        if (_width != width || _height != height)
+        {
+            _width = width;
+            _height = height;
+            invalidateDisplayList();
+        }
+
+        // TODO EGeorgie: move to commit properties
         // Finally, apply the transforms to the object
         commitScaleAndRotation();
         return actualSize;
     }
-
+
     private function beginCommitTransformProps():void
 	{
         if (_mask && isMaskInElementSpace)
         {
             var maskMatrix:Matrix = _mask.transform.matrix;
             var dispObjMatrix:Matrix = displayObject.transform.matrix.clone();
-
+
             dispObjMatrix.invert();
             maskMatrix.concat(dispObjMatrix);
             _mask.transform.matrix = maskMatrix;
             isMaskInElementSpace = false;
         }
 	}
-
+
 	private function endCommitTransformProps():void
 	{
         if (_mask && !isMaskInElementSpace)
@@ -1459,9 +1903,9 @@
             isMaskInElementSpace = true;
         }
 	}
-
-    /**
-     *  Applies _x and _y properties to the display object.
+
+    /**
+     *  Applies _x and _y properties to the display object.
      */
     protected function commitXY():void
     {
@@ -1469,44 +1913,44 @@
             return;

         beginCommitTransformProps();
-
+
         TransformUtil.applyTransforms(displayObject, null, _x, _y);
         _x = displayObject.x;
         _y = displayObject.y;
         xChanged = false;
         yChanged = false;
-
+
         endCommitTransformProps();
     }
-
-    /**
-     *  Applies _scaleX and _scaleY properties to the display object.
-     */
+
+    /**
+     *  Applies _scaleX and _scaleY properties to the display object.
+     */
     protected function commitScaleAndRotation():void
     {
         if (!displayObject)
             return;
-
+
         beginCommitTransformProps();

         var rot:Number = rotationChanged ? _rotation : NaN;
-        TransformUtil.applyTransforms(displayObject, _matrix, NaN, NaN,
+        TransformUtil.applyTransforms(displayObject, _matrix, NaN, NaN,
                                       _scaleX, _scaleY, rot, _transformX, _transformY);

-        _matrix = null;
+        _matrix = null;
         _scaleX = displayObject.scaleX;
         _scaleY = displayObject.scaleY;
         _rotation = displayObject.rotation;
-
+
         if (!xChanged)
             _x = displayObject.x;
         if (!yChanged)
             _y = displayObject.y;
-
+
         scaleXChanged = false;
         scaleYChanged = false;
         rotationChanged = false;
-
+
         endCommitTransformProps();
     }

@@ -1517,7 +1961,7 @@

     // TODO EGeorgie: return rectangle instead so that the function can
     // correctly indicate the left, right, top and bottom extents. Right
-    // now we assume they are the same on both sides.
+    // now we assume they are the same on both sides.
     protected function getStrokeExtents():Point
     {
     	// TODO EGeorgie: currently we take only scale into account,
@@ -1535,7 +1979,7 @@
         var scaleMode:String = stroke.scaleMode;
         if (!scaleMode || scaleMode == LineScaleMode.NONE)
             return new Point(weight, weight);
-
+
         // TODO EGeorgie: stroke thickness depends on all matrix components,
         // not only on scale.
         if (scaleMode == LineScaleMode.NORMAL)
@@ -1562,16 +2006,16 @@
     //  IConstraintClient
     //
     //--------------------------------------------------------------------------
-
+
     public function getConstraintValue(constraintName:String):*
     {
     	return this[constraintName];
     }
-
+
     public function setConstraintValue(constraintName:String, value:*):void
     {
     	this[constraintName] = value;
     }
-
+
 }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 4009
Author:   jimurphy@adobe.com
Date:     2008-11-04T15:10:34.970681Z

Log Message:
-----------
Merged alpha_gumbo revisions 3929,3936-3937,3945,3956,3971,3986,3994,4002,4006 -> trunk

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/CompositeEffectInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/BitmapGraphic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/FxRotate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/flash_component_icon.png</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/FxComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/IEffectInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/filters/ShaderFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/flash_container_icon_small.png</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/ParallelInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/StrokedElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Effect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/TweenEffectInstance.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/effectClasses/FxAnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/ResizeMode.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/flash_container_icon.png</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/effects/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxDataContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/IEffect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/baseClasses/GroupBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/utilities/src/flash_component_icon_small.png</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/StrokedElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/StrokedElement.as
@@ -119,13 +119,14 @@
         //trace("StrokedElement.updateDisplayList w",unscaledWidth,"h",unscaledHeight,"drawnDisplayObject",drawnDisplayObject,"this",this);
         if (!drawnDisplayObject || !(drawnDisplayObject is Sprite))
             return;
-
-        if (displayObject is Sprite)
-            Sprite(displayObject).graphics.clear();
-        else if (displayObject is Shape)
-            Shape(displayObject).graphics.clear();

         var g:Graphics = (drawnDisplayObject as Sprite).graphics;
+
+		// We only clear if we have a displayObject. This handles the case of having our own displayObject and the
+		// case when we have a mask and have created a _drawnDisplayObject. We don't want to clear if we are
+		// sharing a display object.
+		if (displayObject)
+			g.clear();

         beginDraw(g);
         drawElement(g);


completed proxy side of the code, untested

--- return_of_the_rtmfpcat.as
+++ return_of_the_rtmfpcat.as
@@ -59,6 +59,9 @@
         /* Maximum connections. */
         private const MAXIMUM_RCP_PAIRS:uint = 1;

+        /* Milliseconds. */
+        private const FACILITATOR_POLL_INTERVAL:int = 10000;
+
         /* TextField for debug output. */
         private var output_text:TextField;

@@ -87,6 +90,9 @@

         /* Number of connected RTMFPConnectionPairs. */
         private var rcp_pairs:uint;
+
+        /* Keep track of facilitator polling timer. */
+        private var fac_poll_timeo_id:uint;

         /* Put a string to the screen. */
         public function puts(s:String):void
@@ -192,7 +198,7 @@
                 clearInterval(circon_timeo_id);

                 if(proxy_mode) {
-
+                   poll_for_id();
                 } else {
                     puts("Setting up listening RTMFPConnectionPair");
                     var rcp:RTMFPConnectionPair = new RTMFPConnectionPair(circon, tor_addr, output_text);
@@ -209,6 +215,43 @@
             }
         }

+        private function poll_for_id():void
+        {
+            var s_f:Socket = new Socket();
+            s_f.addEventListener(Event.CONNECT, function (e:Event):void {
+                puts("Facilitator: connected to " + fac_addr.host + ":" + fac_addr.port + ".");
+                s_f.writeUTFBytes("GET / HTTP/1.0\r\n\r\n");
+            });
+            s_f.addEventListener(Event.CLOSE, function (e:Event):void {
+                puts("Facilitator: connection closed.");
+            });
+            s_f.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void {
+                puts("Facilitator: I/O error: " + e.text + ".");
+            });
+            s_f.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {
+                var clientID:String = s_f.readMultiByte(e.bytesLoaded, "utf-8");
+                puts("Facilitator: got \"" + clientID + "\"");
+                if (clientID != "Registration list empty") {
+                    puts("Connecting to " + clientID + ".");
+                    var rcp:RTMFPConnectionPair = new RTMFPConnectionPair(circon, tor_addr, output_text);
+                    rcp.addEventListener(Event.CONNECT, rcp_connect_event);
+                    rcp.addEventListener(Event.CLOSE, rcp_close_event);
+                    rcp.connect(clientID);
+                } else {
+                    /* Need to clear any outstanding timers to ensure
+                     * that only one timer ever runs. */
+                    clearTimeout(fac_poll_timeo_id);
+                    fac_poll_timeo_id = setTimeout(poll_for_id, FACILITATOR_POLL_INTERVAL);
+                }
+            });
+            s_f.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void {
+                puts("Facilitator: security error: " + e.text + ".");
+            });
+
+            s_f.connect(fac_addr.host, fac_addr.port);
+
+        }
+
         private function rcp_connect_event(e:Event):void
         {
             puts("RTMFPConnectionPair connected");
@@ -216,7 +259,9 @@
             rcp_pairs++;

             if(proxy_mode) {
-
+                if(rcp_pairs < MAXIMUM_RCP_PAIRS) {
+                    poll_for_id();
+                }
             } else {
                 /* Setup listening RTMFPConnectionPair. */
                 if(rcp_pairs < MAXIMUM_RCP_PAIRS) {
@@ -237,6 +282,19 @@

             /* FIXME: Do I need to unregister the event listeners so
              * that the system can garbage collect the rcp object? */
+            if(proxy_mode) {
+                if(rcp_pairs < MAXIMUM_RCP_PAIRS) {
+                    poll_for_id();
+                }
+            } else {
+                if(rcp_pairs < MAXIMUM_RCP_PAIRS) {
+                    puts("Setting up listening RTMFPConnectionPair");
+                    var rcp:RTMFPConnectionPair = new RTMFPConnectionPair(circon, tor_addr, output_text);
+                    rcp.addEventListener(Event.CONNECT, rcp_connect_event);
+                    rcp.addEventListener(Event.CLOSE, rcp_close_event);
+                    rcp.listen();
+                }
+            }
         }

         private function register_id(id:String, fac_addr:Object):void
@@ -349,6 +407,30 @@
         send_stream.publish(DATA);
     }

+    public function connect(clientID:String):void
+    {
+        puts("RTMFPSocket: connecting to peer...");
+
+        send_stream = new NetStream(circon, NetStream.DIRECT_CONNECTIONS);
+        var client:Object = new Object();
+        client.onPeerConnect = function (peer:NetStream):Boolean {
+            puts("RTMFPSocket: connected to peer");
+            connected = true;
+            dispatchEvent(new Event(Event.CONNECT));
+            return true;
+        };
+        send_stream.client = client;
+        send_stream.publish(DATA);
+
+        recv_stream = new NetStream(circon, clientID);
+        var client:RTMFPSocketClient = new RTMFPSocketClient();
+        client.addEventListener(ProgressEvent.SOCKET_DATA, function (event:ProgressEvent):void {
+            dispatchEvent(event);
+        }, false, 0, true);
+        recv_stream.client = client;
+        recv_stream.play(DATA);
+    }
+
     private function send_stream_peer_connect(peer:NetStream):Boolean
     {
         puts("RTMFPSocket: peer connecting...");
@@ -483,6 +565,14 @@
         this.output_text = output_text;
     }

+    public function connect(clientID:String):void
+    {
+        s_r = new RTMFPSocket(circon, output_text);
+        s_r.addEventListener(Event.CONNECT, rtmfp_connect_event);
+        s_r.addEventListener(Event.CLOSE, rtmfp_close_event);
+        s_r.connect(clientID);
+    }
+
     public function listen():void
     {
         s_r = new RTMFPSocket(circon, output_text);
@@ -500,6 +590,18 @@
         s_t = new Socket();
         s_t.addEventListener(Event.CONNECT, function (e:Event):void {
             puts("RTMFPConnectionPair: Tor: connected to " + tor_addr.host + ":" + tor_addr.port + ".");
+            s_r.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {
+                var bytes:ByteArray = new ByteArray();
+                s_r.readBytes(bytes, 0, e.bytesLoaded);
+                puts("RTMFPConnectionPair: RTMFP: read " + bytes.length + " bytes.");
+                s_t.writeBytes(bytes);
+            });
+            s_t.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {
+                var bytes:ByteArray = new ByteArray();
+                s_t.readBytes(bytes, 0, e.bytesLoaded);
+                puts("RTMFPConnectionPair: Tor: read " + bytes.length + " bytes.");
+                s_r.writeBytes(bytes);
+            });
             dispatchEvent(new Event(Event.CONNECT));
         });
         s_t.addEventListener(Event.CLOSE, function (e:Event):void {
@@ -513,12 +615,6 @@
         s_t.addEventListener(IOErrorEvent.IO_ERROR, function (e:IOErrorEvent):void {
             puts("RTMFPConnectionPair: Tor: I/O error: " + e.text + ".");
         });
-        s_t.addEventListener(ProgressEvent.SOCKET_DATA, function (e:ProgressEvent):void {
-            var bytes:ByteArray = new ByteArray();
-            s_t.readBytes(bytes, 0, e.bytesLoaded);
-            puts("RTMFPConnectionPair: Tor: read " + bytes.length + " bytes.");
-            s_r.writeBytes(bytes);
-        });
         s_t.addEventListener(SecurityErrorEvent.SECURITY_ERROR, function (e:SecurityErrorEvent):void {
             puts("RTMFPConnectionPair: Tor: security error: " + e.text + ".");
         });


Cleaning up SuiteIterator

Cleaning up SuiteIterator

--- as3/src/asunit4/framework/TestIterator.as
+++ as3/src/asunit4/framework/TestIterator.as
@@ -5,7 +5,6 @@

     import p2.reflect.Reflection;
     import p2.reflect.ReflectionMethod;
-

     public class TestIterator implements Iterator {

@@ -22,12 +21,7 @@

             var testMethodsArray:Array = getTestMethods(test);
             if (!testMethodsArray.length) {
-                testMethods        = new ArrayIterator();
-                beforeClassMethods = new ArrayIterator();
-                beforeMethods      = new ArrayIterator();
-                afterMethods       = new ArrayIterator();
-                afterClassMethods  = new ArrayIterator();
-                ignoredMethods     = new ArrayIterator();
+                setUpNullIterators();
                 return;
             }

@@ -39,11 +33,26 @@
                 );
             }

-            testMethods         = new ArrayIterator(testMethodsArray);
+            testMethods = new ArrayIterator(testMethodsArray);
+            setUpIterators(test);
+        }
+
+        private function setUpNullIterators():void {
+            // Set up null iterators for access to length
+            // and other properties...
+            testMethods        = new ArrayIterator();
+            beforeClassMethods = new ArrayIterator();
+            beforeMethods      = new ArrayIterator();
+            afterMethods       = new ArrayIterator();
+            afterClassMethods  = new ArrayIterator();
+            ignoredMethods     = new ArrayIterator();
+        }
+
+        private function setUpIterators(test:Object):void {
+            afterClassMethods   = new ArrayIterator(getAfterClassMethods(test));
+            afterMethods        = new ArrayIterator(getAfterMethods(test));
             beforeClassMethods  = new ArrayIterator(getBeforeClassMethods(test));
             beforeMethods       = new ArrayIterator(getBeforeMethods(test));
-            afterMethods        = new ArrayIterator(getAfterMethods(test));
-            afterClassMethods   = new ArrayIterator(getAfterClassMethods(test));
             ignoredMethods      = new ArrayIterator(getIgnoredMethods(test));
         }


Transferred from the Adobe Open Source Subversion Repository

Revision: 20015
Author:   klin@adobe.com
Date:     2011-01-31T17:51:43.656103Z

Log Message:
-----------
Add ASDoc example and copyright header for RuntimeDPIProvider. No code changes.

QE notes: No
Doc notes: No
Bugs: No
Reviewer: No
Tests run: checkintests
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/asdoc/en_US/mx/core/examples/RuntimeDPIProviderExample.as</path>
<path kind="dir" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/asdoc/en_US/mx/core/examples/views</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/asdoc/en_US/mx/core/examples/views/RuntimeDPIProviderAppView.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/framework/asdoc/en_US/mx/core/examples/RuntimeDPIProviderApp.mxml</path>

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

--- frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as
+++ frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as
@@ -1,3 +1,14 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2011 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 mx.core
 {
 import flash.system.Capabilities;
@@ -29,7 +40,11 @@
  *
Subclasses of RuntimeDPIProvider should only depend on runtime APIs
  *  and should not depend on any classes specific to the Flex framework except
  *  mx.core.DPIClassification.

- *
+ *
+ *  @includeExample examples/RuntimeDPIProviderApp.mxml -noswf
+ *  @includeExample examples/RuntimeDPIProviderExample.as -noswf
+ *  @includeExample examples/views/RuntimeDPIProviderAppView.mxml -noswf
+ *
  *  @see mx.core.DPIClassification
  *  @see spark.components.Application#applicationDPI
  */


Transferred from the Adobe Open Source Subversion Repository

Revision: 5383
Author:   jimurphy@adobe.com
Date:     2009-03-18T13:08:33.865663Z

Log Message:
-----------
Merge 3.x revisions 5326-5327,5329,5343 -> trunk

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/LinkButton.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IToggleButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectUtil.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/ModuleManager.as</path>

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

--- frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as
+++ frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as
@@ -1347,6 +1347,8 @@
     private function moduleInfo_readyHandler(event:ModuleEvent):void
     {
         var styleEvent:StyleEvent = new StyleEvent(StyleEvent.COMPLETE);
+        styleEvent.bytesLoaded = event.bytesLoaded;
+        styleEvent.bytesTotal = event.bytesTotal;
         dispatchEvent(styleEvent);
     }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 10633
Author:   dloverin@adobe.com
Date:     2009-09-28T13:24:30.559033Z

Log Message:
-----------
Use styleManager instance instead of StyleManager singleton (framework and compiler generated code)

Modified compiler generated style code for the FlexInit class. The style related changes are only available with the -keep option. AST generation is coming later.

Only the framework project is changed here. The other projects are will be changed soon.

QE notes: None.
Doc notes: None.
Bugs:
Reviewer: Alex and Paul
Tests run: checkintests, all Mustella tests(no new failures)
Is noteworthy for integration: no.

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ButtonBarButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/HaloBorder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/accordionClasses/AccordionHeader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/utilityClasses/CanvasLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateChooser.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/dragClasses/DragProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/configuration_en.properties</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/common/CompilerConfiguration.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressIndeterminateSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/DateChooserMonthArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/lang/StandardDefs.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/SliderThumbSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DateField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/DividedBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/DragManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollThumbSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridColumn.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/IStyleModule.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Form.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/IStyleManager2.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/tools/PreLink.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/DataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/mxml/gen/ClassDefLib.vm</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/TitleBackground.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/NumericStepperDownSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/PopUpButtonSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/ProgrammaticSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/TabSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/textClasses/TextRange.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/LayoutContainer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/AccordionHeaderSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/CheckBoxIcon.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/NumericStepperUpSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/RadioButtonIcon.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextField.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/states/SetStyle.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ComboBoxArrowSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridHeaderBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/FormItem.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridHeader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/MenuBarBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ProgressBarSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/SWFLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/BusyCursor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/Request.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/MenuBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Tree.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/CSSStyleDeclaration.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Accordion.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/SliderTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/StyleProtoChain.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleModule.vm</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/ScrollTrackSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/skins/halo/DataGridHeaderBackgroundSkin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/modules/ModuleManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/SetStyleActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/css/StyleDef.vm</path>

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

--- frameworks/projects/mx/src/mx/skins/halo/AccordionHeaderSkin.as
+++ frameworks/projects/mx/src/mx/skins/halo/AccordionHeaderSkin.as
@@ -144,7 +144,7 @@
 		var borderColor:uint = getStyle("borderColor");
 		var fillAlphas:Array = getStyle("fillAlphas");
 		var fillColors:Array = getStyle("fillColors");
-		StyleManager.getColorNames(fillColors);
+        styleManager.getColorNames(fillColors);
 		var highlightAlphas:Array = getStyle("highlightAlphas");
 		var selectedFillColors:Array = getStyle("selectedFillColors");
 		var themeColor:uint = getStyle("themeColor");