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@1262009 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/managers/marshalClasses/PopUpManagerMarshalMixin.as
+++ frameworks/projects/framework/src/mx/managers/marshalClasses/PopUpManagerMarshalMixin.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2005-2006 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.managers.marshalClasses
 {


Ouch, I changed that to 25 a while back while testing, but we want 250.

git-svn-id: b675b909355d5cf946977f44a8ec5a6ceb3782e4@710 ed5b42cb-e716-0410-a449-f6a68f950b19

--- src/as/com/threerings/flash/media/Mp3AudioPlayer.as
+++ src/as/com/threerings/flash/media/Mp3AudioPlayer.as
@@ -30,7 +30,7 @@
     {
         _loop = loop;

-        _positionChecker = new Timer(25);
+        _positionChecker = new Timer(250);
         _positionChecker.addEventListener(TimerEvent.TIMER, handlePositionCheck);
     }


change viewer

change viewer

--- src/com/merlinds/miracle_tool/viewer/ViewerView.as
+++ src/com/merlinds/miracle_tool/viewer/ViewerView.as
@@ -4,6 +4,10 @@
  * Time: 17:42
  */
 package com.merlinds.miracle_tool.viewer {
+	import com.bit101.components.List;
+	import com.bit101.components.List;
+	import com.bit101.components.Window;
+	import com.merlinds.debug.log;
 	import com.merlinds.miracle.Miracle;
 	import com.merlinds.miracle.display.MiracleImage;
 	import com.merlinds.miracle.utils.Asset;
@@ -21,6 +25,8 @@
 	public class ViewerView extends Sprite {

 		private var _model:AppModel;
+		private var _assets:Vector.<Asset>;
+		private var _window:Window;

 		public function ViewerView(model:AppModel = null) {
 			super();
@@ -43,15 +49,44 @@
 			this.stage.align = StageAlign.TOP_LEFT;
 			Miracle.start(this.stage, this.createHandler, true);
 		}
+
+		private function choseAnimation():void {
+			//find animation asset and add all of animations to chose list
+			var n:int = _assets.length;
+			for(var i:int = 0; i < n; i++){
+				var asset:Asset = _assets[i];
+				if(asset.type == Asset.TEXTURE_TYPE){
+					//parse output
+					_window = new Window(this, 0, 0, "Chose mesh");
+					var list:List = new List(_window, 0, 0, this.getTexture(asset.output));
+					_window.x = this.stage.stageWidth - _window.width >> 1;
+					_window.y = this.stage.stageHeight - _window.height >> 1;
+					list.addEventListener(Event.SELECT, this.selectAnimationHandler);
+				}
+			}
+
+		}
+
+		private function getTexture(bytes:ByteArray):Array {
+			var result:Array = [1, 2, 3];
+			return result;
+		}
+
+		private function getAnimations(bytes:ByteArray):Array {
+			var result:Array = [1, 2, 3];
+			return result;
+		}
 		//} endregion PRIVATE\PROTECTED METHODS ========================================

 		//==============================================================================
 		//{region							EVENTS HANDLERS
-		private function createHandler():void {
-			if(_model.viewerInput == null){
+		private function createHandler(animation:Boolean = false):void {
+			//TODO: Show view if it exit
+			if(animation || _model.viewerInput == null){
 				_model.viewerInput = _model.lastFileDirection;
-				_model.viewerInput.addEventListener(Event.SELECT, this.selectFileHandler)
-				_model.viewerInput.browseForOpen("Open file that you want to view");
+				_model.viewerInput.addEventListener(Event.SELECT, this.selectFileHandler);
+				_model.viewerInput.browseForOpen("Open " + animation ? "Animation" : "Sprite"
+						+ "file that you want to view");
 			}
 		}

@@ -64,12 +99,28 @@
 			stream.readBytes(byteArray);
 			stream.close();
 			//parse
-			var asset:Asset = new Asset(_model.viewerInput.name, byteArray);
-			var name:String = asset.name;
-			Miracle.createScene(new <Asset>[asset], 1);
+			if(_assets == null)_assets = new <Asset>[];
+			_assets.push(new Asset(_model.viewerInput.name, byteArray));
+//			var name:String = asset.name;
+			if(_assets.length > 1){
+				this.choseAnimation();
+				Miracle.createScene(_assets, 1);
+				Miracle.resume();
+			}else{
+				this.createHandler(true);
+			}
+		}
+
+		private function selectAnimationHandler(event:Event):void {
+			var list:List = event.target as List;
+			list.removeEventListener(event.type, this.selectAnimationHandler);
+			log(this, "selectAnimationHandler", list.selectedItem);
+			this.removeChild(_window);
+			_window = null;
+			//add animation to miracle
+			var name:String = list.selectedItem.toString();
 			Miracle.currentScene.createImage(name)
-					.addEventListener(Event.ADDED_TO_STAGE, this.imageAddedToStage);
-			Miracle.resume();
+			 .addEventListener(Event.ADDED_TO_STAGE, this.imageAddedToStage);
 		}

 		private function imageAddedToStage(event:Event):void {


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@1290287 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/advancedgrids/src/mx/collections/IHierarchicalCollectionViewCursor.as
+++ frameworks/projects/advancedgrids/src/mx/collections/IHierarchicalCollectionViewCursor.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.
 //
 ////////////////////////////////////////////////////////////////////////////////


Added some methods to StreamableArrayList that behave properly (use Equalable
to determine equality instead of using reference equality).

git-svn-id: a1a4b28b82a3276cc491891159dd9963a0a72fae@4407 542714f4-19e9-0310-aa3c-eee0fc999fb1

--- src/as/com/threerings/util/StreamableArrayList.as
+++ src/as/com/threerings/util/StreamableArrayList.as
@@ -9,6 +9,48 @@
 public class StreamableArrayList extends ArrayCollection
     implements Streamable
 {
+    /**
+     * Returns the index of the specified object in this collection, using
+     * Equalable.equals() if possible.
+     */
+    public function indexOf (object :Object) :int
+    {
+        return ArrayUtil.indexOf(source, object);
+    }
+
+    /**
+     * Removes the first instance of the supplied object from this array, using
+     * Equalable.equals() to determine equality. Returns the removed object if
+     * a match was found, null otherwise.
+     */
+    public function remove (object :Object) :Object
+    {
+        return ArrayUtil.removeFirst(source, object);
+    }
+
+    /**
+     * Adds all of the elements of the supplied collection to the end of this
+     * list.
+     */
+    public function addAll (list :ArrayCollection) :void
+    {
+        for (var ii :int = 0; ii < list.length; ii++) {
+            addItem(list.getItemAt(ii));
+        }
+    }
+
+    /**
+     * Extracts and returns a sublist from this list.
+     */
+    public function subList (startIdx :int, endIdx :int) :ArrayCollection
+    {
+        var newlist :ArrayCollection = new ArrayCollection();
+        for (var ii :int = startIdx; ii <= endIdx; ii++) {
+            newlist.addItem(getItemAt(ii));
+        }
+        return newlist;
+    }
+
     // documentation inherited from interface Streamable
     public function writeObject (out :ObjectOutputStream) :void
     {


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@1267285 13f79535-47bb-0310-9956-ffa450edef68

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


now delaying callbacks during removeAllObjects()

--- WeaveCore/src/weave/core/LinkableHashMap.as
+++ WeaveCore/src/weave/core/LinkableHashMap.as
@@ -354,8 +354,10 @@
 		 */
 		public function removeAllObjects():void
 		{
+			delayCallbacks();
 			for each (var name:String in getNames())
 				removeObject(name);
+			resumeCallbacks();
 		}

 		/**


Transferred from the Adobe Open Source Subversion Repository

Revision: 20708
Author:   deeptika@adobe.com
Date:     2011-03-09T08:32:19.519251Z

Log Message:
-----------
Merging revision 20707 from hero_private
mappingChange event was not getting fired for PieChart because of setting axis min and max explicitly. Fixed that.

Also, when showAllDataTips is set to true, we need to compute data tip positions only if chart has completed the effects and is simply in the state of showing data. This was done for all other series except for PieSeries. Fixed that.

QE notes:
Doc notes:
Bugs: FLEXDMV-2569 (Pie chart effects not working)
Reviewer:
Tests run:
Is noteworthy for integration:

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/mx/charts/chartClasses/NumericAxis.as</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/ChartsClasses.as</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/locale/zh_TW</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/mx/styles</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/mx/charts</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/mx/core</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/projects/spark_dmv/src/mx/controls/advancedDataGridClasses</path>
<path kind="dir" action="M">/private/flex/sdk/trunk</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/charts/src/mx/charts/series/PieSeries.as</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/projects/advancedgrids/src/mx</path>
<path kind="file" action="M">/private/flex/sdk/trunk/frameworks/projects/advancedgrids/src/AdvancedDataGridClasses.as</path>
<path kind="dir" action="M">/private/flex/sdk/trunk/frameworks/tests/performance</path>

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

--- frameworks/projects/charts/src/mx/charts/chartClasses/NumericAxis.as
+++ frameworks/projects/charts/src/mx/charts/chartClasses/NumericAxis.as
@@ -655,9 +655,10 @@
         _cachedDataDescriptions = null;
         _regenerateAutoValues = true;

+		dispatchEvent(new Event("mappingChange"));
+
         if (isNaN(assignedMinimum) || isNaN(assignedMaximum))
         {
-            dispatchEvent(new Event("mappingChange"));
             dispatchEvent(new Event("axisChange"));
         }
     }


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@1258996 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/core/ApplicationDomainTarget.as
+++ frameworks/projects/framework/src/mx/core/ApplicationDomainTarget.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2010 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: 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@1260800 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/framework/src/mx/events/ValidationResultEvent.as
+++ frameworks/projects/framework/src/mx/events/ValidationResultEvent.as
@@ -1,13 +1,3 @@
-////////////////////////////////////////////////////////////////////////////////
-//
-//  ADOBE SYSTEMS INCORPORATED
-//  Copyright 2005-2006 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.events
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 10203
Author:   klin@adobe.com
Date:     2009-09-12T23:14:39.753219Z

Log Message:
-----------
http://bugs.adobe.com/jira/browse/SDK-23113 - Bug where backgroundColor and backgroundAlpha would show up twice in the ASDocs.

I pulled out the two styles into separate style files that distinguish between having just the halo theme (some components) or both halo and spark (Container and container subclasses). Updated other components to include the right style files.

QE notes: None
Doc notes: Check to make sure duplicates are not there.
Bugs: SDK-23113
Reviewer: Glenn
Tests run: local asdoc
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ToolTip.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VideoDisplay.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ScrollControlBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/metadata/BackgroundStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/NumericStepper.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/styles/metadata/ContainerBackgroundStyles.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as</path>

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

--- frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as
+++ frameworks/projects/framework/src/mx/styles/metadata/BorderStyles.as
@@ -8,53 +8,6 @@
 //  in accordance with the terms of the license agreement accompanying it.
 //
 ////////////////////////////////////////////////////////////////////////////////
-
-/**
- *  Alpha level of the color defined by the backgroundColor
- *  property, of the image or SWF file defined by the backgroundImage
- *  style.
- *  Valid values range from 0.0 to 1.0. For most controls, the default value is 1.0,
- *  but for ToolTip controls, the default value is 0.95 and for Alert controls, the default value is 0.9.
- *
- *  @default 1.0
- *
- *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
- */
-[Style(name="backgroundAlpha", type="Number", inherit="no", theme="halo")]
-
-/**
- *  Background color of a component.
- *  You can have both a backgroundColor and a
- *  backgroundImage set.
- *  Some components do not have a background.
- *  The DataGrid control ignores this style.
- *  The default value is undefined, which means it is not set.
- *  If both this style and the backgroundImage style
- *  are undefined, the component has a transparent background.
- *
- *
For the Application container, this style specifies the background color
- *  while the application loads, and a background gradient while it is running.
- *  Flex calculates the gradient pattern between a color slightly darker than
- *  the specified color, and a color slightly lighter than the specified color.

- *
- *
The default skins of most Flex controls are partially transparent. As a result, the background color of
- *  a container partially "bleeds through" to controls that are in that container. You can avoid this by setting the
- *  alpha values of the control's fillAlphas property to 1, as the following example shows:
- *

- *  <mx:Container backgroundColor="0x66CC66"/>
- *      <mx:ControlName ... fillAlphas="[1,1]"/>
- *  </mx:Container>

- *

- *
- *  @langversion 3.0
- *  @playerversion Flash 9
- *  @playerversion AIR 1.1
- *  @productversion Flex 3
- */
-[Style(name="backgroundColor", type="uint", format="Color", inherit="no", theme="halo")]

 /**
  *  Background color of the component when it is disabled.


Transferred from the Adobe Open Source Subversion Repository

Revision: 22385
Author:   smgilson@adobe.com
Date:     2011-09-02T16:15:19.044266Z

Log Message:
-----------
Remove ASDoc content that should not have been copied from Halo List to Spark List.as

Update allowed values for contentBackgroundAppearance in Callout.as

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

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/List.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/Callout.as</path>

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

--- frameworks/projects/mobilecomponents/src/spark/components/Callout.as
+++ frameworks/projects/mobilecomponents/src/spark/components/Callout.as
@@ -40,8 +40,8 @@

 /**
  *  Appearance of the contentGroup.
- *  Valid MXML values are inset
- *  flat and transparent.
+ *  Valid MXML values are inset,
+ *  flat, and none.
  *
  *
In ActionScript, you can use the following constants
  *  to set this property:


Transferred from the Adobe Open Source Subversion Repository

Revision: 18046
Author:   jasonsj@adobe.com
Date:     2010-10-06T23:00:53.128377Z

Log Message:
-----------
Style changes for ActionBar including: new 67px height, title shadow up, light-look and chromeColor support in ActionBar buttons.
Added inheriting MobileTextFieldTextStyles to ActionBar.
Added inheriting container styles to ActionBar: accentColor, contentBackgroundAlpha, contentBackgroundColor, focusColor.
Added skin states to ActionBar

QE notes:
Doc notes:
Bugs:
SDK-27684 Several ActionBar style metadata tags are missing
SDK-28006 ActionBar TitleContent is not replacing Title when set in AS
SDK-27948 unable to style components inside actionContent and navigationContent via individual component's css rule
SDK-27684 Several ActionBar style metadata tags are missing
Reviewer: rfrishbe
Tests run: checkintests
Is noteworthy for integration: yes

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/NavigationButton_up.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/ActionButton_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/ActionBarBackground.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/NavigationButton_down.fxg</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/defaults.css</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/MobileThemeClasses.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobilecomponents/src/spark/components/ActionBar.as</path>
<path kind="file" action="A">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionBarButtonSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ActionButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/NavigationButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/assets/ActionButton_up.fxg</path>

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/ButtonSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/ButtonSkin.as
@@ -120,10 +120,10 @@
         borderClass = getBorderClassForCurrentState();

         if (!(bgImg is borderClass))
-        {
             changeFXGSkin = true;
-            invalidateDisplayList();
-        }
+
+        // update borderClass and background
+        invalidateDisplayList();
     }

     override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
@@ -141,6 +141,7 @@

             if (borderClass)
             {
+                // FIXME (jasonsj): cache instead of calling creating for every state change?
                 bgImg = new borderClass();
                 addChildAt(bgImg, 0);
             }


Fix CC generation breaking video/dupe'ing tags.

--- HLSPlugin/src/com/kaltura/hls/m2ts/FLVTranscoder.as
+++ HLSPlugin/src/com/kaltura/hls/m2ts/FLVTranscoder.as
@@ -31,10 +31,9 @@
             _aacTimestamp = 0;
         }

-        private static var tag:ByteArray = new ByteArray();
-
         private function sendFLVTag(flvts:uint, type:uint, codec:int, mode:int, bytes:ByteArray, offset:uint, length:uint):void
         {
+            var tag:ByteArray = new ByteArray();
             tag.position = 0;
             var msgLength:uint = length + ((codec >= 0) ? 1 : 0) + ((mode >= 0) ? 1 : 0);
             var cursor:uint = 0;
@@ -68,11 +67,12 @@

             tag.writeUnsignedInt(lastTagSize);

+            lastTagSize = tag.length;
+
             // Dispatch tag.
             if(callback != null)
                 callback(flvts, tag);

-            lastTagSize = tag.length;
         }

         public function convertFLVTimestamp(pts:Number):Number
@@ -375,7 +375,7 @@
          */
         public function createAndSendCaptionMessage( timeStamp:Number, captionBuffer:String, lang:String="", textid:Number=99):void
         {
-            var captionObject:Array = ["onCaptionInfo", { type:"WebVTT", data:captionBuffer }];
+            //var captionObject:Array = ["onCaptionInfo", { type:"WebVTT", data:captionBuffer }];
             //sendScriptDataFLVTag( timeStamp * 1000, captionObject);

             // We need to strip the timestamp off of the text data


Change 20080820-hqm-d by hqm@badtzmaru.home on 2008-08-20 15:18:10 EDT
    in /Users/hqm/openlaszlo/trunk/WEB-INF/lps/lfc
    for http://svn.openlaszlo.org/openlaszlo/trunk/WEB-INF/lps/lfc

Summary:

New Features: remove debug.write statement

Bugs Fixed:

Technical Reviewer: hqm
QA Reviewer: (pending)
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details:

Tests:

git-svn-id: d62bde4b5aa582fdf07c8d403e53e0399a7ed285@10725 fa20e4f9-1d0a-0410-b5f3-dc9c16b8b17c

--- WEB-INF/lps/lfc/kernel/swf9/DojoExternalInterface.as
+++ WEB-INF/lps/lfc/kernel/swf9/DojoExternalInterface.as
@@ -1,244 +1,244 @@
 /**
-	A wrapper around Flash 8's ExternalInterface; DojoExternalInterface is needed so that we
-	can do a Flash 6 implementation of ExternalInterface, and be able
-	to support having a single codebase that uses DojoExternalInterface
-	across Flash versions rather than having two seperate source bases,
-	where one uses ExternalInterface and the other uses DojoExternalInterface.
-
-	DojoExternalInterface class does a variety of optimizations to bypass ExternalInterface's
-	unbelievably bad performance so that we can have good performance
-	on Safari; see the blog post
-	http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html
-	for details.
-
-	@author Brad Neuberg, bkn3@columbia.edu
+    A wrapper around Flash 8's ExternalInterface; DojoExternalInterface is needed so that we
+    can do a Flash 6 implementation of ExternalInterface, and be able
+    to support having a single codebase that uses DojoExternalInterface
+    across Flash versions rather than having two seperate source bases,
+    where one uses ExternalInterface and the other uses DojoExternalInterface.
+
+    DojoExternalInterface class does a variety of optimizations to bypass ExternalInterface's
+    unbelievably bad performance so that we can have good performance
+    on Safari; see the blog post
+    http://codinginparadise.org/weblog/2006/02/how-to-speed-up-flash-8s.html
+    for details.
+
+    @author Brad Neuberg, bkn3@columbia.edu
 */

 class DojoExternalInterfaceClass {
     #passthrough (toplevel:true) {
     import flash.external.ExternalInterface;
     }#
-	var available = null;
-	var flashMethods = [];
-	var numArgs = null;
-	var argData = null;
-	var resultData = null;
-//	var installing = false;
-	var _id;
-
-	function DojoExternalInterfaceClass(id){
-		// extract the dojo base path
-		//Debug.write('initialize', ExternalInterface.addCallback);
-
-		// see if we need to do an express install
-/*		var install = new ExpressInstall();
-		if(install.needsUpdate){
-			install.init();
-			this.installing = true;
-		}
+    var available = null;
+    var flashMethods = [];
+    var numArgs = null;
+    var argData = null;
+    var resultData = null;
+//  var installing = false;
+    var _id;
+
+    function DojoExternalInterfaceClass(id){
+        // extract the dojo base path
+        //Debug.write('initialize', ExternalInterface.addCallback);
+
+        // see if we need to do an express install
+/*      var install = new ExpressInstall();
+        if(install.needsUpdate){
+            install.init();
+            this.installing = true;
+        }
 */
-		// not loaded from the wrapper JS...
-		if (id == null) return;
-
-		this._id = id;
-
-		// register our callback functions
-		ExternalInterface.addCallback("startExec", this.startExec);
-		ExternalInterface.addCallback("setNumberArguments", this.setNumberArguments);
-		ExternalInterface.addCallback("chunkArgumentData", this.chunkArgumentData);
-		ExternalInterface.addCallback("exec", this.exec);
-		ExternalInterface.addCallback("getReturnLength", this.getReturnLength);
-		ExternalInterface.addCallback("chunkReturnData", this.chunkReturnData);
-		ExternalInterface.addCallback("endExec", this.endExec);
-
-		// set whether communication is available
-		this.available = ExternalInterface.available;
-		this.call("loaded");
-	}
-
-	function addCallback(methodName, instance, method) {
-		//Debug.write('addCallback', methodName, instance, method);
-		// register DojoExternalInterface methodName with it's instance
-		this.flashMethods[methodName] = instance;
-
-		// tell JavaScript about DojoExternalInterface new method so we can create a proxy
-		//Debug.write('calling dojo.flash.comm.' + this._id + "._addExternalInterfaceCallback", methodName, this._id);
-		ExternalInterface.call("lz.embed.dojo.comm." + this._id + "._addExternalInterfaceCallback", methodName, this._id);
-
-		return true;
-	}
-
-	function call(methodName, resultsCallback = null, ...parameters) {
-		/*
-		// we might have any number of optional arguments, so we have to
-		// pass them in dynamically; strip out the results callback
-		var parameters = [];
-		for(var i = 0; i < arguments.length; i++){
-			if(i != 1){ // skip the callback
-				parameters.push(arguments[i]);
-			}
-		}
-		*/
-
-		var results = ExternalInterface.call(methodName, parameters);
-
-		// immediately give the results back, since ExternalInterface is
-		// synchronous
-		if(resultsCallback != null && typeof resultsCallback != "undefined"){
-			resultsCallback.call(null, results);
-		}
-	}
-
-	/**
-			Called by Flash to indicate to JavaScript that we are ready to have
-			our Flash functions called. Calling loaded()
-			will fire the dojo.flash.loaded() event, so that JavaScript can know that
-			Flash has finished loading and adding its callbacks, and can begin to
-			interact with the Flash file.
-	*/
-	function loaded(){
-		Debug.write('loaded');
-		//if (this.installing) return;
-		this.call("lz.embed.dojo.loaded", null, this._id);
-		//LzBrowserKernel.__jsready();
-	}
-
-	function startExec(){
-		//Debug.write('startExec');
-		this.numArgs = null;
-		this.argData = null;
-		this.resultData = null;
-	}
-
-	function setNumberArguments(numArgs){
-		//Debug.write('setNumberArguments', numArgs);
-		this.numArgs = numArgs;
-		this.argData = [];
-	}
-
-	function chunkArgumentData(value, argIndex){
-		//Debug.write('chunkArgumentData', value, argIndex);
-		//getURL("javascript:dojo.debug('FLASH: chunkArgumentData, value="+value+", argIndex="+argIndex+"')");
-		var currentValue = this.argData[argIndex];
-		if(currentValue == null || typeof currentValue == "undefined"){
-			this.argData[argIndex] = value;
-		}else{
-			this.argData[argIndex] += value;
-		}
-	}
-
-	function exec(methodName){
-		//Debug.write('exec', methodName);
-		// decode all of the arguments that were passed in
-		for(var i = 0; i < this.argData.length; i++){
-			this.argData[i] =
-				this.decodeData(this.argData[i]);
-		}
-
-		var instance = this.flashMethods[methodName];
-		//Debug.write('instance', instance, instance[methodName]);
-		this.resultData = instance[methodName].apply(
-																			instance, this.argData) + '';
-		//Debug.write('result', this.resultData);
-		// encode the result data
-		this.resultData =
-			this.encodeData(this.resultData);
-
-		//Debug.write('resultData', this.resultData);
-
-		//getURL("javascript:dojo.debug('FLASH: encoded result data="+this.resultData+"')");
-	}
-
-	function getReturnLength(){
-	 if(this.resultData == null ||
-	 					typeof this.resultData == "undefined"){
-	 	return 0;
-	 }
-	 var segments = Math.ceil(this.resultData.length / 1024);
-	//Debug.write('getReturnLength', typeof this.resultData, this.resultData.length, segments);
-	 return segments;
-	}
-
-	function chunkReturnData(segment){
-		var numSegments = this.getReturnLength();
-		var startCut = segment * 1024;
-		var endCut = segment * 1024 + 1024;
-		if(segment == (numSegments - 1)){
-			endCut = segment * 1024 + this.resultData.length;
-		}
-
-		var piece = this.resultData.substring(startCut, endCut);
-
-		//getURL("javascript:dojo.debug('FLASH: chunking return piece="+piece+"')");
-
-		return piece;
-	}
-
-	function endExec(){
-	}
-
-	function decodeData(data){
-		// we have to use custom encodings for certain characters when passing
-		// them over; for example, passing a backslash over as //// from JavaScript
-		// to Flash doesn't work
-		data = this.replaceStr(data, "&custom_backslash;", "\\");
-
-		data = this.replaceStr(data, "\\\'", "\'");
-		data = this.replaceStr(data, "\\\"", "\"");
-		//Debug.write('decodeData', data);
-
-		return data;
-	}
-
-	function encodeData(data){
-		//getURL("javascript:dojo.debug('inside flash, data before="+data+"')");
-
-		// double encode all entity values, or they will be mis-decoded
-		// by Flash when returned
-		data = this.replaceStr(data, "&", "&");
-
-		// certain XMLish characters break Flash's wire serialization for
-		// ExternalInterface; encode these into a custom encoding, rather than
-		// the standard entity encoding, because otherwise we won't be able to
-		// differentiate between our own encoding and any entity characters
-		// that are being used in the string itself
-		data = this.replaceStr(data, '<', '&custom_lt;');
-		data = this.replaceStr(data, '>', '&custom_gt;');
-
-		// encode control characters and JavaScript delimiters
-		data = this.replaceStr(data, "\n", "\\n");
-		data = this.replaceStr(data, "\r", "\\r");
-		data = this.replaceStr(data, "\f", "\\f");
-		data = this.replaceStr(data, "'", "\\'");
-		data = this.replaceStr(data, '"', '\"');
-
-		//Debug.write('encodeData', data);
-		//getURL("javascript:dojo.debug('inside flash, data after="+data+"')");
-		return data;
-	}
-
-	/**
-			Flash ActionScript has no String.replace method or support for
-			Regular Expressions! We roll our own very simple one.
-	*/
-	function replaceStr(inputStr, replaceThis, withThis){
-		var splitStr = inputStr.split(replaceThis)
-		inputStr = splitStr.join(withThis)
-		return inputStr;
-	}
-
-	/*
-	function getDojoPath(){
-		var url = _root._url;
-		var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;
-		var path = url.substring(start);
-		var end = path.indexOf("&");
-		if(end != -1){
-			path = path.substring(0, end);
-		}
-		return path;
-	}
-	*/
+        // not loaded from the wrapper JS...
+        if (id == null) return;
+
+        this._id = id;
+
+        // register our callback functions
+        ExternalInterface.addCallback("startExec", this.startExec);
+        ExternalInterface.addCallback("setNumberArguments", this.setNumberArguments);
+        ExternalInterface.addCallback("chunkArgumentData", this.chunkArgumentData);
+        ExternalInterface.addCallback("exec", this.exec);
+        ExternalInterface.addCallback("getReturnLength", this.getReturnLength);
+        ExternalInterface.addCallback("chunkReturnData", this.chunkReturnData);
+        ExternalInterface.addCallback("endExec", this.endExec);
+
+        // set whether communication is available
+        this.available = ExternalInterface.available;
+        this.call("loaded");
+    }
+
+    function addCallback(methodName, instance, method) {
+        //Debug.write('addCallback', methodName, instance, method);
+        // register DojoExternalInterface methodName with it's instance
+        this.flashMethods[methodName] = instance;
+
+        // tell JavaScript about DojoExternalInterface new method so we can create a proxy
+        //Debug.write('calling dojo.flash.comm.' + this._id + "._addExternalInterfaceCallback", methodName, this._id);
+        ExternalInterface.call("lz.embed.dojo.comm." + this._id + "._addExternalInterfaceCallback", methodName, this._id);
+
+        return true;
+    }
+
+    function call(methodName, resultsCallback = null, ...parameters) {
+        /*
+        // we might have any number of optional arguments, so we have to
+        // pass them in dynamically; strip out the results callback
+        var parameters = [];
+        for(var i = 0; i < arguments.length; i++){
+            if(i != 1){ // skip the callback
+                parameters.push(arguments[i]);
+            }
+        }
+        */
+
+        var results = ExternalInterface.call(methodName, parameters);
+
+        // immediately give the results back, since ExternalInterface is
+        // synchronous
+        if(resultsCallback != null && typeof resultsCallback != "undefined"){
+            resultsCallback.call(null, results);
+        }
+    }
+
+    /**
+            Called by Flash to indicate to JavaScript that we are ready to have
+            our Flash functions called. Calling loaded()
+            will fire the dojo.flash.loaded() event, so that JavaScript can know that
+            Flash has finished loading and adding its callbacks, and can begin to
+            interact with the Flash file.
+    */
+    function loaded(){
+        //Debug.write('loaded');
+        //if (this.installing) return;
+        this.call("lz.embed.dojo.loaded", null, this._id);
+        //LzBrowserKernel.__jsready();
+    }
+
+    function startExec(){
+        //Debug.write('startExec');
+        this.numArgs = null;
+        this.argData = null;
+        this.resultData = null;
+    }
+
+    function setNumberArguments(numArgs){
+        //Debug.write('setNumberArguments', numArgs);
+        this.numArgs = numArgs;
+        this.argData = [];
+    }
+
+    function chunkArgumentData(value, argIndex){
+        //Debug.write('chunkArgumentData', value, argIndex);
+        //getURL("javascript:dojo.debug('FLASH: chunkArgumentData, value="+value+", argIndex="+argIndex+"')");
+        var currentValue = this.argData[argIndex];
+        if(currentValue == null || typeof currentValue == "undefined"){
+            this.argData[argIndex] = value;
+        }else{
+            this.argData[argIndex] += value;
+        }
+    }
+
+    function exec(methodName){
+        //Debug.write('exec', methodName);
+        // decode all of the arguments that were passed in
+        for(var i = 0; i < this.argData.length; i++){
+            this.argData[i] =
+                this.decodeData(this.argData[i]);
+        }
+
+        var instance = this.flashMethods[methodName];
+        //Debug.write('instance', instance, instance[methodName]);
+        this.resultData = instance[methodName].apply(
+                                                                            instance, this.argData) + '';
+        //Debug.write('result', this.resultData);
+        // encode the result data
+        this.resultData =
+            this.encodeData(this.resultData);
+
+        //Debug.write('resultData', this.resultData);
+
+        //getURL("javascript:dojo.debug('FLASH: encoded result data="+this.resultData+"')");
+    }
+
+    function getReturnLength(){
+     if(this.resultData == null ||
+                        typeof this.resultData == "undefined"){
+        return 0;
+     }
+     var segments = Math.ceil(this.resultData.length / 1024);
+    //Debug.write('getReturnLength', typeof this.resultData, this.resultData.length, segments);
+     return segments;
+    }
+
+    function chunkReturnData(segment){
+        var numSegments = this.getReturnLength();
+        var startCut = segment * 1024;
+        var endCut = segment * 1024 + 1024;
+        if(segment == (numSegments - 1)){
+            endCut = segment * 1024 + this.resultData.length;
+        }
+
+        var piece = this.resultData.substring(startCut, endCut);
+
+        //getURL("javascript:dojo.debug('FLASH: chunking return piece="+piece+"')");
+
+        return piece;
+    }
+
+    function endExec(){
+    }
+
+    function decodeData(data){
+        // we have to use custom encodings for certain characters when passing
+        // them over; for example, passing a backslash over as //// from JavaScript
+        // to Flash doesn't work
+        data = this.replaceStr(data, "&custom_backslash;", "\\");
+
+        data = this.replaceStr(data, "\\\'", "\'");
+        data = this.replaceStr(data, "\\\"", "\"");
+        //Debug.write('decodeData', data);
+
+        return data;
+    }
+
+    function encodeData(data){
+        //getURL("javascript:dojo.debug('inside flash, data before="+data+"')");
+
+        // double encode all entity values, or they will be mis-decoded
+        // by Flash when returned
+        data = this.replaceStr(data, "&", "&");
+
+        // certain XMLish characters break Flash's wire serialization for
+        // ExternalInterface; encode these into a custom encoding, rather than
+        // the standard entity encoding, because otherwise we won't be able to
+        // differentiate between our own encoding and any entity characters
+        // that are being used in the string itself
+        data = this.replaceStr(data, '<', '&custom_lt;');
+        data = this.replaceStr(data, '>', '&custom_gt;');
+
+        // encode control characters and JavaScript delimiters
+        data = this.replaceStr(data, "\n", "\\n");
+        data = this.replaceStr(data, "\r", "\\r");
+        data = this.replaceStr(data, "\f", "\\f");
+        data = this.replaceStr(data, "'", "\\'");
+        data = this.replaceStr(data, '"', '\"');
+
+        //Debug.write('encodeData', data);
+        //getURL("javascript:dojo.debug('inside flash, data after="+data+"')");
+        return data;
+    }
+
+    /**
+            Flash ActionScript has no String.replace method or support for
+            Regular Expressions! We roll our own very simple one.
+    */
+    function replaceStr(inputStr, replaceThis, withThis){
+        var splitStr = inputStr.split(replaceThis)
+        inputStr = splitStr.join(withThis)
+        return inputStr;
+    }
+
+    /*
+    function getDojoPath(){
+        var url = _root._url;
+        var start = url.indexOf("baseRelativePath=") + "baseRelativePath=".length;
+        var path = url.substring(start);
+        var end = path.indexOf("&");
+        if(end != -1){
+            path = path.substring(0, end);
+        }
+        return path;
+    }
+    */
 }

 /* X_LZ_COPYRIGHT_BEGIN ***************************************************


Deleting old Unit test file in the wrong namespace

--- tests/com/cimians/openPyro/utils/TestArrayUtil.as
+++ tests/com/cimians/openPyro/utils/TestArrayUtil.as
@@ -1,63 +0,0 @@
-package com.cimians.openPyro.utils {
-
-	import flexunit.framework.TestCase;
-	import com.cimians.openPyro.utils.ArrayUtil;
-
-	public class TestArrayUtil extends TestCase{
-
-		private var testArray:Array
-
-		public function TestArrayUtil(methodName:String = null ){
-			super( methodName );
-		}
-
-		override public function setUp():void{
-			testArray = ["zero","one","two","three","four","five","six","seven","eight"];
-		}
-		override public function tearDown():void{
-			testArray = null;
-		}
-
-		public function testInsertAt():void{
-			ArrayUtil.insertAt(testArray, 1, "between_0_and_1");
-			assertTrue("Array value at 1 was unexpected "+testArray[1],testArray[1] == "between_0_and_1");
-			assertTrue("Array length was incorrect "+testArray.length,testArray.length == 10);
-			ArrayUtil.insertAt(testArray, 9, "after_8");
-			assertTrue("Array value at 9 was unexpected "+testArray[9], testArray[9]=="after_8");
-			var newArray:Array = new Array();
-			ArrayUtil.insertAt(newArray, 0, "new_zero");
-			assertTrue("Array value at 0 was unexpected "+newArray[0], newArray[0]=="new_zero");
-		}
-
-		public function testSwap():void{
-			ArrayUtil.swapByValue(testArray, "zero", "one");
-			assertTrue("Array value at 0 was unexpected "+testArray[0], testArray[0]=="one");
-			assertTrue("Array value at 1 was unexpected "+testArray[1], testArray[1]=="zero");
-		}
-
-		public function testRemove():void{
-			ArrayUtil.remove(testArray, "zero");
-			assertTrue("Array value at 0 was unexpected "+testArray[0], testArray[0]=="one");
-			assertTrue("Array length did not reduce after remove", testArray.length == 8);
-		}
-
-		public function testRemoveDuplicates():void{
-			testArray = ["zero","one","zero","two","three","one"];
-			ArrayUtil.removeDuplicates(testArray);
-			assertTrue("Remove Duplicates failed ",testArray.length == 4);
-			assertTrue("Remove Duplicates failed ",testArray[0] == "zero");
-			assertTrue("Remove Duplicates order changed",testArray[2] == "two");
-
-			// testing complex objects
-
-			var duplicate:Object = {label:'label1', data:"d2"};
-
-			var t2:Array = [duplicate,
-			{label:'label2', data:"d2"},
-			duplicate]
-			ArrayUtil.removeDuplicates(t2);
-
-			assertTrue("Remove Duplicates failed ",t2.length == 2);
-		}
-	}
-}


Fixed errant trace, comment and extra var in suite

--- FlexUnit4/src/org/flexunit/runners/Suite.as
+++ FlexUnit4/src/org/flexunit/runners/Suite.as
@@ -1,292 +1,271 @@
-/**
- * Copyright (c) 2009 Digital Primates IT Consulting Group
- *
- * Permission is hereby granted, free of charge, to any person
- * obtaining a copy of this software and associated documentation
- * files (the "Software"), to deal in the Software without
- * restriction, including without limitation the rights to use,
- * copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following
- * conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
- * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
- * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
- * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * @author     Michael Labriola
- * @version
- **/
-package org.flexunit.runners {
-	import flex.lang.reflect.Klass;
-
-	import org.flexunit.internals.dependency.IExternalRunnerDependencyWatcher;
-	import org.flexunit.internals.runners.InitializationError;
-	import org.flexunit.runner.Description;
-	import org.flexunit.runner.IDescription;
-	import org.flexunit.runner.IRunner;
-	import org.flexunit.runner.external.IExternalDependencyRunner;
-	import org.flexunit.runner.manipulation.IFilterable;
-	import org.flexunit.runner.notification.IRunListener;
-	import org.flexunit.runner.notification.IRunNotifier;
-	import org.flexunit.runner.notification.StoppedByUserException;
-	import org.flexunit.runners.model.IRunnerBuilder;
+/**
+ * Copyright (c) 2009 Digital Primates IT Consulting Group
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
+ * files (the "Software"), to deal in the Software without
+ * restriction, including without limitation the rights to use,
+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following
+ * conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * @author     Michael Labriola
+ * @version
+ **/
+package org.flexunit.runners {
+	import flex.lang.reflect.Klass;
+
+	import org.flexunit.internals.dependency.IExternalRunnerDependencyWatcher;
+	import org.flexunit.internals.runners.InitializationError;
+	import org.flexunit.runner.Description;
+	import org.flexunit.runner.IDescription;
+	import org.flexunit.runner.IRunner;
+	import org.flexunit.runner.external.IExternalDependencyRunner;
+	import org.flexunit.runner.manipulation.IFilterable;
+	import org.flexunit.runner.notification.IRunListener;
+	import org.flexunit.runner.notification.IRunNotifier;
+	import org.flexunit.runner.notification.StoppedByUserException;
+	import org.flexunit.runners.model.IRunnerBuilder;
 	import org.flexunit.token.AsyncTestToken;
-
-	/**
- 	 * A Suite is an IRunner that contains test cases and other
-	 * Suites to be run during the course of a test run.  The Suite is
-	 * responsible for locating all non-static classes that it contains and obtaining an array of
-	 * IRunners for each child that was found in this manner.  The
-	 * IRunnerBuilder to be used to determine the runner for the child classes is
-	 * provided to the Suite during its instantiation.

-	 *
-	 * When a Suite goes to run a child, it is telling another IRunner to
-	 * begin running, supplying the IRunner with an IRunNotifier in
-	 * order to keep track of the test run.  An AsyncTestToken is also provided to
-	 * the child IRunner in order to notify the Suite when the child has
-	 * finished.

-	 *
-	 * In order to declare a class as a suite class, the class must include a [Suite]
-	 * and [RunWith("org.flexunit.runners.Suite")] metadata tag.  The
-	 * [RunWith] tag will instruct an IRunnerBuilder to use the
-	 * Suite IRunner for the class.

-	 *
-	 *

-	 * [Suite]
-	 * [RunWith("org.flexunit.runners.Suite")]
-	 * public class SuiteToRun
-	 * {
-	 * 	public var oneTest:OneTest; //A Test
-	 * 	public var anotherTest:AnotherTest; //Another Test
-	 * 	public var differentSuite:DifferentSuite; //A Suite
-	 * }
-	 *

-	 */
-	public class Suite extends ParentRunner implements IFilterable, IExternalDependencyRunner {
-		/**
-		 * @private
-		 */
-		private var _runners:Array;
-
-		/**
-		 * @private
-		 */
-		private var _dependencyWatcher:IExternalRunnerDependencyWatcher;
-
-		/**
-		 * @inheritDoc
-		 */
-		override public function pleaseStop():void {
-			super.pleaseStop();
-
-			if ( _runners ) {
-				for ( var i:int=0; i<_runners.length; i++ ) {
-					( _runners[ i ] as IRunner ).pleaseStop();
-				}
-			}
-		}
-
-		private static var someCounter:uint = 0;
-		/**
-		 * @private
-		 */
-		private var descriptionIsCached:Boolean = false;
-
-		/**
-		 * @inheritDoc
-		 */
-		override public function get description():IDescription {
-			var desc:IDescription;
-
-			if ( descriptionIsCached ) {
-				desc = super.description;
-			} else {
-				trace( someCounter++ );
-				if ( _dependencyWatcher && _dependencyWatcher.allDependenciesResolved ) {
-					//We are good to go, so let it cache this time and from now on we will defer to the super class' copy
-					descriptionIsCached = true;
-					desc = super.description;
-				} else {
-					//For some reason we still have unresolved dependencies.. most likey, we have external dependencies
-					//but we are being filtered, so, just keep generating new descriptions when asked as we could change
-					desc = generateDescription();
-				}
-			}
-
-			return desc;
-		}
-
-/*		override public function get description():IDescription {
-
-			//Unless I can find a better way to do this, suites are not allowed to cache their descriptions for now
-			//as these descriptions could be built before parameterized dependencies are loaded.
-			//Might be able to optimize by watching for this condition specifically
-
-			var description:IDescription = Description.createSuiteDescription( name, testClass.metadata ); //?testClass.metadata[ 0 ]:null );
-			var filtered:Array = getFilteredChildren();
-			var child:*;
-
-			for ( var i:int=0; i<filtered.length; i++ ) {
-				child = filtered[ i ];
-				description.addChild( describeChild( child ) );
-			}
-
-			trace( someCounter++ );
-			return description;
-		}
-		*/
-		/**
-		 * @inheritDoc
-		 */
-		override protected function get children():Array {
-			return _runners;
-		}
-
-		/**
-		 * @inheritDoc
-		 */
-		override protected function describeChild( child:* ):IDescription {
-			return IRunner( child ).description;
-		}
-
-		/**
-		 * @inheritDoc
-		 */
-		override protected function runChild( child:*, notifier:IRunNotifier, childRunnerToken:AsyncTestToken ):void {
-			if ( stopRequested ) {
-				childRunnerToken.sendResult( new StoppedByUserException() );
-				return;
-			}
-
-			IRunner( child ).run( notifier, childRunnerToken );
-		}
-
-		/**
-		 * Setter for a dependency watcher. This is a class that implements IExternalRunnerDependencyWatcher
-		 * and watches for any external dependencies (such as loading data) are finalized before execution of
-		 * tests is allowed to commence.
-		 *
-		 * @param value An implementation of IExternalRunnerDependencyWatcher
-		 */
-		public function set dependencyWatcher( value:IExternalRunnerDependencyWatcher ):void {
-			var runner:IRunner;
-
-			_dependencyWatcher = value;
-
-			if ( children ) {
-				for ( var i:int=0; i<children.length; i++ ) {
-					runner = children[ i ] as IRunner;
-
-					if ( runner is IExternalDependencyRunner ) {
-						( runner as IExternalDependencyRunner ).dependencyWatcher = value;
-					}
-				}
-			}
-		}
-
-		/**
-		 *
-		 * Setter to indicate an error occured while attempting to load exteranl dependencies
-		 * for this test. It accepts a string to allow the creator of the external dependency
-		 * loader to pass a viable error string back to the user.
-		 *
-		 * @param value The error message
-		 *
-		 */
-		public function set externalDependencyError( value:String ):void {
-			//do nothing... suites don't actually have externalDependencies..
-			//they just need to pass this along
-		}
-
-		/**
-		 * Returns an array of non-static class feilds in the provided suite class.
-		 *
-		 * @param suite The class to check for non-static class fields.
-		 *
-		 * @return an array of non-static class feilds in the provided suite class.
-		 */
-		private static function getSuiteClasses( suite:Class ):Array {
-			var klassInfo:Klass = new Klass( suite );
-			var classRef:Class;
-			var classArray:Array = new Array();
-
-			var fields:Array = klassInfo.fields;
-
-			for ( var i:int=0; i<fields.length; i++ ) {
-				if ( !fields[ i ].isStatic ) {
-					try {
-						classRef = fields[i].type;
-						classArray.push( classRef );
-					} catch ( e:Error ) {
-						//Not sure who we should inform here yet. We will need someway of capturing the idea that this
-						//is a missing class, but not sure where or how to promote that up the chain....if it is even possible
-						//that we could have a missing class, given the way we are linking it
-					}
-				}
-			}
-
-
-			/***
-			  <variable name="two" type="suite.cases::TestTwo"/>
-			  <variable name="one" type="suite.cases::TestOne"/>
-
-  			SuiteClasses annotation= klass.getAnnotation(SuiteClasses.class);
-			if (annotation == null)
-				throw new InitializationError(String.format("class '%s' must have a SuiteClasses annotation", klass.getName()));
-			return annotation.value();
-			 **/
-			 //this needs to return the suiteclasses
-			 return classArray;
-		}
-
-		/**
-		 * This will either be passed a builder, followed by an array of classes... (when there is not root class)
-		 * Or it will be passed a root class and a builder.
-		 *
-		 * So, the two signatures we are supporting are:
-		 *
-		 * Suite( builder:IRunnerBuilder, classes:Array )
-		 * Suite( testClass:Class, builder:IRunnerBuilder )
-		 ***/
-		public function Suite( arg1:*, arg2:* ) {
-			var builder:IRunnerBuilder;
-			var testClass:Class;
-			var classArray:Array;
-			var runnners:Array;
-			var error:Boolean = false;
-
-			if ( arg1 is IRunnerBuilder && arg2 is Array ) {
-				builder = arg1 as IRunnerBuilder;
-				classArray = arg2 as Array;
-			} else if ( arg1 is Class && arg2 is IRunnerBuilder ) {
-				testClass = arg1 as Class;
-				builder = arg2 as IRunnerBuilder;
-				classArray = getSuiteClasses(testClass);
-			} else {
-				error = true;
-			}
-
-			super( testClass );
-
-			//Fix for FXU-51
-			//Tests to see if suite actually has viable children. If it does not, it is considered an
-			//initialization error
-			if ( !error && classArray.length > 0) { //a class is specified as a Suite, and has children
-				_runners = builder.runners( testClass, classArray );
-			} else if ( !error && classArray.length == 0 ) {
-				 throw new InitializationError("Empty test Suite!");
-			} else {
-				throw new Error("Incorrectly formed arguments passed to suite class");
-			}
-		}
-	}
+
+	/**
+ 	 * A Suite is an IRunner that contains test cases and other
+	 * Suites to be run during the course of a test run.  The Suite is
+	 * responsible for locating all non-static classes that it contains and obtaining an array of
+	 * IRunners for each child that was found in this manner.  The
+	 * IRunnerBuilder to be used to determine the runner for the child classes is
+	 * provided to the Suite during its instantiation.

+	 *
+	 * When a Suite goes to run a child, it is telling another IRunner to
+	 * begin running, supplying the IRunner with an IRunNotifier in
+	 * order to keep track of the test run.  An AsyncTestToken is also provided to
+	 * the child IRunner in order to notify the Suite when the child has
+	 * finished.

+	 *
+	 * In order to declare a class as a suite class, the class must include a [Suite]
+	 * and [RunWith("org.flexunit.runners.Suite")] metadata tag.  The
+	 * [RunWith] tag will instruct an IRunnerBuilder to use the
+	 * Suite IRunner for the class.

+	 *
+	 *

+	 * [Suite]
+	 * [RunWith("org.flexunit.runners.Suite")]
+	 * public class SuiteToRun
+	 * {
+	 * 	public var oneTest:OneTest; //A Test
+	 * 	public var anotherTest:AnotherTest; //Another Test
+	 * 	public var differentSuite:DifferentSuite; //A Suite
+	 * }
+	 *

+	 */
+	public class Suite extends ParentRunner implements IFilterable, IExternalDependencyRunner {
+		/**
+		 * @private
+		 */
+		private var _runners:Array;
+
+		/**
+		 * @private
+		 */
+		private var _dependencyWatcher:IExternalRunnerDependencyWatcher;
+
+		/**
+		 * @inheritDoc
+		 */
+		override public function pleaseStop():void {
+			super.pleaseStop();
+
+			if ( _runners ) {
+				for ( var i:int=0; i<_runners.length; i++ ) {
+					( _runners[ i ] as IRunner ).pleaseStop();
+				}
+			}
+		}
+
+		/**
+		 * @private
+		 */
+		private var descriptionIsCached:Boolean = false;
+
+		/**
+		 * @inheritDoc
+		 */
+		override public function get description():IDescription {
+			var desc:IDescription;
+
+			if ( descriptionIsCached ) {
+				desc = super.description;
+			} else {
+				if ( _dependencyWatcher && _dependencyWatcher.allDependenciesResolved ) {
+					//We are good to go, so let it cache this time and from now on we will defer to the super class' copy
+					descriptionIsCached = true;
+					desc = super.description;
+				} else {
+					//For some reason we still have unresolved dependencies.. most likey, we have external dependencies
+					//but we are being filtered, so, just keep generating new descriptions when asked as we could change
+					desc = generateDescription();
+				}
+			}
+
+			return desc;
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		override protected function get children():Array {
+			return _runners;
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		override protected function describeChild( child:* ):IDescription {
+			return IRunner( child ).description;
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		override protected function runChild( child:*, notifier:IRunNotifier, childRunnerToken:AsyncTestToken ):void {
+			if ( stopRequested ) {
+				childRunnerToken.sendResult( new StoppedByUserException() );
+				return;
+			}
+
+			IRunner( child ).run( notifier, childRunnerToken );
+		}
+
+		/**
+		 * Setter for a dependency watcher. This is a class that implements IExternalRunnerDependencyWatcher
+		 * and watches for any external dependencies (such as loading data) are finalized before execution of
+		 * tests is allowed to commence.
+		 *
+		 * @param value An implementation of IExternalRunnerDependencyWatcher
+		 */
+		public function set dependencyWatcher( value:IExternalRunnerDependencyWatcher ):void {
+			var runner:IRunner;
+
+			_dependencyWatcher = value;
+
+			if ( children ) {
+				for ( var i:int=0; i<children.length; i++ ) {
+					runner = children[ i ] as IRunner;
+
+					if ( runner is IExternalDependencyRunner ) {
+						( runner as IExternalDependencyRunner ).dependencyWatcher = value;
+					}
+				}
+			}
+		}
+
+		/**
+		 *
+		 * Setter to indicate an error occured while attempting to load exteranl dependencies
+		 * for this test. It accepts a string to allow the creator of the external dependency
+		 * loader to pass a viable error string back to the user.
+		 *
+		 * @param value The error message
+		 *
+		 */
+		public function set externalDependencyError( value:String ):void {
+			//do nothing... suites don't actually have externalDependencies..
+			//they just need to pass this along
+		}
+
+		/**
+		 * Returns an array of non-static class feilds in the provided suite class.
+		 *
+		 * @param suite The class to check for non-static class fields.
+		 *
+		 * @return an array of non-static class feilds in the provided suite class.
+		 */
+		private static function getSuiteClasses( suite:Class ):Array {
+			var klassInfo:Klass = new Klass( suite );
+			var classRef:Class;
+			var classArray:Array = new Array();
+
+			var fields:Array = klassInfo.fields;
+
+			for ( var i:int=0; i<fields.length; i++ ) {
+				if ( !fields[ i ].isStatic ) {
+					try {
+						classRef = fields[i].type;
+						classArray.push( classRef );
+					} catch ( e:Error ) {
+						//Not sure who we should inform here yet. We will need someway of capturing the idea that this
+						//is a missing class, but not sure where or how to promote that up the chain....if it is even possible
+						//that we could have a missing class, given the way we are linking it
+					}
+				}
+			}
+
+
+			/***
+			  <variable name="two" type="suite.cases::TestTwo"/>
+			  <variable name="one" type="suite.cases::TestOne"/>
+
+  			SuiteClasses annotation= klass.getAnnotation(SuiteClasses.class);
+			if (annotation == null)
+				throw new InitializationError(String.format("class '%s' must have a SuiteClasses annotation", klass.getName()));
+			return annotation.value();
+			 **/
+			 //this needs to return the suiteclasses
+			 return classArray;
+		}
+
+		/**
+		 * This will either be passed a builder, followed by an array of classes... (when there is not root class)
+		 * Or it will be passed a root class and a builder.
+		 *
+		 * So, the two signatures we are supporting are:
+		 *
+		 * Suite( builder:IRunnerBuilder, classes:Array )
+		 * Suite( testClass:Class, builder:IRunnerBuilder )
+		 ***/
+		public function Suite( arg1:*, arg2:* ) {
+			var builder:IRunnerBuilder;
+			var testClass:Class;
+			var classArray:Array;
+			var runnners:Array;
+			var error:Boolean = false;
+
+			if ( arg1 is IRunnerBuilder && arg2 is Array ) {
+				builder = arg1 as IRunnerBuilder;
+				classArray = arg2 as Array;
+			} else if ( arg1 is Class && arg2 is IRunnerBuilder ) {
+				testClass = arg1 as Class;
+				builder = arg2 as IRunnerBuilder;
+				classArray = getSuiteClasses(testClass);
+			} else {
+				error = true;
+			}
+
+			super( testClass );
+
+			//Fix for FXU-51
+			//Tests to see if suite actually has viable children. If it does not, it is considered an
+			//initialization error
+			if ( !error && classArray.length > 0) { //a class is specified as a Suite, and has children
+				_runners = builder.runners( testClass, classArray );
+			} else if ( !error && classArray.length == 0 ) {
+				 throw new InitializationError("Empty test Suite!");
+			} else {
+				throw new Error("Incorrectly formed arguments passed to suite class");
+			}
+		}
+	}
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 8313
Author:   srahim@adobe.com
Date:     2009-06-26T17:36:11.687304Z

Log Message:
-----------
ASDoc updates

QE Notes: None
Doc Notes: None
Bugs: -
Checkintests: passed

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/TextArea.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Spinner.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Scroller.as</path>

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

--- frameworks/projects/spark/src/spark/components/Spinner.as
+++ frameworks/projects/spark/src/spark/components/Spinner.as
@@ -102,7 +102,28 @@
  *
  *  Therefore the scale is {-1,0,3,6,9,10}.
  *
- *  @see mx.components.NumericStepper
+ *  @mxml
+ *
+ *
The <Spinner> tag inherits all of the tag
+ *  attributes of its superclass and adds the following tag attributes:

+ *
+ *

+ *  <Spinner
+ *    Properties
+ *    allowValueWrap="false"
+ *
+ *    Events
+ *    change="No default"
+ *
+ *    Styles
+ *    focusColor=""
+ *    symbolColor=""
+ *
+ *  />
+ *

+ *
+ *  @see spark.components.NumericStepper
+ *  @see spark.skins.spark.SpinnerSkin
  *
  *  @includeExample examples/SpinnerExample.mxml
  *


FLEX-33263.  FocusOut in datagrid causes RTE if target.parent is null.  Commit patch submitted by João Fernandes.

git-svn-id: 7d913817b0a978d84de757191e4bce372605a781@1410394 13f79535-47bb-0310-9956-ffa450edef68

--- frameworks/projects/mx/src/mx/controls/DataGrid.as
+++ frameworks/projects/mx/src/mx/controls/DataGrid.as
@@ -5014,7 +5014,7 @@
             var target:DisplayObject = DisplayObject(event.relatedObject);
             while (target && target != this)
             {
-                if (target is IListItemRenderer && target.parent.parent == this && target.parent is ListBaseContentHolder)
+                if (target is IListItemRenderer && target.parent is ListBaseContentHolder && target.parent.parent == this)
                 {
                     if (target.visible)
                     {


fixed bug where point geometries weren't being probed/selected

Change-Id: I1e1ec6ed39dc1caf9e5e768885ba01bd9b20b01a

--- WeaveUI/src/weave/utils/SpatialIndex.as
+++ WeaveUI/src/weave/utils/SpatialIndex.as
@@ -235,12 +235,10 @@
 		 */
 		public function getKeysOverlappingBounds(bounds:IBounds2D, minImportance:Number = 0):Array
 		{
-			var keys:Array;
 			// if this index isn't for an IPlotterWithGeometries OR the user wants legacy probing
+			var keys:Array = getKeysOverlappingCollectiveBounds(bounds);
 			if (_keyToGeometriesMap == null || !Weave.properties.enableGeometryProbing.value == true)
-				return getKeysOverlappingCollectiveBounds(bounds, 0);
-			else
-				keys = getKeysOverlappingCollectiveBounds(bounds, minImportance);
+				return keys; // stop now

 			// if there are 0 keys
 			if (keys.length == 0)
@@ -281,9 +279,7 @@
 							// if a polygon, check for polygon overlap
 							if (genGeomIsPoly)
 							{
-								if (ComputationalGeometryUtils.polygonOverlapsPolygon(
-									_tempBoundsPolygon, /* bounds polygon */
-									part))
+								if (ComputationalGeometryUtils.polygonOverlapsPolygon(_tempBoundsPolygon, part))
 								{
 									result.push(key);
 									continue keyLoop;
@@ -291,10 +287,10 @@
 							}
 							else if (genGeomIsLine)
 							{
-								if (ComputationalGeometryUtils.polygonOverlapsLine(
-									_tempBoundsPolygon, /* bounds polygon */
-									part[0].x, part[0].y,
-									part[1].x, part[1].y))
+								if (	ComputationalGeometryUtils.polygonOverlapsLine(
+											_tempBoundsPolygon, /* bounds polygon */
+											part[0].x, part[0].y,
+											part[1].x, part[1].y	))
 								{
 									result.push(key);
 									continue keyLoop;
@@ -302,9 +298,7 @@
 							}
 							else // point
 							{
-								if (ComputationalGeometryUtils.polygonOverlapsPoint(
-									_tempBoundsPolygon, /* bounds polygon */
-									part[0].x, part[0].x))
+								if (ComputationalGeometryUtils.polygonOverlapsPoint(_tempBoundsPolygon, part[0].x, part[0].y))
 								{
 									result.push(key);
 									continue keyLoop;
@@ -323,9 +317,7 @@

 						if (simpleGeomIsPoly)// a polygon, check for polygon overlap
 						{
-							if (ComputationalGeometryUtils.polygonOverlapsPolygon(
-								_tempBoundsPolygon, /* bounds polygon */
-								_tempGeometryPolygon /* vertices polygon */ ))
+							if (ComputationalGeometryUtils.polygonOverlapsPolygon(_tempBoundsPolygon, _tempGeometryPolygon))
 							{
 								result.push(key);
 								continue keyLoop;
@@ -344,9 +336,7 @@
 						}
 						else
 						{
-							if (ComputationalGeometryUtils.polygonOverlapsPoint(
-								_tempBoundsPolygon, /* polygon */
-								vertices[0].x, vertices[0].y /* point */))
+							if (ComputationalGeometryUtils.polygonOverlapsPoint(_tempBoundsPolygon, vertices[0].x, vertices[0].y))
 							{
 								result.push(key);
 								continue keyLoop;


added temp hack to get things to display

--- WeaveJS/src/WeaveJS.as
+++ WeaveJS/src/WeaveJS.as
@@ -6,6 +6,7 @@
 */
 package
 {
+	import weavejs.data.ColumnUtils;
 	import weavejs.path.WeavePath;
 	import weavejs.util.JS;

@@ -21,6 +22,12 @@
 		public function start():void
 		{
 			var window:Object = JS.global;
+
+			// TEMPORARY HACK - omit keySet filter
+			var joinColumns:Function = ColumnUtils['joinColumns'];
+			ColumnUtils['joinColumns'] = function(columns:Array, dataType:Object = null, allowMissingData:Boolean = false):Array {
+				return joinColumns.call(ColumnUtils, columns, dataType, allowMissingData);
+			};

 			if (window.opener && window.opener[WEAVE_EXTERNAL_TOOLS] && window.opener[WEAVE_EXTERNAL_TOOLS][window.name])
 			{


Transferred from the Adobe Open Source Subversion Repository

Revision: 5770
Author:   gruehle@adobe.com
Date:     2009-03-30T20:58:54.529722Z

Log Message:
-----------
Add [Alternative] metadata to the Halo components that have a Gumbo replacement.

Bugs: SDK-20190
QA notes: none
Doc notes: Additional ASDoc comments added for many of the classes. These should all be reviewed.
Reviewer: Chet

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TileList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Zoom.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ToggleButtonBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/HBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ViewStack.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/RadioButtonGroup.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ControlBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Cubic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VSlider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Fade.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/RemoveChildAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/TweenEffect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextArea.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeRight.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Sine.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/VBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Glow.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/CheckBox.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/effects/easing/Quartic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Box.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeLeft.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/ApplicationControlBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Quintic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Tween.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Tile.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/easing/Quadratic.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Panel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/TextInput.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/AddChildAction.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/frameworks/projects/framework/src/mx/effects/WipeDown.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Rotate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/SetPropertyAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/List.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Canvas.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Resize.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Blur.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/LinkBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Move.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Text.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/HorizontalList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/WipeUp.as</path>

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

--- frameworks/projects/mx/src/mx/controls/TextInput.as
+++ frameworks/projects/mx/src/mx/controls/TextInput.as
@@ -191,6 +191,8 @@
 [IconFile("TextInput.png")]

 [ResourceBundle("controls")]
+
+[Alternative(replacement="spark.components.TextInput", since="4.0")]

 /**
  *  The TextInput control is a single-line text field


Transferred from the Adobe Open Source Subversion Repository

Revision: 2506
Author:   jimurphy@adobe.com
Date:     2008-07-16T13:25:03.893431Z

Log Message:
-----------
Merged 3.0.x revisions [2417,2458,2504] -> trunk
-I also manually updated modules/compiler/src/java/flex2/tools/oem/internal/LinkerConfiguration.java to implement flex2.linker.LinkerConfiguration due to a name change in trunk
-removed player 9 stuff

Modified Paths:
--------------
<path kind="file" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework/.project" copyfrom-rev="2504" action="R">/flex/sdk/trunk/development/eclipse/flex/airframework/.project</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/DependencyChecker.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/IResourceManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/dragClasses/DragProxy.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework/.actionScriptProperties" copyfrom-rev="2504" action="R">/flex/sdk/trunk/development/eclipse/flex/airframework/.actionScriptProperties</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/air-config.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/Channel.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="A">/flex/sdk/trunk/in/player/mac/Install Flash Player 10 UB.dmg</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/tools/oem/internal/LinkerConfiguration.java</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework/.settings/org.eclipse.core.resources.prefs" copyfrom-rev="2504" action="R">/flex/sdk/trunk/development/eclipse/flex/airframework/.settings/org.eclipse.core.resources.prefs</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/FlexModuleFactory.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/UIComponent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/SWFLoader.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework/.flexLibProperties" copyfrom-rev="2504" action="R">/flex/sdk/trunk/development/eclipse/flex/airframework/.flexLibProperties</path>
<path kind="file" action="D">/flex/sdk/trunk/in/player/lnx/install_flash_player_9_linux.tar.gz</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/LibrariesNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/DependencyNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/xml/XMLDecoder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/scrollClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/containers/Panel.as</path>
<path kind="file" action="D">/flex/sdk/trunk/in/player/win/Install Flash Player 9 Plugin.exe</path>
<path kind="file" action="D">/flex/sdk/trunk/in/player/mac/Install Flash Player 9 UB.dmg</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/MarshalMouseEvent.as</path>
<path kind="file" copyfrom-path="/flex/sdk/branches/3.0.x/frameworks/projects/framework/src/mx/resources/LocaleSorter.as" copyfrom-rev="2504" action="A">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/LocaleSorter.as</path>
<path kind="file" action="D">/flex/sdk/trunk/in/player/win/Install Flash Player 9 ActiveX.exe</path>
<path kind="dir" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework" copyfrom-rev="2504" action="A">/flex/sdk/trunk/development/eclipse/flex/airframework</path>
<path kind="file" action="M">/flex/sdk/trunk/build.xml</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/controls/scrollClasses/ScrollThumb.as</path>
<path kind="file" action="A">/flex/sdk/trunk/in/player/win/Install Flash Player 10 Plugin.exe</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/DefNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManagerImpl.as</path>
<path kind="file" action="A">/flex/sdk/trunk/in/player/win/Install Flash Player 10 ActiveX.exe</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/LibraryNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/ScriptNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/modules/asc/src/java/macromedia/asc/util/ContextStatics.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/CursorManagerImpl.as</path>
<path kind="file" action="M">/flex/sdk/trunk/tools/dependencychecker/flex/tools/dependencychecker/nodes/DepNode.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/ChannelSet.as</path>
<path kind="dir" copyfrom-path="/flex/sdk/branches/3.0.x/development/eclipse/flex/airframework/.settings" copyfrom-rev="2504" action="R">/flex/sdk/trunk/development/eclipse/flex/airframework/.settings</path>
<path kind="file" action="D">/flex/sdk/trunk/in/player/10/lnx/Flash Player.app.zip</path>
<path kind="dir" action="D">/flex/sdk/trunk/frameworks/libs/player/9</path>

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

--- frameworks/projects/rpc/src/mx/messaging/Channel.as
+++ frameworks/projects/rpc/src/mx/messaging/Channel.as
@@ -499,9 +499,6 @@
 	    {
 	        var event:PropertyChangeEvent = PropertyChangeEvent.createUpdateEvent(this, "authenticated", _authenticated, value);
 	        _authenticated = value;
-
-	        if (!_authenticated)
-	            credentials = null;

 	        var cs:ChannelSet;
 	        for (var i:int = 0; i < _channelSets.length; i++)


Transferred from the Adobe Open Source Subversion Repository

Revision: 3501
Author:   jvroom@adobe.com
Date:     2008-10-07T00:42:26.338871Z

Log Message:
-----------
Adding the new CallResponder component.   This is best used from MXML to implement
a specific invocation of a specific RPC service operation.  It separates the use of the
RPC operation from its definition.

QE: New class (and MXML component)
Docs: Yes - see the asdoc for info.
Checkintests: pass
Reviewer: Pete, Seth, Ed, Sameer

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/manifest.xml</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/CallResponder.as</path>

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

--- frameworks/projects/rpc/src/mx/rpc/CallResponder.as
+++ frameworks/projects/rpc/src/mx/rpc/CallResponder.as
@@ -0,0 +1,120 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2005-2008 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package mx.rpc
+{
+
+import flash.events.EventDispatcher;
+
+import mx.rpc.IResponder;
+import mx.rpc.events.ResultEvent;
+import mx.rpc.events.FaultEvent;
+
+import mx.utils.ArrayUtil;
+
+[Event(name="result", type="mx.rpc.events.ResultEvent")]
+[Event(name="fault", type="mx.rpc.events.FaultEvent")]
+
+/**
+ *  This component helps you manage the results for asynchronous calls made from
+ *  RPC based services, typically from MXML components.  While each individual service
+ *  and operation dispatches result and fault events, it is common to need to use the
+ *  same operation in different parts of your application.  Using one event listener
+ *  or lastResult value across the entire application can be awkward.  Rather than creating
+ *  two service components which refer to the same service, you can use a simple lightweight
+ *  CallResponder to manage the event listeners and lastResult value for a specific invocation
+ *  of a service.
+ *

+ *  You set the token property of this component to the AsyncToken returned by the
+ *  service.  You can then add event listeners on this component instead of having to
+ *  add them to each AsyncToken returned.   This component also maintains the
+ *  lastResult property which is a copy of the value returned by the last successful
+ *  result event dispatched by a token monitored by this service.  Though you can
+ *  bind to either the callResponder.token.result or
+ *  callResponder.lastResult, the latter will be preserved while a second
+ *  call to the same service is in progress while the former will be reset as soon
+ *  as a new service invocation is started.
+ *

+ */
+public class CallResponder extends EventDispatcher implements IResponder
+{
+    private var _token:AsyncToken;
+
+    [Bindable]
+    /**
+     * Each CallResponder monitors dispatches result and fault events received
+     * from a single token.  This property value specifies that token.  You typically
+     * set this to the
+     */
+    public function set token(t:AsyncToken):void
+    {
+        if (_token != null)
+        {
+            var resps:Array = _token.responders;
+            var ix:int = ArrayUtil.getItemIndex(this, resps);
+            if (ix != -1)
+                resps.splice(ix, 1);
+        }
+        if (t != null)
+            t.addResponder(this);
+        _token = t;
+    }
+
+    public function get token():AsyncToken
+    {
+        return _token;
+    }
+
+    /**
+     *  This method is called by the AsyncToken when it wants to deliver a
+     *  ResultEvent to the CallResponder.  You do not call
+     *  this method directly.
+     *
+     *  @param  data the ResultEvent delivered by the AsyncToken
+     */
+    public function result(data:Object):void
+    {
+        var resultEvent:ResultEvent = ResultEvent(data);
+        lastResult = resultEvent.result;
+
+        dispatchEvent(resultEvent);
+    }
+
+    /**
+     *  This method is called by the AsyncToken when it wants to deliver a
+     *  FaultEvent to the CallResponder.  You do not call
+     *  this method directly.
+     *
+     *  @param  data the FaultEvent delivered by the AsyncToken
+     */
+    public function fault(data:Object):void
+    {
+        var faultEvent:FaultEvent = FaultEvent(data);
+
+        // Not clearing lastResult here... this will allow developers to keep using
+        // lastResult even in the event of a fault.
+        dispatchEvent(faultEvent);
+    }
+
+    [Bindable]
+    /**
+     *  This property stores the result property of the token each time it
+     *  delivers a successful result.  You can bind to or access this property
+     *  instead of the token.result property to keep your code from seeing that
+     *  value cleared out on the second and subsequent call to a particular service
+     *  method.  Additionally, if a fault occurs this value will still be set to
+     *  the last successful result returned by a token monitored by this CallResponder.
+     */
+    public var lastResult:Object;
+
+}
+
+}


Transferred from the Adobe Open Source Subversion Repository

Revision: 9957
Author:   smgilson@adobe.com
Date:     2009-09-03T13:41:49.385680Z

Log Message:
-----------
Update ASDoc on mx.soap.Operation xmlSpecialCharsFilter and AbstractWebService.xmlSpecialCharsFilter

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/soap/Operation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/soap/AbstractWebService.as</path>

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

--- frameworks/projects/rpc/src/mx/rpc/soap/Operation.as
+++ frameworks/projects/rpc/src/mx/rpc/soap/Operation.as
@@ -545,6 +545,19 @@

     private var _xmlSpecialCharsFilter:Function;

+    /**
+     *  Specifies a custom function used to escape XML special characters before
+     *  encoding any simple content.
+     *  Valid for all operations on the web service unless specifically overwritten
+     *  on the operation level.
+     *  If no function is provided, the defaults is whatever is set by the
+     *  particular implementation of IXMLEncoder.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 9
+     *  @playerversion AIR 1.1
+     *  @productversion Flex 3
+     */
     public function get xmlSpecialCharsFilter():Function
     {
         if (_xmlSpecialCharsFilter != null)
@@ -553,6 +566,9 @@
         return AbstractWebService(service).xmlSpecialCharsFilter;
     }

+    /**
+     *  @private
+     */
     public function set xmlSpecialCharsFilter(func:Function):void
     {
         _xmlSpecialCharsFilter = func;
@@ -931,8 +947,8 @@
      */
     override mx_internal function processResult(message:IMessage, token:AsyncToken):Boolean
     {
-		if (processSOAP(message, token))
-    	{
+        if (processSOAP(message, token))
+        {
             if (webService.convertResultHandler != null)
                 _result = webService.convertResultHandler(_result, this);
             return true;


Transferred from the Adobe Open Source Subversion Repository

Revision: 9287
Author:   chaase@adobe.com
Date:     2009-08-13T22:53:43.963266Z

Log Message:
-----------
Fixes bug with shader-transition effects (AnimateTransitionShader, Wipe, and CrossFade) when acting on targets that either have filters or are inside a hierarchy with filters. Fix was to capture the bitmap snapshot of the target without any of its own filters applied and to then use the ShaderFilter in conjunction with the target's filters during the animation.

QE notes: Probably need more tests in this area, now that we handle it
Doc notes: none
Bugs: sdk-20250
Reviewer: Jason
Tests run: Checkintests, Mustella (spark/effects/[AnimateTransitionShader|Wipe|CrossFade])
Is noteworthy for integration: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/supportClasses/AnimateTransitionShaderInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/AnimateTransitionShader.as</path>

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

--- frameworks/projects/spark/src/spark/effects/supportClasses/AnimateTransitionShaderInstance.as
+++ frameworks/projects/spark/src/spark/effects/supportClasses/AnimateTransitionShaderInstance.as
@@ -162,14 +162,21 @@
      */
     protected var shader:Shader;

-
     /**
      * @private
      * Cache the filters set on the target when the effect begins.
      * We will assign our own filters during the effect, so we should
      * restore the old filters when we're done
      */
-    private var oldFilters:Array;
+    private var previousFilters:Array;
+
+    /**
+     * @private
+     * The filters that we will assign during the animation. This is
+     * a concatenation of our shaderFilter plus any filters that were
+     * already on the target.
+     */
+    private var previousPlusShaderFilters:Array;

     //--------------------------------------------------------------------------
     //
@@ -284,11 +291,18 @@
      */
     private function getSnapshot(target:Object):BitmapData
     {
+        if (!(target is GraphicElement || target is IUIComponent))
+            throw new Error(resourceManager.getString("sparkEffects", "cannotOperateOn"));
+        var bmData:BitmapData;
+        var tempFilters:Array = target.filters;
+        target.filters = [];
         if (target is GraphicElement)
-            return GraphicElement(target).captureBitmapData(true, 0, false);
-        else if (!(target is IUIComponent))
-            throw new Error(resourceManager.getString("sparkEffects", "cannotOperateOn"));
-        return BitmapUtil.getSnapshot(IUIComponent(target));
+            bmData = GraphicElement(target).captureBitmapData(true, 0, false);
+        else
+            bmData = BitmapUtil.getSnapshot(IUIComponent(target));
+        target.filters = tempFilters;
+
+        return bmData;
     }
     /**
      * Unlike Animate's setValue we assign the new value to the filter
@@ -300,7 +314,7 @@
     override protected function setValue(property:String, value:Object):void
     {
         shader.data.progress.value = [value];
-        target.filters = [shaderFilter];
+        target.filters = previousPlusShaderFilters;
     }

     /**
@@ -309,14 +323,9 @@
     override public function animationStart(animation:Animation):void
     {
         super.animationStart(animation);
-        // Note that we don't want the old filters active on the target
-        // during the animation; these filters will already be accounted
-        // for when we take a bitmap snapshot of the object. Applying
-        // the same filters during the animation will effectively double
-        // their impact. So we simply record what the filters are, so that
-        // we can replace them when we're done, and then use only our
-        // shader filter during the animation.
-        oldFilters  = target.filters;
+        previousFilters = target.filters;
+        previousPlusShaderFilters = [shaderFilter].concat(previousFilters);
+        target.filters = previousPlusShaderFilters;
     }

     /**
@@ -326,8 +335,9 @@
      */
     private function cleanup():void
     {
-        target.filters = oldFilters;
-        oldFilters = null;
+        target.filters = previousFilters;
+        previousFilters = null;
+        previousPlusShaderFilters = null;
         if (disposeFrom)
             bitmapFrom.dispose();
         if (disposeTo)