Transferred from the Adobe Open Source Subversion Repository

Revision: 7952
Author:   cframpto@adobe.com
Date:     2009-06-18T09:57:23.131767Z

Log Message:
-----------
PARB changes for RichEditableText, TextArea and TextInput

RichEditableText, TextArea
--------------------------
content:Object setter only for use by MXML compiler
textFlow:TextFlow getter/setter added
scrollToPosition -> scrollToRange()
getSelectionFormat() -> getFormatOfRange(requestedFormats:Vector.<String> = null, anchorPosition=-1,                  activePosition=-1):TextLayoutFormat
    If either position is -1, the current selection will be used.
setSelectionFormat() -> setFormatOfRange(format:TextLayoutFormat, anchorPosition=-1, activePosition=-1):void
    If either position is -1, the current selection will be used.
export() removed

RichEditableText, TextBase
--------------------------
autoSize removed
widthInChars defaults to NaN
heightInLines defaults to NaN
    If both are NaN, and not in scroller, it will autoSize.
    If both are NaN, and in scroller, widthInChars effectively 15, heightInLines effectively 10.
    If widthInChars is NaN and heightInLines is not, widthInChars effectively 1.
    If heightInLines is NaN and widthInChars is not, heightInLines effectively 1.
selectionVisibility:String -> selectionHighlighting:String
TextSelectionVisibiliy.as -> TextSelectionHightlighting.as
setSelection -> selectRange(anchor, active) and the args are no longer optional
selectAll() added

TextBase
--------
TextBase.as -> SkinnableTextBase.as
it will not support any non-inheriting styles
textView skin part -> textDisplay
widthInChars property removed and moved to TextInput and TextArea

Styles
-------
Renamed style selectionColor -> focusedTextSelectionColor
Renamed style unfocusedSelectionColor -> unfocusedTextSelectionColor
Renamed inactiveSelectionColor -> inactiveTextSelectionColor

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/spark/TextInputSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/styles/metadata/SelectionFormatTextStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/spark/TextAreaSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/defaults.css</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/TextBase.as" copyfrom-rev="7834" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextSelectionVisibility.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/NumericStepper.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/TextBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/spark-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/skins/spark/NumericStepperTextInputSkin.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/defaults.css</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextArea.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextSelectionVisibility.as" copyfrom-rev="7834" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/TextSelectionHighlighting.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/supportClasses/RichEditableTextContainerManager.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/RichEditableTextContainerManager.as
@@ -31,7 +31,7 @@
 import mx.core.mx_internal;

 import spark.primitives.RichEditableText;
-import spark.components.TextSelectionVisibility;
+import spark.components.TextSelectionHighlighting;

 use namespace mx_internal;

@@ -62,7 +62,7 @@
     {
         super(container, configuration);

-        textView = container;
+        textDisplay = container;
     }

     //--------------------------------------------------------------------------
@@ -79,7 +79,7 @@
     /**
      *  @private
      */
-    private var textView:RichEditableText;
+    private var textDisplay:RichEditableText;

     //--------------------------------------------------------------------------
     //
@@ -96,7 +96,7 @@
         var width:Number = compositionWidth;
         var height:Number = compositionHeight;

-        if (!textView.actuallyAutoSizing && (isNaN(width) || isNaN(height)))
+        if (!textDisplay.actuallyAutoSizing && (isNaN(width) || isNaN(height)))
             return false;  // just measuring!

         var contentBounds:Rectangle = getContentBounds();
@@ -104,7 +104,7 @@
         // If autoSize, use the content values rather than the composition
         // values. The composition values allow room for growth
         // (width=maxWidth, height=NaN).
-        if (textView.actuallyAutoSizing)
+        if (textDisplay.actuallyAutoSizing)
         {
             width = contentBounds.width;
             height = contentBounds.height;
@@ -162,13 +162,13 @@
      */
     override protected function getUndoManager():IUndoManager
     {
-        if (!textView.undoManager)
-        {
-            textView.undoManager = new UndoManager();
-            textView.undoManager.undoAndRedoItemLimit = int.MAX_VALUE;
+        if (!textDisplay.undoManager)
+        {
+            textDisplay.undoManager = new UndoManager();
+            textDisplay.undoManager.undoAndRedoItemLimit = int.MAX_VALUE;
         }

-        return textView.undoManager;
+        return textDisplay.undoManager;
     }

     /**
@@ -176,7 +176,7 @@
      */
     override protected function getFocusedSelectionFormat():SelectionFormat
     {
-        var selectionColor:* = textView.getStyle("selectionColor");
+        var selectionColor:* = textDisplay.getStyle("focusedTextSelectionColor");

         var focusedPointAlpha:Number =
             editingMode == EditingMode.READ_WRITE ?
@@ -196,11 +196,12 @@
      */
     override protected function getUnfocusedSelectionFormat():SelectionFormat
     {
-        var unfocusedSelectionColor:* = textView.getStyle(
-                                            "unfocusedSelectionColor");
+        var unfocusedSelectionColor:* = textDisplay.getStyle(
+                                            "unfocusedTextSelectionColor");

         var unfocusedAlpha:Number =
-            textView.selectionVisibility != TextSelectionVisibility.WHEN_FOCUSED ?
+            textDisplay.selectionHighlighting !=
+            TextSelectionHighlighting.WHEN_FOCUSED ?
             1.0 :
             0.0;

@@ -215,11 +216,12 @@
      */
     override protected function getInactiveSelectionFormat():SelectionFormat
     {
-        var inactiveSelectionColor:* = textView.getStyle(
-                                            "inactiveSelectionColor");
+        var inactiveSelectionColor:* = textDisplay.getStyle(
+                                            "inactiveTextSelectionColor");

         var inactiveAlpha:Number =
-            textView.selectionVisibility == TextSelectionVisibility.ALWAYS ?
+            textDisplay.selectionHighlighting ==
+            TextSelectionHighlighting.ALWAYS ?
             1.0 :
             0.0;

@@ -229,12 +231,21 @@
             inactiveSelectionColor, 0.0);
     }

+    override public function setText(text:String):void
+    {
+        textDisplay.ignoreDamageEvent = true;
+
+        super.setText(text);
+
+        textDisplay.ignoreDamageEvent = false;
+    }
+
     /**
      *  @private
      */
     override public function focusInHandler(event:FocusEvent):void
     {
-        textView.focusInHandler(event);
+        textDisplay.focusInHandler(event);

         super.focusInHandler(event);
     }
@@ -244,7 +255,7 @@
      */
     override public function focusOutHandler(event:FocusEvent):void
     {
-        textView.focusOutHandler(event);
+        textDisplay.focusOutHandler(event);

         super.focusOutHandler(event);
     }
@@ -254,7 +265,7 @@
      */
     override public function keyDownHandler(event:KeyboardEvent):void
     {
-        textView.keyDownHandler(event);
+        textDisplay.keyDownHandler(event);

         if (!event.isDefaultPrevented())
             super.keyDownHandler(event);


Fix to CIListener to use double quotes and correct spacing for result XML.  Re-fixed from the pull from mlabriola.

--- FlexUnit4CIListener/src/org/flexunit/listeners/CIListener.as
+++ FlexUnit4CIListener/src/org/flexunit/listeners/CIListener.as
@@ -161,7 +161,7 @@
 			// called after each test
 			if(!lastFailedTest || description.displayName != lastFailedTest.displayName){
 				var desc:Descriptor = getDescriptorFromDescription(description);
-				sendResults("<testcase classname='"+desc.suite+"' name='"+desc.method+"' time='" + testTimeString( lastTestTime ) +"' status='"+SUCCESS+"'/>");
+				sendResults("<testcase classname=\""+desc.suite+"\" name=\""+desc.method+"\" time=\"" + testTimeString( lastTestTime ) +"\" status=\""+SUCCESS+"\" />");
 			}
 		}

@@ -176,7 +176,7 @@
 			var descriptor:Descriptor = getDescriptorFromDescription(description);

 			var xml:String =
-				"<testcase classname='"+descriptor.suite+"' name='"+descriptor.method+"' time='" + testTimeString( lastTestTime ) + "' status='"+IGNORE+"'>"
+				"<testcase classname=\""+descriptor.suite+"\" name=\""+descriptor.method+"\" time=\"" + testTimeString( lastTestTime ) + "\" status=\""+IGNORE+"\">"
 				+ "<skipped />"
 				+ "</testcase>";

@@ -205,8 +205,8 @@
 			if(FailureFormatter.isError(failure.exception))
 			{
 				xml =
-					"<testcase classname='"+descriptor.suite+"' name='"+descriptor.method+"' time='" + testTimeString( lastTestTime ) +"' status='"+ERROR+"'>"
-					+ "<error message='" + message + "' type='"+ type +"' >"
+					"<testcase classname=\""+descriptor.suite+"\" name=\""+descriptor.method+"\" time=\"" + testTimeString( lastTestTime ) +"\" status=\""+ERROR+"\">"
+					+ "<error message=\"" + message + "\" type=\""+ type +"\">"
 					+ "<![CDATA[" + stackTrace + "]]>"
 					+ "</error>"
 					+ "</testcase>";
@@ -214,8 +214,8 @@
 			else
 			{
 				xml =
-					"<testcase classname='"+descriptor.suite+"' name='"+descriptor.method+"' time='" + testTimeString( lastTestTime ) +"' status='"+FAILURE+"'>"
-					+ "<failure message='" + message + "' type='"+ type +"' >"
+					"<testcase classname=\""+descriptor.suite+"\" name=\""+descriptor.method+"\" time=\"" + testTimeString( lastTestTime ) +"\" status=\""+FAILURE+"\">"
+					+ "<failure message=\"" + message + "\" type=\""+ type +"\" >"
 					+ "<![CDATA[" + stackTrace + "]]>"
 					+ "</failure>"
 					+ "</testcase>";


tests

tests

--- src/com/kemsky/filters/_.as
+++ src/com/kemsky/filters/_.as
@@ -1,7 +1,7 @@
 package com.kemsky.filters
 {
     /**
-     * Loopback function, allows to use stream item as an argument for other functions
+     * Loopback (identity function) function, allows to use stream item as an argument for other functions
      * @param item current item
      * @return item passed as an argument
      */


Minor type fix

Minor type fix

--- lib/openfl/events/KeyboardEvent.as
+++ lib/openfl/events/KeyboardEvent.as
@@ -85,7 +85,7 @@
 		 * (`KeyLocation.STANDARD`) versus the numeric keypad
 		 * (`KeyLocation.NUM_PAD`).
 		 */
-		public var keyLocation:KeyLocation;
+		public var keyLocation:uint;

 		/**
 		 * Indicates whether the Shift key modifier is active(`true`) or


refactored Camera.projection into Camera.getProjection() and added Camera.getWorldToScreen() and Camera.getScreenToWorld()

--- src/aerys/minko/scene/node/Camera.as
+++ src/aerys/minko/scene/node/Camera.as
@@ -52,11 +52,6 @@
 			_cameraData.zFar = value;
 		}

-		public function get projection() : Matrix4x4
-		{
-			return _cameraData.projection;
-		}
-
 		public function get enabled() : Boolean
 		{
 			return _enabled;
@@ -81,6 +76,16 @@
 		public function get deactivated() : Signal
 		{
 			return _deactivated;
+		}
+
+		public function get worldToView() : Matrix4x4
+		{
+			return localToWorld;
+		}
+
+		public function get viewToWorld() : Matrix4x4
+		{
+			return worldToLocal;
 		}

 		public function Camera(fieldOfView	: Number = DEFAULT_FOV,
@@ -130,5 +135,26 @@

 			return out;
 		}
+
+		public function getWorldToScreen(output : Matrix4x4) : Matrix4x4
+		{
+			return output != null
+				? output.copyFrom(_cameraData.worldToScreen)
+				: _cameraData.worldToScreen.clone();
+		}
+
+		public function getScreenToWorld(output : Matrix4x4) : Matrix4x4
+		{
+			return output != null
+				? output.copyFrom(_cameraData.screenToWorld)
+				: _cameraData.screenToWorld.clone();
+		}
+
+		public function getProjection(output : Matrix4x4) : Matrix4x4
+		{
+			return output != null
+				? output.copyFrom(_cameraData.projection)
+				: _cameraData.projection.clone();
+		}
 	}
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 23246
Author:   cframpto@adobe.com
Date:     2011-12-20T17:40:08.069454Z

Log Message:
-----------
Rollback 23243.  If comment followed header it was stripped as well.

Modified Paths:
--------------
2361 paths were modified

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

--- frameworks/projects/automation/src/mx/automation/delegates/controls/DateChooserAutomationImpl.as
+++ frameworks/projects/automation/src/mx/automation/delegates/controls/DateChooserAutomationImpl.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 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.automation.delegates.controls
 {


Fix EventDispatcher#toString

Fix EventDispatcher#toString

--- src/flash/events/EventDispatcher.as
+++ src/flash/events/EventDispatcher.as
@@ -21,7 +21,7 @@
     ctor(target);
   }
   public function toString():String {
-    return '[object EventDispatcher]';
+    return Object.prototype.toString.call(this);
   }
   public native function addEventListener(type:String, listener:Function,
                                           useCapture:Boolean = false, priority:int = 0,


Clone ByteArray in BitArray class to avoid side effects

--- src/com/axis/rtspclient/BitArray.as
+++ src/com/axis/rtspclient/BitArray.as
@@ -9,7 +9,7 @@
     private var bitpos:uint;

     public function BitArray(src:ByteArray) {
-      this.src    = src;
+      this.src = clone(src);
       this.bitpos = 0;
       this.byte   = 0; /* This should really be undefined, uint wont allow it though */
     }
@@ -48,7 +48,7 @@

       return n - 1; /* Because result in exp golomb is one larger */
     }
-
+
     public function readSignedExpGolomb():uint {
         var r:uint = this.readUnsignedExpGolomb();
         if (r & 0x01) {
@@ -58,5 +58,12 @@
         }
         return r;
     }
+
+    public function clone(source:ByteArray):* {
+        var temp:ByteArray = new ByteArray();
+        temp.writeObject(source);
+        temp.position = 0;
+        return(temp.readObject());
+    }
   }
 }


 - fully implemented ::cancel and ::timer_complete in TimerCommand

git-svn-id: e38e7cdd6ace00d8230583a2d3b43e9a55f5c011@903 bc4816be-ef27-423a-9c4d-fc420be121a2

--- src/reprise/commands/TimerCommand.as
+++ src/reprise/commands/TimerCommand.as
@@ -38,11 +38,14 @@

 		public override function cancel():void
 		{
+			m_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timer_complete);
 			m_timer.stop();
+			super.cancel();
 		}

 		protected function timer_complete(e:TimerEvent):void
 		{
+			m_timer.removeEventListener(TimerEvent.TIMER_COMPLETE, timer_complete);
 			notifyComplete(true);
 		}
 	}


Transferred from the Adobe Open Source Subversion Repository

Revision: 23246
Author:   cframpto@adobe.com
Date:     2011-12-20T17:40:08.069454Z

Log Message:
-----------
Rollback 23243.  If comment followed header it was stripped as well.

Modified Paths:
--------------
2361 paths were modified

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

--- frameworks/projects/automation_spark/src/spark/automation/events/SparkValueChangeAutomationEvent.as
+++ frameworks/projects/automation_spark/src/spark/automation/events/SparkValueChangeAutomationEvent.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 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 spark.automation.events
 {


The 29-bit integers use a different sign bit. Cope.

--- tamarin-central/thane/AMF3Encoder.as
+++ tamarin-central/thane/AMF3Encoder.as
@@ -36,6 +36,9 @@
             if (value is int) {
                 // signed integers must lie within -2^28 and 2^28-1
                 doublify = (value < -(1 << 28)) || (value >= (1 << 28));
+                if (value < 0) {
+                    value = (1 << 29) + value;
+                }
             } else if (value is uint) {
                 // unsigned between 0 and 2^29-1
                 doublify = (value >= (1 << 29));


Now that we actually have IExternalizable, let's detect it for the purposes of immediate but descriptive rejection.

--- tamarin-central/thane/AMF3Encoder.as
+++ tamarin-central/thane/AMF3Encoder.as
@@ -4,6 +4,7 @@
 import flash.utils.ByteArray;
 import flash.utils.Dictionary;
 import flash.utils.IDataOutput;
+import flash.utils.IExternalizable;

 /**
  * Partial AMF3 encoder, based on
@@ -59,13 +60,14 @@
             throw new Error("XML serialization not supported");

         } else {
+            if (value is IExternalizable) {
+                throw new Error("IExternalizable not supported");
+            }
             if (Domain.currentDomain.getClassName(value) == "flash.utils::ByteArray") {
                 _ctx.bytes.writeByte(AMF3.MARK_BYTE_ARRAY);
                 encodeByteArray(value as ByteArray);
                 return;
             }
-
-            // Tamarin/Thane doesn't even have an IExternalizable type to test for

             _ctx.bytes.writeByte(AMF3.MARK_OBJECT);
             encodeObject(value as Object);


fixed bug in bounds reporting

fixed bug in bounds reporting

--- WeaveUISpark/src/weave/visualization/plotters/ParallelCoordinatesPlotter.as
+++ WeaveUISpark/src/weave/visualization/plotters/ParallelCoordinatesPlotter.as
@@ -25,6 +25,7 @@
 	import flash.utils.Dictionary;

 	import weave.Weave;
+	import weave.WeaveProperties;
 	import weave.api.WeaveAPI;
 	import weave.api.data.ColumnMetadata;
 	import weave.api.data.IAttributeColumn;
@@ -274,100 +275,82 @@

 		override public function getDataBoundsFromRecordKey(recordKey:IQualifiedKey, output:Array):void
 		{
+			getBoundsCoords(recordKey, output, true);
+		}
+
+		protected function getBoundsCoords(recordKey:IQualifiedKey, output:Array, forGetDataBounds:Boolean):void
+		{
+			var enableGeomProbing:Boolean = Weave.properties.enableGeometryProbing.value;
+
 			initBoundsArray(output, _columns.length);
+
+			var _normalize:Boolean = normalize.value;
 			var outIndex:int = 0;
-			var results:Array = [];
-			var i:int;
-			var _normalize:Boolean = normalize.value;
-
-
-			for (i = 0; i < _columns.length; ++i)
-			{
-				var x:Number;
-				var y:Number;
-
-				x = getXAttributeCoordinates(recordKey, i);
-
-				if (_normalize)
-					y = WeaveAPI.StatisticsCache.getColumnStatistics(_columns[i]).getNorm(recordKey);
-				else
-					y = (_columns[i] as IAttributeColumn).getValueFromKey(recordKey, Number);
-
-				// Disable geometry probing when we're in parallel coordinates (normalize) mode
-				// because line segment intersection means nothing in parallel coordinates.
-				if (Weave.properties.enableGeometryProbing.value && !_normalize)
-				{
-					if (i < _columns.length - 1)
-					{
-						// include a bounds for the line segment
-						var bounds:IBounds2D = output[outIndex++] as IBounds2D;
-						bounds.includeCoords(x, y);
-						if (_normalize)
-							y = WeaveAPI.StatisticsCache.getColumnStatistics(_columns[i+1]).getNorm(recordKey);
-						else
-							y = (_columns[i+1] as IAttributeColumn).getValueFromKey(recordKey, Number);
-						bounds.includeCoords(x + 1, y);
-
-						results.push(bounds);
-					}
-				}
-				else
-				{
-					// include a bounds for the point on the axis
-					(output[outIndex++] as IBounds2D).setBounds(x, y, x, y);
-				}
-			}
-			while (output.length > outIndex)
+			for (var i:int = 0; i < _columns.length; ++i)
+			{
+				var yColumn:IAttributeColumn = _columns[i] as IAttributeColumn;
+				var x:Number = getXAttributeCoordinates(recordKey, i);
+				var y:Number = _normalize
+					? WeaveAPI.StatisticsCache.getColumnStatistics(yColumn).getNorm(recordKey)
+					: yColumn.getValueFromKey(recordKey, Number);
+				if (!forGetDataBounds || isFinite(x) && isFinite(y))
+					(output[outIndex] as IBounds2D).includeCoords(x, y);
+				// when geom probing is enabled, report a single data bounds
+				if (!forGetDataBounds || !enableGeomProbing)
+					outIndex++;
+			}
+			while (output.length > outIndex + 1)
 				ObjectPool.returnObject(output.pop());
 		}

+		private var tempBoundsArray:Array = [];
+
 		public function getGeometriesFromRecordKey(recordKey:IQualifiedKey, minImportance:Number = 0, bounds:IBounds2D = null):Array
 		{
+			getBoundsCoords(recordKey, tempBoundsArray, false);
+
 			var results:Array = [];
 			var _normalize:Boolean = normalize.value;

 			// push three geometries between each column
-			var x:Number, y:Number;
-			var prevX:Number, prevY:Number;
 			var geometry:ISimpleGeometry;
-			for (var i:int = 0; i < _columns.length; ++i)
-			{
-				x = getXAttributeCoordinates(recordKey, i);
-
-				if (_normalize)
-					y = WeaveAPI.StatisticsCache.getColumnStatistics(_columns[i]).getNorm(recordKey);
-				else
-					y = (_columns[i] as IAttributeColumn).getValueFromKey(recordKey, Number);
-
-				if (i > 0)
-				{
-					if (isFinite(y) && isFinite(prevY))
+
+			for (var i:int = 1; i < _columns.length; ++i)
+			{
+				var bounds:IBounds2D = tempBoundsArray[i] as IBounds2D;
+				var prevBounds:IBounds2D = tempBoundsArray[i - 1] as IBounds2D;
+
+				if (!bounds.isUndefined())
+				{
+					if (!prevBounds.isUndefined())
 					{
+						// both defined
 						geometry = new SimpleGeometry(GeometryType.LINE);
-						geometry.setVertices([new Point(prevX, prevY), new Point(x, y)]);
+						geometry.setVertices([
+							new Point(prevBounds.getXMin(), prevBounds.getYMin()),
+							new Point(bounds.getXMin(), bounds.getYMin())
+						]);
 						results.push(geometry);
 					}
 					else
 					{
-						// case where current coord is defined and previous coord is missing
-						if (isFinite(y))
-						{
-							geometry = new SimpleGeometry(GeometryType.POINT);
-							geometry.setVertices([new Point(x, y)]);
-							results.push(geometry);
-						}
-						// special case where i == 1 and y0 (prev) is defined and y1 (current) is missing
-						if (i == 1 && isFinite(prevY))
-						{
-							geometry = new SimpleGeometry(GeometryType.POINT);
-							geometry.setVertices([new Point(prevX, prevY)]);
-							results.push(geometry);
-						}
+						// current bounds defined, previous undefined
+						geometry = new SimpleGeometry(GeometryType.POINT);
+						geometry.setVertices([
+							new Point(bounds.getXMin(), bounds.getYMin())
+						]);
+						results.push(geometry);
 					}
 				}
-
-				prevX = x;
-				prevY = y;
+				else if (i == 1 && !prevBounds.isUndefined())
+				{
+					// special case where i == 1 and prev bounds is defined, but current bounds is undefined
+					geometry = new SimpleGeometry(GeometryType.POINT);
+					geometry.setVertices([
+						new Point(prevBounds.getXMin(), prevBounds.getYMin())
+					]);
+					results.push(geometry);
+				}
 			}

 			return results;


also watch for layoutNeeded

also watch for layoutNeeded

--- frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/layouts/NonVirtualHorizontalLayout.as
+++ frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/layouts/NonVirtualHorizontalLayout.as
@@ -67,6 +67,7 @@
 		public function set strand(value:IStrand):void
 		{
 			_strand = value;
+            IEventDispatcher(value).addEventListener("layoutNeeded", changeHandler);
 			IEventDispatcher(value).addEventListener("widthChanged", changeHandler);
 			IEventDispatcher(value).addEventListener("childrenAdded", changeHandler);
 			IEventDispatcher(value).addEventListener("itemsCreated", changeHandler);


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

--- frameworks/projects/advancedgrids/src/mx/olap/OLAPResultAxis.as
+++ frameworks/projects/advancedgrids/src/mx/olap/OLAPResultAxis.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2009 Adobe Systems Incorporated
-//  All Rights Reserved.
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
 //
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 23246
Author:   cframpto@adobe.com
Date:     2011-12-20T17:40:08.069454Z

Log Message:
-----------
Rollback 23243.  If comment followed header it was stripped as well.

Modified Paths:
--------------
2361 paths were modified

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

--- frameworks/projects/charts/src/mx/charts/chartClasses/Series.as
+++ frameworks/projects/charts/src/mx/charts/chartClasses/Series.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 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.charts.chartClasses
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 23243
Author:   cframpto@adobe.com
Date:     2011-12-20T00:59:57.384047Z

Log Message:
-----------
In frameworks, remove Adobe headers from all files except xml/mxml file types.  There are also a few .txt files that are license files that I didn't touch yet.

Modified Paths:
--------------
2361 paths were modified

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

--- frameworks/projects/framework/src/mx/core/IFlexDisplayObject.as
+++ frameworks/projects/framework/src/mx/core/IFlexDisplayObject.as
@@ -1,13 +1,3 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2005-2007 Adobe Systems Incorporated
-//  All Rights Reserved.
-//
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
-//
-////////////////////////////////////////////////////////////////////////////////

 package mx.core
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 20736
Author:   smgilson@adobe.com
Date:     2011-03-09T21:18:00.204102Z

Log Message:
-----------
Merge 20719 - ASDoc updates

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextFormat.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/EdgeMetrics.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGridColumn.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/DeferredInstanceFromFunction.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/advancedgrids/src/mx/controls/advancedDataGridClasses/AdvancedDataGridBase.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/WindowedApplication.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/mx/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IFlexModuleFactory.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/FlexHTMLLoader.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/mx/src/mx/controls/dataGridClasses/DataGridBase.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/mx/src/mx/core/Container.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/spark/src/mx/core/FTETextField.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ITextInput.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ITextFieldInterface.as</path>
<path kind="dir" action="M">/private/flex/sdk/trunk</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/windowClasses/TitleBar.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/DPIClassification.as</path>

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

--- frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as
+++ frameworks/projects/framework/src/mx/core/RuntimeDPIProvider.as
@@ -47,11 +47,21 @@
  *
  *  @see mx.core.DPIClassification
  *  @see spark.components.Application#applicationDPI
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 2.5
+ *  @productversion Flex 4.5
  */
 public class RuntimeDPIProvider
 {
     /**
      *  Constructor.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function RuntimeDPIProvider()
     {
@@ -73,6 +83,11 @@
      *
      *  @see flash.system.Capabilities
      *  @see mx.core.DPIClassification
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
      */
     public function get runtimeDPI():Number
     {


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

--- frameworks/projects/framework/src/mx/effects/AnimateProperty.as
+++ frameworks/projects/framework/src/mx/effects/AnimateProperty.as
@@ -1,11 +1,19 @@
 ////////////////////////////////////////////////////////////////////////////////
 //
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2005-2007 Adobe Systems Incorporated
-//  All Rights Reserved.
-//
-//  NOTICE: Adobe permits you to use, modify, and distribute this file
-//  in accordance with the terms of the license agreement accompanying it.
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
 //
 ////////////////////////////////////////////////////////////////////////////////


Transferred from the Adobe Open Source Subversion Repository

Revision: 7163
Author:   aharui@adobe.com
Date:     2009-05-21T02:19:55.813792Z

Log Message:
-----------
Initial checkin of frame 1 cleanup.  In an RSL linkage, more classes will now come from the RSL because they are no longer needed in frame 1, and the size of the application SWF will be smaller.

QE Notes: None
Doc Notes: Maybe.  All new classes should be undocumented, but it might be worth checking that and any changes to interfaces
Bugs:
Reviewer: darrell
tests: checkintests mustella/MarshallPlan

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileListItemRenderer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/ActiveWindowManager.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/LayoutManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/RSLEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Menu.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/MarshalPopUpData.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IEmbeddedFontRegistry.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/PopUpManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ColorPicker.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/managers/systemClasses/EventProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UITextFormat.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/tools/dependencychecker/flex/tools/dependencychecker/FrameworkSwcDependencyRules.java</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/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/core/EmbeddedFontRegistry.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ToolTipManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichText.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/EmbeddedFont.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/managers/SystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ResourceModuleRSLItem.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/FrameworkClasses.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ISWFBridgeProvider.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/FocusManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManager.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IMarshalSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/EventListenerRequest.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/ToolTipManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/frameworkSwcExceptionsList.txt</path>
<path kind="file" action="M">/flex/sdk/trunk/mustella/MustellaResultsParser.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Alert.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/ChildManager.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/MarshallPlan.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/managers/SystemManagerGlobals.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/SWFBridgeGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/alertClasses/AlertForm.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/spark/components/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/treeClasses/TreeItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ISystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework_textLayout/src/mx/core/UITLFTextField.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/DragManagerMarshalMixin.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/SWFLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/MenuBar.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/Request.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/RichEditableText.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/controls/PopUpButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/FlexEvent.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IActiveWindowManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/FocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Application.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/primitives/SimpleText.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/PopUpManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManagerProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/messaging/config/LoaderConfig.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IFocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/DownloadProgressBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ScrollControlBase.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ISystemManagerChildManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridItemRenderer.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/marshalClasses/CursorManagerMarshalMixin.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/PopUpData.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ISWFBridgeGroup.as</path>

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

--- frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as
+++ frameworks/projects/framework/src/mx/styles/StyleManagerImpl.as
@@ -22,7 +22,7 @@
 import mx.core.mx_internal;
 import mx.events.ModuleEvent;
 import mx.events.StyleEvent;
-import mx.managers.SystemManager;
+import mx.managers.ISystemManager;
 import mx.managers.SystemManagerGlobals;
 import mx.modules.IModuleInfo;
 import mx.modules.ModuleManager
@@ -761,9 +761,10 @@
         for (var i:int = 0; i < n; i++)
         {
         	// Type as Object to avoid dependency on SystemManager or WindowedSystemManager
-            var sm:Object = sms[i];
-            sm.regenerateStyleCache(true);
-            sm.notifyStyleChangeInChildren(null, true);
+            var sm:ISystemManager = sms[i];
+			var cm:Object = sm.getImplementation("mx.managers.ISystemManagerChildManager");
+            Object(cm).regenerateStyleCache(true);
+            Object(cm).notifyStyleChangeInChildren(null, true);
         }
     }

@@ -1247,6 +1248,13 @@
         if (update)
             styleDeclarationsChanged();
     }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Methods: Style Propagation
+    //
+    //--------------------------------------------------------------------------
+
 }

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

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

--- frameworks/projects/automation_dmv/src/mx/automation/delegates/charts/CartesianChartAutomationImpl.as
+++ frameworks/projects/automation_dmv/src/mx/automation/delegates/charts/CartesianChartAutomationImpl.as
@@ -0,0 +1,240 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 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.automation.delegates.charts
+{
+	import flash.display.DisplayObject;
+
+	import mx.automation.Automation;
+	import mx.automation.AutomationIDPart;
+	import mx.automation.tabularData.CartesianChartTabularData;
+	import mx.automation.IAutomationObject;
+	import mx.automation.IAutomationObjectHelper;
+	import mx.automation.IAutomationTabularData;
+	import mx.automation.delegates.charts.ChartBaseAutomationImpl;
+	import mx.charts.chartClasses.CartesianChart;
+
+	[Mixin]
+	/**
+	 *
+	 *  Defines the methods and properties required to perform instrumentation for the
+	 *  CartesianChart base class.
+	 *
+	 *  @see mx.charts.chartClasses.CartesianChart
+	 *
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 3
+	 */
+	public class CartesianChartAutomationImpl extends ChartBaseAutomationImpl
+	{
+		include "../../../core/Version.as";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Class methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Registers the delegate class for a component class with automation manager.
+		 *
+		 *  @param root The SystemManger of the application.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public static function init(root:DisplayObject):void
+		{
+			Automation.registerDelegateClass(CartesianChart, CartesianChartAutomationImpl);
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Constructor
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  Constructor.
+		 *  @param obj CartesianChart object to be automated.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 3
+		 */
+		public function CartesianChartAutomationImpl(obj:CartesianChart)
+		{
+			super(obj);
+
+			cChart = obj;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Variables
+		//
+		//--------------------------------------------------------------------------
+
+		//----------------------------------
+		//  cartesianChart
+		//----------------------------------
+
+		/**
+		 *  @private
+		 *  storage for the owner component
+		 */
+		private var cChart:CartesianChart;
+
+
+		/**
+		 *  @private
+		 */
+		override public function getAutomationChildren():Array
+		{
+			var childList:Array = new Array();
+
+			var tempArray1:Array = cChart.series;
+			var n:int = 0;
+			var i:int = 0;
+			if (tempArray1)
+			{
+				n= tempArray1.length;
+				for(i = 0; i < n ; i++)
+				{
+					childList.push(tempArray1[i]);
+				}
+			}
+
+
+
+			var tempArray:Array = cChart.secondSeries;
+			if (tempArray)
+			{
+				n = tempArray.length;
+				for(i = 0; i < n ; i++)
+				{
+					childList.push(tempArray[i]);
+				}
+			}
+
+			if (cChart.verticalAxisRenderer )
+				childList.push(cChart.verticalAxisRenderer);
+
+			if (cChart.secondVerticalAxisRenderer)
+				childList.push(cChart.secondVerticalAxisRenderer);
+
+			if (cChart.horizontalAxisRenderer)
+				childList.push(cChart.horizontalAxisRenderer);
+
+
+			if (cChart.secondHorizontalAxisRenderer)
+				childList.push(cChart.secondVerticalAxisRenderer);
+
+
+			return childList;
+		}
+
+		/**
+		 *  @private
+		 */
+		override public function getAutomationChildAt(index:int):IAutomationObject
+		{
+			var result:Object;
+			var count:int = 0;
+			if (cChart.series)
+			{
+				count = cChart.series.length ;
+				if (index < count)
+					result = cChart.series[index];
+			}
+
+			if (!result && cChart.secondSeries)
+			{
+				count += cChart.secondSeries.length ;
+				if (index < count)
+					result = cChart.secondSeries[index];
+			}
+
+			if (!result && cChart.verticalAxisRenderer)
+			{
+				++count;
+				if (index < count)
+					result = cChart.verticalAxisRenderer;
+			}
+
+			if (!result && cChart.secondVerticalAxisRenderer)
+			{
+				++count;
+				if (index < count)
+					result = cChart.secondVerticalAxisRenderer;
+			}
+
+			if (!result && cChart.horizontalAxisRenderer)
+			{
+				++count;
+				if (index < count)
+					result = cChart.horizontalAxisRenderer;
+			}
+
+			if (!result && cChart.secondHorizontalAxisRenderer)
+			{
+				++count;
+				if (index < count)
+					result = cChart.secondHorizontalAxisRenderer;
+			}
+
+			return result as IAutomationObject;
+		}
+
+		/**
+		 *  @private
+		 */
+		override public function get numAutomationChildren():int
+		{
+			var count:int = 0;
+			if (cChart.series)
+				count = cChart.series.length ;
+
+			if (cChart.secondSeries)
+				count += cChart.secondSeries.length ;
+
+			if (cChart.verticalAxisRenderer)
+				++count;
+
+			if (cChart.secondVerticalAxisRenderer)
+				++count;
+
+			if (cChart.horizontalAxisRenderer)
+				++count;
+
+			if (cChart.secondHorizontalAxisRenderer)
+				++count;
+
+			return count;
+		}
+
+		/**
+		 *  @private
+		 */
+		override public function get automationTabularData():Object
+		{
+			return new CartesianChartTabularData(uiAutomationObject);
+		}
+
+	}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 31
Author:   open-source-svn-admin@adobe.com
Date:     2007-12-18T22:53:44.445926Z

Log Message:
-----------
Perforce Change 191386 by rfrishbe@ryan on 2007/12/18 17:52:29 AIR Dependency Issues. Mostly just changing types from concrete classes to interfaces. Also removing some unused private methods in Window/WindowedApplication. Bugs: SDK-14028 QA: Yes Doc: No Review: Alex

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/windowClasses/TitleBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/windowClasses/StatusBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/FileSystemDataGrid.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/WindowedApplication.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/NativeDragManagerImpl.as</path>

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

--- frameworks/projects/airframework/src/mx/core/windowClasses/StatusBar.as
+++ frameworks/projects/airframework/src/mx/core/windowClasses/StatusBar.as
@@ -16,7 +16,7 @@
 import flash.events.Event;
 import mx.core.WindowedApplication;
 import mx.core.IFlexDisplayObject;
-import mx.core.IWindow;
+import mx.core.IUITextField;
 import mx.core.mx_internal;
 import mx.core.UIComponent;
 import mx.core.UITextField;
@@ -110,7 +110,7 @@
 	/**
      *  A reference to the UITextField that displays the status bar's text.
      */
-    public var statusTextField:UITextField;
+    public var statusTextField:IUITextField;

     //--------------------------------------------------------------------------
     //
@@ -146,11 +146,11 @@

 	    if (!statusTextField)
 	    {
-	        statusTextField = UITextField(createInFontContext(UITextField));
+	        statusTextField = IUITextField(createInFontContext(UITextField));
 	        statusTextField.text = _status;
 	        statusTextField.styleName = getStyle("statusTextStyleName");
 	        statusTextField.enabled = true;
-	        addChild(statusTextField);
+	        addChild(DisplayObject(statusTextField));
     	}
 	}


Properly wrap dumped byte arrays.

Properly wrap dumped byte arrays.

--- tests/flashtest.as
+++ tests/flashtest.as
@@ -3,11 +3,12 @@
 	import flash.text.TextField;
 	import flash.utils.ByteArray;

+	[SWF(width="400", height="400")]
 	public class flashtest extends Sprite {
 		private var tf:TextField;
 		public function flashtest() {
 			tf = new TextField();
-			tf.width = tf.height = 300;
+			tf.width = tf.height = 400;
 			tf.wordWrap = true;
 			addChild(tf);

@@ -42,10 +43,18 @@
 		private function dumpByteArray(b:ByteArray):void {
 			b.position = 0;
 			tf.appendText(b.bytesAvailable + "\n");
+			var cnt:int = 0;
 			while(b.bytesAvailable) {
 				var c:String = b.readUnsignedByte().toString(16);
 				if(c.length < 2) c = "0" + c;
-				tf.appendText("0x" + c + ", ");
+				tf.appendText("0x" + c);
+				if (b.bytesAvailable == 0) break;
+				if (++cnt == 12) {
+					cnt = 0;
+					tf.appendText(",\n");
+				} else {
+					tf.appendText(", ");
+				}
 			}
 			tf.appendText("\n");
 		}


Fixing frame calculation for nested clips. Fixes #9.

--- src/swf2png.as
+++ src/swf2png.as
@@ -164,7 +164,7 @@
 			{
 				var mc:MovieClip = inMc.getChildAt(i) as MovieClip;
 				if(mc) {
-					mc.gotoAndStop(frameNo % inMc.totalFrames);
+					mc.gotoAndStop(frameNo % (inMc.totalFrames + 1));
 					if(mc.numChildren > 0) {
 						goToFrame(mc, frameNo);
 					}


Remove support for bounding box detection.

--- src/swf2png.as
+++ src/swf2png.as
@@ -36,7 +36,7 @@
 		private var separator:String = "_";
 		private var outfield:TextField;
 		private var outputDirPath:String;
-		private var offsetMatrix:Matrix;
+		private var offsetMatrix:Matrix = new Matrix();
 		private var bBox:Rectangle;
 		private var scaleFactor:Number;
 		private var pane:ScrollPane;
@@ -45,8 +45,10 @@

 		public function swf2png() {
 			NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);
+
 			stage.align = 'TL';
 			stage.scaleMode = 'noScale';
+			stage.frameRate = 12;
 			outfield = new TextField();
 			outfield.autoSize = TextFieldAutoSize.LEFT;
 			pane = new ScrollPane(stage);
@@ -86,8 +88,6 @@
 			totalFrames = loadedSwf.totalFrames;
 			log("Frame count: " + totalFrames);

-			calculateBBox();
-
 			stopClip(loadedSwf);
 			goToFrame(loadedSwf, 0);
 			timer = new Timer(1);
@@ -104,49 +104,6 @@
 				out = '0' + out;
 			}
 			return out;
-		}
-
-		private function calculateBBox():void {
-			stopClip(loadedSwf);
-			goToFrame(loadedSwf, 0);
-
-			var boundsArray:Object = {
-				"x" : new Array(),
-				"y" : new Array(),
-				"w" : new Array(),
-				"h" : new Array()
-			}
-			var r:Rectangle;
-			for(var currentFrame:int = 0; currentFrame < totalFrames; currentFrame++) {
-				goToFrame(loadedSwf, currentFrame);
-				r = loader.content.getRect(stage);
-				boundsArray.x.push(r.x);
-				boundsArray.y.push(r.y);
-				boundsArray.w.push(r.width);
-				boundsArray.h.push(r.height);
-			}
-
-			boundsArray.x.sort(Array.NUMERIC);
-			boundsArray.y.sort(Array.NUMERIC);
-			boundsArray.w.sort(Array.NUMERIC | Array.DESCENDING);
-			boundsArray.h.sort(Array.NUMERIC | Array.DESCENDING);
-
-			bBox = new Rectangle(
-				Math.floor(boundsArray.x[0]),
-				Math.floor(boundsArray.y[0]),
-				Math.ceil(boundsArray.w[0]),
-				Math.ceil(boundsArray.h[0])
-			);
-
-			log("Bounding box: " + bBox)
-
-			outputWidth = bBox.width * scaleFactor;
-			outputHeight = bBox.height * scaleFactor;
-			offsetMatrix = new Matrix();
-			offsetMatrix.translate(bBox.x * -1, bBox.y * -1);
-			offsetMatrix.scale(scaleFactor, scaleFactor);
-
-			return;
 		}

 		//Called for every frame
@@ -167,6 +124,7 @@
 		//Saves the current frame of the loader object to a png
 		private function saveFrame():void {
 			var bitmapData:BitmapData = new BitmapData(outputWidth, outputHeight, true, 0x0);
+			offsetMatrix.scale(scaleFactor, scaleFactor);
 			bitmapData.draw(loader.content, offsetMatrix);
 			var bytearr:ByteArray = PNGEncoder.encode(bitmapData);
 			var increment:String = '';
@@ -282,6 +240,8 @@
 				log("scale factor set to " + parseFloat(ev.arguments[2]));
 				return parseFloat(ev.arguments[2]);
 			}
+			outputWidth *= scaleFactor;
+			outputHeight *= scaleFactor;
 			return 1;
 		}


Transferred from the Adobe Open Source Subversion Repository

Revision: 12850
Author:   jimurphy@adobe.com
Date:     2009-12-11T14:57:14.623098Z

Log Message:
-----------
add 6 new DMV projects to the SDK:
automation
automation_air
automation_dmv
automation_flashflexkit
automation_spark
datavisualization

These projects are setup to build in an ant main call.  There are currently several warnings in the datavisualization project that will be cleaned up.  No checkintests exist for these projects as of yet.

I also modified the exisitng projects build files for easier management of the localization targets, bundle and fat-swc. If the projects that I updated:airframework,airspark,framework,playerglobal,rpc,and spark.  All the new projects have been implemented this same way.

QE notes: DMV folks should run through their tests
Doc notes: probably
Bugs: nope
Reviewer:
Tests run: ran the following targets: compile,checkintests,other.locales and doc
Is noteworthy for integration: no

Modified Paths:
--------------
1404 paths were modified

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

--- frameworks/projects/automation_spark/src/spark/automation/delegates/SparkRichEditableTextAutomationHelper.as
+++ frameworks/projects/automation_spark/src/spark/automation/delegates/SparkRichEditableTextAutomationHelper.as
@@ -0,0 +1,939 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2009 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 spark.automation.delegates
+{
+
+	import flash.display.DisplayObject;
+	import flash.events.Event;
+	import flash.events.FocusEvent;
+	import flash.events.IEventDispatcher;
+	import flash.events.KeyboardEvent;
+	import flash.events.MouseEvent;
+	import flash.events.TextEvent;
+	import flash.ui.Keyboard;
+
+	import flashx.textLayout.operations.CutOperation;
+	import flashx.textLayout.operations.PasteOperation;
+
+	import mx.automation.Automation;
+	import mx.automation.IAutomationManager;
+	import mx.automation.IAutomationObject;
+	import mx.automation.IAutomationObjectHelper;
+	import mx.automation.events.AutomationEvent;
+	import mx.automation.events.TextSelectionEvent;
+	import mx.core.EventPriority;
+	import mx.core.mx_internal;
+	import mx.events.SandboxMouseEvent;
+	import mx.managers.IFocusManager;
+	import mx.managers.IFocusManagerComponent;
+	import mx.managers.IFocusManagerContainer;
+	import mx.managers.ISystemManager;
+	import mx.resources.IResourceManager;
+	import mx.resources.ResourceManager;
+
+	import spark.components.RichEditableText;
+	import spark.events.TextOperationEvent;
+
+	use namespace mx_internal;
+
+	[ResourceBundle("automation")]
+
+	/**
+	 * Utility class that facilitates replay of text input and selection.
+	 *
+	 *  @langversion 3.0
+	 *  @playerversion Flash 9
+	 *  @playerversion AIR 1.1
+	 *  @productversion Flex 4
+	 */
+	public class SparkRichEditableTextAutomationHelper
+	{
+		include "../../core/Version.as";
+
+		//--------------------------------------------------------------------------
+		//
+		//  Constructors
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 * Constructor.
+		 *
+		 * @param owner The UIComponent that is using the TextField. For example, if a
+		 * TextArea is using the TextField, then the TextArea is the owner.
+		 *
+		 * @param replayer The IAutomationObject of the component.
+		 *
+		 * @param richEditableText The TextField object inside the component.
+		 *
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public function SparkRichEditableTextAutomationHelper(owner:IEventDispatcher,
+															  replayer:IAutomationObject,
+															  richEditableText:spark.components.RichEditableText)
+		{
+			super();
+
+			// for spark, we will be called by the RicheEditableText only.
+			// we could have moved this code to the delegate itself
+			// to have the similar work flow for the halo, we kept the helper class
+
+			// storing the passed variable.
+			this.owner = owner;
+			this.replayer = replayer;
+			this.richEditableText = richEditableText;
+
+			// adding the focus in handler so that we can add the appropriate
+			// listeneres.
+			this.owner.addEventListener(FocusEvent.FOCUS_IN,
+				focusInHandler,
+				false,
+				EventPriority.DEFAULT-100, true);
+			this.richEditableText.addEventListener(MouseEvent.MOUSE_DOWN,
+				mouseDownHandler, false, EventPriority.DEFAULT, true);
+
+			// capture the slection
+			captureSelection();
+			oldSelection = currentSelection;
+			hasSelectionChanged = false;
+
+			// capture the focus details
+			if(recording)
+				checkInitialFocus();
+			else
+				Automation.automationManager.addEventListener(AutomationEvent.BEGIN_RECORD,
+					beginRecordingHandler, false, 0 , true);
+
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Variables
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		private var stringBuffer:String;
+
+		/**
+		 *  @private
+		 */
+		private var owner:IEventDispatcher;
+
+		/**
+		 *  @private
+		 */
+		private var replayer:IAutomationObject;
+
+		/**
+		 *  @private
+		 */
+		private var richEditableText:spark.components.RichEditableText;
+
+		/**
+		 *  @private
+		 */
+		private var currentSelection:Array = null;
+
+		/**
+		 * @private
+		 */
+		private var oldSelection:Array = null;
+
+		/**
+		 *  @private
+		 */
+		private var hasSelectionChanged:Boolean = false;
+
+		/**
+		 *  @private
+		 */
+		private var isWatchingFocus:Boolean = false;
+
+		/**
+		 *  @private
+		 */
+		private var isInInsertMode:Boolean = false;
+
+		/**
+		 *  @private
+		 *  Used for accessing localized Error messages.
+		 */
+		private var resourceManager:IResourceManager =
+			ResourceManager.getInstance();
+
+		//--------------------------------------------------------------------------
+		//
+		//  Properties
+		//
+		//--------------------------------------------------------------------------
+
+		//----------------------------------
+		//  recording
+		//----------------------------------
+
+		/**
+		 *  @private
+		 */
+		private function get recording():Boolean
+		{
+			return Automation.automationManager &&
+				(Automation.automationManager as IAutomationManager).recording;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Methods
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		private function flushCharacterBuffer():void
+		{
+			// this methods is called whenever the focus on the text is changed
+			// so if the text value is changed, the change will be recorded here.
+			// unlike other normal classes, we are not recording the changes as
+			// and when the change happens.
+			// reason is that we want one record for the multiple inputs, instead
+			// of recording for each input.
+			if (stringBuffer != null)
+			{
+				flushSelection();
+				var e:TextEvent = new TextEvent(TextEvent.TEXT_INPUT);
+				if(stringBuffer)
+					e.text = stringBuffer.toString();
+				else
+					e.text="";
+				stringBuffer = null;
+				recordAutomatableEvent(e);
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function captureSelection():void
+		{
+			// capture the selectio details and when the focus changes
+			// if the selection details are changed, it will be recorded.
+			currentSelection = [ richEditableText.selectionAnchorPosition, richEditableText.selectionActivePosition ];
+			hasSelectionChanged =  oldSelection == null || oldSelection[0] != currentSelection[0] || oldSelection[1] != currentSelection[1];
+
+		}
+
+		/**
+		 *  @private
+		 */
+		private function flushSelection():void
+		{
+			// when the focus
+			if (!hasSelectionChanged)
+				return;
+
+			// recording the details of the selection change.
+			if (currentSelection && currentSelection[0] >= 0 && currentSelection[1] >= 0)
+			{
+				var e:TextSelectionEvent = new TextSelectionEvent();
+				e.beginIndex = currentSelection[0];
+				e.endIndex = currentSelection[1];
+				oldSelection = currentSelection;
+				currentSelection = null;
+				recordAutomatableEvent(e);
+
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function get hasSelection():Boolean
+		{
+			// checking whether a content is selected.
+			return (richEditableText.selectionActivePosition != richEditableText.selectionAnchorPosition);
+		}
+
+		/**
+		 *  @private
+		 */
+		protected function checkInitialFocus():void
+		{
+			//check whether we have already focus so that we can prepare for user input
+			var o:DisplayObject = DisplayObject(richEditableText) ;
+
+			while (o)
+			{
+				if (o is IFocusManagerContainer)
+					break ;
+
+				o = o.parent;
+			}
+
+			if (o)
+			{
+				var focusManager:IFocusManager = IFocusManagerContainer(o).focusManager;
+				var focusObj:DisplayObject = focusManager ?
+					DisplayObject(focusManager.getFocus()) :
+					null;
+				if (focusObj == owner)
+					focusInHandler(null);
+			}
+		}
+
+		/**
+		 *  Records the user interaction with the text control.
+		 *
+		 *  @param interaction The event to record.
+		 *
+		 *  @param cacheable Contains true if this is a cacheable event, and false if not.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public function recordAutomatableEvent(interaction:Event,
+											   cacheable:Boolean = false):void
+		{
+			var am:IAutomationManager = Automation.automationManager;
+			am.recordAutomatableEvent(replayer, interaction, cacheable);
+		}
+
+		/**
+		 *  Replays TextEvens, Selection Event, and type events. TypeEvents  and Text events are replayed
+		 *  depending on the character typed.  Both  dispatches the origin keystrokes.
+		 *  This is necessary to mimic the original behavior, in case any components are
+		 *  listening to keystroke events (for example, DataGrid listens to itemRenderer events,
+		 *  or if a custom component is trying to do key masking).  In Halo, the text events were changing
+		 *  the contents using the text related methods as the flash player was ignoring the key evens.
+		 *  In Gumbo this is not the case, so for the text and type events, we need only to send the key strokes.
+		 *  dispatch the original keystrokes, but the Flash Player richEditableText ignores
+		 *  the events we are sending it.
+		 *
+		 * @param event Event to replay.
+		 *
+		 * @return If true, replay the event.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 9
+		 *  @playerversion AIR 1.1
+		 *  @productversion Flex 4
+		 */
+		public function replayAutomatableEvent(event:Event):Boolean
+		{
+			var changeEvent:TextOperationEvent = new TextOperationEvent(TextOperationEvent.CHANGE);
+
+			var sm:ISystemManager = Automation.getMainApplication().systemManager;
+			var help:IAutomationObjectHelper = Automation.automationObjectHelper;
+
+			var ke:KeyboardEvent;
+
+			if (event is MouseEvent &&
+				event.type == MouseEvent.CLICK)
+				return help.replayClick(owner, event as MouseEvent);
+			else if (event is TextSelectionEvent)
+			{
+
+				// we should reply click, as click is not recorded during selection.
+				// so if anybody listening to the click event, they should get it.
+				help.replayClick(owner);
+
+				if(owner as  IFocusManagerComponent)
+					IFocusManagerComponent(owner).setFocus();
+				else
+					richEditableText.setFocus();
+
+				// selection replay is done by calling the underlying select method.
+				// recorded value is anchorPosition and active position in order.
+				// Since we have used the existing TextSelection
+				var selectionEvent:TextSelectionEvent =
+					TextSelectionEvent(event);
+				richEditableText.selectRange(selectionEvent.beginIndex,
+					selectionEvent.endIndex);
+
+
+				return true;
+			}
+			else if (event is TextEvent)
+			{
+
+				// need to set focus in order for the uirichEditableText to behave correctly
+				if(owner as  IFocusManagerComponent)
+					IFocusManagerComponent(owner).setFocus();
+				else
+					richEditableText.setFocus();
+
+				var textEvent:TextEvent = TextEvent(event);
+				var text:String = textEvent.text;
+				var n:int = textEvent.text.length;
+				if(n == 0)
+				{
+					// if there is any selection we want
+					// to clear it, as this recording would have
+					// been resulted from cut operation.
+					richEditableText.insertText("");
+				}
+
+				for (var i:uint = 0; i < n; i++)
+				{
+					ke = new KeyboardEvent(KeyboardEvent.KEY_DOWN);
+					ke.charCode = text.charCodeAt(i);
+					ke.keyCode = text.charCodeAt(i);
+					richEditableText.dispatchEvent(ke);
+					var pos:int ;
+
+					// we dont need any special handling on the string.
+					// replaying the key board events takes care of the needed.
+					// however when there is a line feed or carriage return , we need to handle it specially
+					if((text.charAt(i) == "\n") || (text.charAt(i) == "\r"))
+						richEditableText.insertText(text.charAt(i));
+
+					var te:TextEvent = new TextEvent(TextEvent.TEXT_INPUT);
+					te.text = String(text.charAt(i));
+					// ref. http://bugs.adobe.com/jira/browse/FLEXENT-838 - charcode vs charAt
+					richEditableText.dispatchEvent(te);
+					// we dont need to select as the previous selection would have taken care of the
+					// requried selection
+
+					ke = new KeyboardEvent(KeyboardEvent.KEY_UP);
+					ke.charCode = text.charCodeAt(i);
+					ke.keyCode = text.charCodeAt(i);
+					richEditableText.dispatchEvent(ke);
+
+					// dispatch a change event to indicate that the value is changed.
+					richEditableText.dispatchEvent(changeEvent);
+
+				}
+
+				return true;
+			}
+			else if (event is KeyboardEvent)
+			{
+				var kbEvent:KeyboardEvent = KeyboardEvent(event);
+				var keyCode:int = kbEvent.keyCode;
+				switch (keyCode)
+				{
+					case Keyboard.HOME:
+					{
+						break;
+					}
+					case Keyboard.END:
+					{
+						break;
+					}
+
+					case Keyboard.ENTER:
+					{
+						// replaying the keyboard events will do the needful
+						// we dont need to handle this.
+						// replace the selected text with newline
+						//if (richEditableText.multiline)
+						//	richEditableText.insertText("\n");
+
+						break;
+					}
+
+					case Keyboard.BACKSPACE:
+					{
+						// we dont need a manual handling here.
+						// replaying the key up and down will do the needfule
+						break;
+					}
+
+					case Keyboard.DELETE:
+					{
+						// we dont need a manual handling here.
+						// replaying the key up and down will do the needfule
+						break;
+					}
+
+					case Keyboard.INSERT:
+					{
+						isInInsertMode = !isInInsertMode;
+						break;
+					}
+					case Keyboard.ESCAPE:
+					{
+						break;
+					}
+
+					default:
+					{
+						var message:String = resourceManager.getString(
+							"automation", "notReplayable", [keyCode]);
+						throw new Error(message);
+					}
+				}
+
+				ke = new KeyboardEvent(KeyboardEvent.KEY_DOWN);
+				ke.charCode = keyCode;
+				ke.keyCode = keyCode;
+				ke.ctrlKey = kbEvent.ctrlKey;
+				ke.shiftKey = kbEvent.shiftKey;
+				ke.altKey = kbEvent.altKey;
+
+				richEditableText.dispatchEvent(ke);
+
+				ke = new KeyboardEvent(KeyboardEvent.KEY_UP);
+				ke.charCode = keyCode;
+				ke.keyCode = keyCode;
+				ke.ctrlKey = kbEvent.ctrlKey;
+				ke.shiftKey = kbEvent.shiftKey;
+				ke.altKey = kbEvent.altKey;
+
+				richEditableText.dispatchEvent(ke);
+
+				richEditableText.dispatchEvent(changeEvent);
+				return true;
+			}
+			return false;
+		}
+
+		//--------------------------------------------------------------------------
+		//
+		//  Event handlers
+		//
+		//--------------------------------------------------------------------------
+
+		/**
+		 *  @private
+		 */
+		private function focusInHandler(event:FocusEvent):void
+		{
+			if (!recording)
+				return;
+
+			if (!isWatchingFocus)
+			{
+				isWatchingFocus = true;
+
+				//Add the focus change listeners as low priority
+				//so that any code that may prevent default (prevent
+				//the focus change) gets a chance to execute before
+				//getting to us.  We only want to process the event
+				//if the focus really is going to change.
+				richEditableText.addEventListener(FocusEvent.KEY_FOCUS_CHANGE,
+					focusOutHandler,
+					false,
+					EventPriority.DEFAULT-1000, true);
+				//Use FOCUS_OUT instead of MOUSE_FOCUS_CHANGE never
+				//really gets fired because the player doesn't initiate
+				//mouse focus changes (except when a text field gets
+				//focus).  Our mouseDownOutside handler should take
+				//care of flushing events before a new item gets focus
+				//and we may not even need this event handler
+				richEditableText.addEventListener(FocusEvent.FOCUS_OUT,
+					focusOutHandler,
+					false, EventPriority.DEFAULT, true);
+
+				//In case someone clicks elsewhere but we don't loose the focus
+				//we need to flush, i.e. they click a button that generates a click
+				//we need to beat them and record our events first
+				//var sm:ISystemManager = Application.application.systemManager;
+				var sm:ISystemManager =  Automation.getMainApplication().systemManager;
+				sm.getSandboxRoot().addEventListener(MouseEvent.MOUSE_DOWN,
+					mouseDownOutsideHandler,
+					true, EventPriority.DEFAULT, true);
+				sm.getSandboxRoot().addEventListener(SandboxMouseEvent.MOUSE_DOWN_SOMEWHERE,
+					mouseDownOutsideHandler,
+					true, EventPriority.DEFAULT, true);
+
+
+
+				sm.addEventListener(Event.DEACTIVATE,
+					stageEventHandler,
+					false,
+					EventPriority.DEFAULT+1, true);
+				sm.getSandboxRoot().addEventListener(Event.MOUSE_LEAVE,
+					stageEventHandler,
+					false,
+					EventPriority.DEFAULT+1, true);
+
+				sm.getSandboxRoot().addEventListener(MouseEvent.MOUSE_DOWN,
+					stageEventHandler,
+					true,
+					EventPriority.DEFAULT+1, true);
+
+				sm.getSandboxRoot().addEventListener(SandboxMouseEvent.MOUSE_DOWN_SOMEWHERE,
+					stageEventHandler,
+					true,
+					EventPriority.DEFAULT+1, true);
+
+				richEditableText.addEventListener(TextEvent.TEXT_INPUT,
+					textInputHandler,
+					false,
+					EventPriority.DEFAULT+100, true);
+
+				richEditableText.addEventListener(TextOperationEvent.CHANGING,
+					changingTimeDataCapturer,
+					false,
+					EventPriority.DEFAULT+50, true);
+
+				richEditableText.addEventListener(TextOperationEvent.CHANGE,
+					changeHandler,
+					false,
+					EventPriority.DEFAULT+50, true);
+				richEditableText.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler, false, EventPriority.DEFAULT, true);
+				richEditableText.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler, false, EventPriority.DEFAULT, true);
+				//need to cache selection so it is not recorded unless it changes
+				captureSelection();
+				oldSelection = currentSelection;
+				hasSelectionChanged = false;
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function stageEventHandler(event:Event):void
+		{
+			//Don't call focusOutHandler, that would remove our event listeners
+			//which would be bad because a deactive and mouse leave doesn't mean
+			//the framework thinks we lost focus, framework should call focus out
+			//if it does intend to remove focus during a deactive
+			flushSelection();
+			flushCharacterBuffer();
+		}
+
+
+		/**
+		 *  @private
+		 */
+		private function mouseDownOutsideHandler(event:Event):void
+		{
+			if (event.target != richEditableText)
+			{
+				//Don't call focusOutHandler, that would remove our event listeners
+				//which would be bad because it's possible for someone to click outside
+				//of the richEditableText but not have the focus change.  Just flush the
+				//event buffers in case that mouse down outside causes an event to be recorded
+				flushSelection();
+				flushCharacterBuffer();
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function focusOutHandler(event:Event):void
+		{
+			if (isWatchingFocus && !event.isDefaultPrevented())
+			{
+				isWatchingFocus = false;
+
+				if (richEditableText)
+				{
+					richEditableText.removeEventListener(FocusEvent.KEY_FOCUS_CHANGE,
+						focusOutHandler,
+						false);
+					richEditableText.removeEventListener(FocusEvent.FOCUS_OUT,
+						focusOutHandler,
+						false);
+				}
+				var sm:ISystemManager = Automation.getMainApplication().systemManager;
+				sm.removeEventListener(MouseEvent.MOUSE_DOWN,
+					mouseDownOutsideHandler,
+					true);
+				sm.removeEventListener(Event.DEACTIVATE,
+					stageEventHandler,
+					false);
+				sm.getSandboxRoot().removeEventListener(Event.MOUSE_LEAVE,
+					stageEventHandler,
+					false);
+				sm.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_DOWN,
+					stageEventHandler,
+					true);
+
+				sm.getSandboxRoot().removeEventListener(SandboxMouseEvent.MOUSE_DOWN_SOMEWHERE,
+					stageEventHandler,
+					true);
+				richEditableText.removeEventListener(TextOperationEvent.CHANGE,changeHandler);
+				richEditableText.removeEventListener(TextOperationEvent.CHANGING,changingTimeDataCapturer );
+				richEditableText.removeEventListener(TextEvent.TEXT_INPUT, textInputHandler);
+				richEditableText.removeEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
+				richEditableText.removeEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
+
+				flushSelection();
+				flushCharacterBuffer();
+
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function mouseDownHandler(event:MouseEvent):void
+		{
+			if (!recording)
+				return;
+
+			richEditableText.systemManager.getSandboxRoot().addEventListener(MouseEvent.MOUSE_UP,
+				mouseUpHandler, false, EventPriority.DEFAULT, true);
+			richEditableText.systemManager.getSandboxRoot().addEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE,
+				mouseUpHandler, false, EventPriority.DEFAULT, true);
+			richEditableText.addEventListener(MouseEvent.DOUBLE_CLICK,
+				mouseDoubleClickHandler, false, EventPriority.DEFAULT-1, true);
+
+		}
+
+		/**
+		 *  @private
+		 */
+		private function mouseClickHandler(event:MouseEvent):void
+		{
+			if (!recording)
+				return;
+			richEditableText.removeEventListener(MouseEvent.CLICK,
+				mouseClickHandler);
+
+			recordAutomatableEvent(event);
+		}
+
+		private function mouseDoubleClickHandler(event:MouseEvent):void
+		{
+			if (!recording)
+				return;
+			captureSelection();
+		}
+
+
+		/**
+		 *  @private
+		 */
+		private function mouseUpHandler(event:Event):void
+		{
+			if (!recording)
+				return;
+			richEditableText.systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP,
+				mouseUpHandler);
+			richEditableText.systemManager.getSandboxRoot().removeEventListener(SandboxMouseEvent.MOUSE_UP_SOMEWHERE,
+				mouseUpHandler);
+
+			flushCharacterBuffer();
+			captureSelection();
+			hasSelectionChanged = true;
+		}
+
+		/**
+		 *  @private
+		 */
+		private function keyDownHandler(event:KeyboardEvent):void
+		{
+			if (!recording)
+				return;
+
+			//arrow and navigation keys should dispatch whatever was last typed
+			//backspace, delete, and enter are dispatched
+			switch (event.keyCode)
+			{
+				case Keyboard.CONTROL:
+				{
+					flushCharacterBuffer();
+					break;
+				}
+				case Keyboard.SHIFT:
+				{
+					break;
+				}
+				case Keyboard.DOWN:
+				case Keyboard.END:
+				case Keyboard.HOME:
+				case Keyboard.LEFT:
+				case Keyboard.PAGE_DOWN:
+				case Keyboard.PAGE_UP:
+				case Keyboard.RIGHT:
+				case Keyboard.UP:
+				{
+					flushCharacterBuffer();
+					break;
+				}
+
+				case Keyboard.INSERT:
+				case Keyboard.BACKSPACE:
+				case Keyboard.DELETE:
+				case Keyboard.ENTER:
+				{
+					flushSelection();
+					flushCharacterBuffer();
+					recordAutomatableEvent(event);
+					oldSelection = null;
+					break;
+				}
+
+				case Keyboard.ESCAPE:
+				{
+					recordAutomatableEvent(event);
+					break;
+				}
+
+				default:
+				{
+					break;
+				}
+			}
+		}
+
+		/**
+		 *  @private
+		 */
+		private function keyUpHandler(event:KeyboardEvent):void
+		{
+
+			if (!recording)
+				return;
+
+			//arrow and navigation keys should dispatch whatever was last typed
+			//backspace, delete, and enter are dispatched
+			switch (event.keyCode)
+			{
+				case Keyboard.TAB:
+				{
+					break;
+				}
+
+				case Keyboard.SHIFT:
+				{
+					break;
+				}
+
+				case Keyboard.DOWN:
+				case Keyboard.END:
+				case Keyboard.HOME:
+				case Keyboard.LEFT:
+				case Keyboard.PAGE_DOWN:
+				case Keyboard.PAGE_UP:
+				case Keyboard.RIGHT:
+				case Keyboard.UP:
+				{
+					captureSelection();
+					break;
+				}
+
+				case Keyboard.BACKSPACE:
+				case Keyboard.DELETE:
+				case Keyboard.ENTER:
+				{
+					break;
+				}
+
+				case Keyboard.CONTROL:
+				{
+					captureSelection();
+					break;
+				}
+				default:
+				{
+					if (event.ctrlKey)
+					{
+						flushSelection();
+						flushCharacterBuffer();
+					}
+					break;
+				}
+			}
+		}
+
+
+
+
+		/**
+		 *  @private
+		 */
+		private function textInputHandler(event:TextEvent):void
+		{
+			if (!recording)
+				return;
+
+			// The \n will be caught by the ENTER capture
+			if ((event.text == "\n")||(event.text == "\r"))
+				return;
+
+			if (!stringBuffer)
+			{
+				flushSelection();
+				stringBuffer = "";
+			}
+
+			// TextField allows a script to enter more text to be inserted than maxChars.
+			// Hence we have to prevent the recording of more characters than maxChars.
+			// Without this check playback will add more characters than maxChars leading to errors.
+			if (richEditableText.maxChars == 0 || richEditableText.text.length < richEditableText.maxChars)
+			{
+				stringBuffer += event.text;
+				oldSelection = null;
+			}
+
+
+		}
+
+		private var currentActivePos:int = -1;
+		private var currentLength:int = -1;
+		private function changingTimeDataCapturer(event:TextOperationEvent):void
+		{
+			// we need to capture the details before the change
+			// as we dont have a straight forward way of getting the change
+			currentActivePos = richEditableText.selectionActivePosition;
+			currentLength = richEditableText.text.length;
+
+		}
+
+		/**
+		 *  @private
+		 */
+		private function changeHandler(event:TextOperationEvent):void
+		{
+			if (!recording)
+				return;
+
+			var operation:Object = event.operation;
+			if(operation is PasteOperation)
+			{
+				var newLength:int = richEditableText.text.length;
+				// get the additional string
+				// TBD once we have a correct understanding about the rtl, we need to decide
+				// what text to obtain for the rtl case.
+				var additionalString:String = richEditableText.text.substr(currentActivePos,newLength-currentLength);
+				if (!stringBuffer)
+				{
+					stringBuffer = "";
+				}
+				stringBuffer += additionalString;
+				// we need the charbuffer to be flushed
+				// as the selection details can change after the same
+				flushCharacterBuffer();
+			}
+			else if(operation is  CutOperation)
+			{
+				// we need to record an empty string here so that the current selection will be removed
+				stringBuffer = "";
+				flushCharacterBuffer();
+			}
+
+		}
+		/**
+		 *  @private
+		 */
+		private function beginRecordingHandler(event:Event):void
+		{
+			checkInitialFocus();
+		}
+
+	}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 11319
Author:   aharui@adobe.com
Date:     2009-10-30T18:42:01.565515Z

Log Message:
-----------
Allow for resizing of sub-apps after they initialize

QE Notes: Two Mustella Tests need updating:
MP_Controls_Tests2:MP_ComboBox_closeOnMouseDown_untrusted
MP_Controls_Tests2:MP_ComboBox_closeOnMouseDownOutside_untrusted
The new sub-app resize closes the dropdown.  Probably have to wait a bit longer before opening the dropdown
Doc Notes: New API in ISystemManager
Bugs: SDK-23892
Reviewer: Darrell
API Change: yes
Is noteworthy for integration: No
tests: checkintests mustella/MarshallPlan

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/systemClasses/MarshallingSupport.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ISystemManager.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/airframework/src/mx/managers/WindowedSystemManager.as</path>

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

--- frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as
+++ frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as
@@ -2202,5 +2202,20 @@
     {
         dispatchEvent(new SandboxMouseEvent(SandboxMouseEvent.MOUSE_UP_SOMEWHERE));
     }
+
+    /**
+     *  Attempts to notify the parent SWFLoader that the
+     *  Application's size has may have changed.  Not needed
+     *  for WindowedSystemManager so does nothing
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    public function invalidateParentSizeAndDisplayList():void
+    {
+    }
+
 }
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 10066
Author:   clucier@adobe.com
Date:     2009-09-08T21:01:12.571566Z

Log Message:
-----------
Spark Lable and RichText now render a full transparent bg fill if no backgroundColor is specified. This ensures that the interactive bounds of the element correspond to the layout bounds.

QE notes: None
Doc notes: None
Bugs: SDK-22888, SDK-22984
Reviewer: Ryan
Tests run: Checkin
Is noteworthy for integration: No

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as

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

--- frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as
@@ -657,16 +657,23 @@
         clip(clipText, unscaledWidth, unscaledHeight);

      	// If backgroundColor is defined, fill the bounds of the component
-    	// with backgroundColor drawn with alpha level backgroundAlpha.
+    	// with backgroundColor drawn with alpha level backgroundAlpha,
+        // otherwise, render a fully transparent background.
+
     	var backgroundColor:* = getStyle("backgroundColor");
-    	if (backgroundColor !== undefined)
-    	{
-            var g:Graphics = graphics;
-            g.lineStyle();
-            g.beginFill(uint(backgroundColor), getStyle("backgroundAlpha"));
-            g.drawRect(0, 0, unscaledWidth, unscaledHeight);
-            g.endFill();
-	    }
+        var backgroundAlpha:Number = getStyle("backgroundAlpha");
+
+    	if (backgroundColor === undefined)
+        {
+            backgroundColor = 0;
+            backgroundAlpha = 0;
+        }
+
+        var g:Graphics = graphics;
+        g.clear();
+        g.beginFill(uint(backgroundColor), backgroundAlpha);
+        g.drawRect(0, 0, unscaledWidth, unscaledHeight);
+        g.endFill();
     }

     //--------------------------------------------------------------------------


FLEX-34625 The asserts didn't help much. Hoping to get some traces instead.

--- frameworks/projects/spark/src/tests/spark/skins/spark/FLEX_34625_Tests.as
+++ frameworks/projects/spark/src/tests/spark/skins/spark/FLEX_34625_Tests.as
@@ -65,6 +65,9 @@
             assertTrue(UIImpersonator.testDisplay is Sprite);
             assertTrue(UIImpersonator.testDisplay is Container);
             assertTrue(UIImpersonator.testDisplay is Group);
+            assertTrue(UIImpersonator.testDisplay is IFocusManagerContainer);
+
+            trace("UIImpersonator root: " + UIImpersonator.testDisplay);

             var focusManager:FocusManager = new FocusManager(UIImpersonator.testDisplay as IFocusManagerContainer);
             focusManager.showFocusIndicator = true;