Transferred from the Adobe Open Source Subversion Repository

Revision: 1098
Author:   jimurphy@adobe.com
Date:     2008-04-03T21:50:39.896200Z

Log Message:
-----------
Merge 3.0.x -- 362:394, 427:429, 603:608, 644:645, 651:663, 672:676, 755:756, 763:766, 785:790, 812:814, 854:861, 862:866, 866:933,971:1009, 1050:1056 --> trunk

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileListItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/treeClasses/DefaultDataDescriptor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/VRule.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/AsyncRequest.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/IList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/LayoutManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IRepeaterClient.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/videoClasses/VideoError.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/ObjectProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/messages/HTTPRequestMessage.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/Locale.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/effectClasses/ParallelInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/Responder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/errors/MessageSerializationError.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/messages/SOAPMessage.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/IBrowserManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ComponentDescriptor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/events/FaultEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridColumn.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/IViewCursor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/soap/AbstractWebService.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/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="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/DragManager.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/menuClasses/IMenuItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/MessageResponder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/ILayoutManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Spacer.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/rpc/src/mx/rpc/Fault.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/XMLListCollection.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectTargetFilter.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/SliderEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/AsyncToken.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/core/Window.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/resources/ResourceManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/ScrollEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/http/mxml/HTTPService.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/videoClasses/CuePointManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/CrossDomainRSLItem.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/events/NumericStepperEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/BrowserManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/events/ChannelFaultEvent.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/collections/CursorBookmark.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/xml/IXMLEncoder.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/http/HTTPService.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/events/WSDLLoadEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ComboBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/soap/LoadEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/collections/ListCollectionView.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/FlexClient.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/SubscriptionInfo.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/DescribeTypeCache.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/logging/LogLogger.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/FocusManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/MessageAgent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/build_framework.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/managers/WindowedSystemManager.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/events/HeaderEvent.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/build.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListItemRenderer.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/dataGridClasses/DataGridDragProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/DownloadProgressBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/treeClasses/ITreeDataDescriptor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/rpc/remoting/RemoteObject.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/TileBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/listClasses/ListItemDragProxy.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/ChannelSet.as</path>

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

--- frameworks/projects/mx/src/mx/controls/Label.as
+++ frameworks/projects/mx/src/mx/controls/Label.as
@@ -318,6 +318,9 @@
     public function Label()
     {
         super();
+
+        // this is so the UITextField we contain can be read by a screen-reader
+        tabChildren = true;
     }

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


Transferred from the Adobe Open Source Subversion Repository

Revision: 4745
Author:   gruehle@adobe.com
Date:     2009-01-29T23:16:30.487712Z

Log Message:
-----------
Style changes on Halo containers with a contentPane were not being picked up by children.

QE Notes: This was a bug in 3.0 too.
Doc Notes: None
Bugs: SDK-18459
Reviewer: Pete

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/Container.as

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

--- frameworks/projects/mx/src/mx/core/Container.as
+++ frameworks/projects/mx/src/mx/core/Container.as
@@ -3246,7 +3246,7 @@
             {
                 var child:DisplayObject = getChildAt(i);

-                if (recursive && child is UIComponent)
+                if (child is UIComponent)
                 {
                     // Does this object already have a proto chain?  If not,
                     // there's no need to regenerate a new one.


fixed bug in DataTableTool backwards compatibility

--- WeaveUI/src/_InitializeWeaveUI.as
+++ WeaveUI/src/_InitializeWeaveUI.as
@@ -231,7 +231,7 @@
 			ClassUtils.registerDeprecatedClass("EmptyTool", CustomTool);
 			ClassUtils.registerDeprecatedClass("WMSPlotter2", WMSPlotter);
 			ClassUtils.registerDeprecatedClass("SessionedTextArea", SessionedTextBox);
-			ClassUtils.registerDeprecatedClass("DataTableTool", AdvancedTableTool);
+			ClassUtils.registerDeprecatedClass("weave.visualization.tools::DataTableTool", AdvancedTableTool);
 		}();
 	}
 }


バイリニアサンプリングでサンプリング

バイリニアサンプリングでサンプリング

--- src/TiltFilter.as
+++ src/TiltFilter.as
@@ -43,66 +43,41 @@

 		private var _width:uint;
 		private var _height:uint;
-		/*
-  ([x]+1-x) ([y]+1-y) Src([x],   [y])
-+ ([x]+1-x) (y-[y])   Src([x]+1, [y])
-+ (x-[x])   ([y]+1-y) Src([x],   [y]+1)
-+ (x-[x])   (y-[y])   Src([x]+1, [y]+1)
-w11 = [x]+1-x,  w12 = [y]+1-y
-w21 = x-[x]  ,  w22 = y-[y]
-  w11 * w12 * Src([x],   [y]  )
-+ w11 * w22 * Src([x]+1, [y]  )
-+ w21 * w12 * Src([x],   [y]+1)
-+ w21 * w22 * Src([x]+1, [y]+1)
-http://imagingsolution.net/imaging/interpolation/
-http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation
-		 */
-		protected function average_color(rgb0:uint, rgb1:uint, w0:Number):uint
+
+		// http://en.wikipedia.org/wiki/Nearest-neighbor_interpolation
+		static protected function RGB(weight:Number, rgb:uint):Object
 		{
-			var w1:Number = 1 - w0;
-			var r0:uint = rgb0 >> 16, g0:uint = (rgb0 >> 8) & 255, b0:uint = rgb0 & 255;
-			var r1:uint = rgb1 >> 16, g1:uint = (rgb1 >> 8) & 255, b1:uint = rgb1 & 255;
-			var r:Number = r0 * w0 + r1 * w1;
-			var g:Number = g0 * w0 + g1 * w1;
-			var b:Number = b0 * w0 + b1 * w1;
-			var c:uint = (r << 16) | (g << 8) | b;
-			return c;
+			return {
+				r: (rgb >> 16) * weight,
+				g: ((rgb >> 8) & 255) * weight,
+				b: (rgb & 255) * weight
+			};
 		}
-		protected function sampler(source:BitmapData, x0:Number, y0:Number, x1:Number, y1:Number, w0:Number):uint
+		static protected function RGB_Add(v1:Object, v2:Object):void
 		{
-			var rgb0:uint = source.getPixel(x0 % _width, y0);
-			var rgb1:uint = source.getPixel(x1 % _width, y1);
-			return average_color(rgb0, rgb1, w0);
+			v1.r += v2.r;
+			v1.g += v2.g;
+			v1.b += v2.b;
+		}
+		static protected function RGB_dec(v:Object):uint
+		{
+			return ((v.r & 255) << 16) | ((v.g & 255) << 8) | (v.b & 255);
 		}

 		protected function pixelAtThetaPi(source:BitmapData, theta:Number, phi:Number):uint
 		{
-			var x0:Number = phi * _width / (2 * Math.PI) + _width;
-			var y0:Number = _height / 2 - theta * _height / Math.PI;
+			var x:Number = (phi * _width / (2 * Math.PI) + _width) % _width;
+			var y:Number = _height / 2 - theta * _height / Math.PI;
+			var ix:Number = uint(x), iy:Number = uint(y);
+			var ix1:Number = (ix + 1) % _width;
+			var ax:Number = x - ix,  ay:Number = y - iy;

-			var rx:Number = x0 - Math.floor(x0);
-			var x1:Number, wx:Number;
-			if (rx < 0.5) {
-				x1 = x0 - 1;
-				wx = 0.5 + rx;
-			} else {
-				x1 = x0 + 1;
-				wx = 1.5 - rx;
-			}
-			var cu:uint = sampler(source, x0, y0, x1, y0, wx);
+			var color:Object = RGB((1 - ax) * (1 - ay), source.getPixel(ix,  iy    ));
+			RGB_Add(color,     RGB(     ax  * (1 - ay), source.getPixel(ix1, iy    )));
+			RGB_Add(color,     RGB((1 - ax) *      ay , source.getPixel(ix,  iy + 1)));
+			RGB_Add(color,     RGB(     ax  *      ay , source.getPixel(ix1, iy + 1)));

-			var ry:Number = y0 - Math.floor(y0);
-			var y1:Number, wy:Number;
-			if (ry < 0.5) {
-				y1 = y0 - 1;
-				wy = 0.5 + ry;
-			} else {
-				y1 = y0 + 1;
-				wy = 1.5 - ry;
-			}
-			var cd:uint = sampler(source, x0, y1, x1, y1, wx);
-
-			return average_color(cu, cd, wy);
+			return RGB_dec(color);
 		}

 		public function apply(source:BitmapData):BitmapData


Renamed parameter from FLASH_HAS_JAVASCRIPT_ACCESS to FLASH_HAS_SCRIPT_ACCESS

--- snowplow-as3-tracker/src/com/snowplowanalytics/snowplow/tracker/Parameter.as
+++ snowplow-as3-tracker/src/com/snowplowanalytics/snowplow/tracker/Parameter.as
@@ -81,7 +81,7 @@
 		public static const FLASH_STAGE_SIZE:String = "fl_sz";
 		public static const FLASH_IS_DEBUGGER:String = "fl_dbg";
 		public static const FLASH_HAS_LOCAL_STORAGE:String = "fl_ls";
-		public static const FLASH_HAS_JAVASCRIPT_ACCESS:String = "fl_ja";
+		public static const FLASH_HAS_SCRIPT_ACCESS:String = "fl_sa";

 	}
 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 9857
Author:   jimurphy@adobe.com
Date:     2009-09-01T01:02:58.854673Z

Log Message:
-----------
Merged 3.x revisions 9543,9658,9748,9837 -> trunk

checkintests: pass

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/managers/SystemManager.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/preloaders/Preloader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/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>
<path kind="file" action="M">/flex/sdk/trunk/modules/compiler/src/java/flex2/compiler/util/OrderedProperties.java</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/FlexModuleFactory.as</path>

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

--- frameworks/projects/rpc/src/mx/rpc/soap/Operation.as
+++ frameworks/projects/rpc/src/mx/rpc/soap/Operation.as
@@ -754,6 +754,9 @@
         if (service != null)
             service.initialize();

+        if (webService.convertParametersHandler != null)
+            args = webService.convertParametersHandler(args);
+
         if (operationManager != null)
             return operationManager(args);

@@ -928,7 +931,13 @@
      */
     override mx_internal function processResult(message:IMessage, token:AsyncToken):Boolean
     {
-        return processSOAP(message, token);
+		if (processSOAP(message, token))
+    	{
+            if (webService.convertResultHandler != null)
+                _result = webService.convertResultHandler(_result, this);
+            return true;
+        }
+        return false;
     }

     /**


Add clone on vector4

Add clone on vector4

--- src/aerys/minko/type/math/Vector4.as
+++ src/aerys/minko/type/math/Vector4.as
@@ -354,5 +354,10 @@
 			_locked = false;
 			_changed.execute(this, null);
 		}
+
+		public function clone() : Vector4
+		{
+			return new Vector4(_vector.x, _vector.y, _vector.z, _vector.w);
+		}
 	}
 }


Remove needless import.

Remove needless import.

--- unittests/TestDisjunctiveSyllogism.as
+++ unittests/TestDisjunctiveSyllogism.as
@@ -4,7 +4,7 @@
 	{
 		import logic.DisjunctiveSyllogism;

-		import mx.controls.Alert;
+

 		import org.flexunit.Assert;
 		private var djs:DisjunctiveSyllogism;


We don't need the application to be passed-in, it's always
statically accessible.

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

--- src/as/com/threerings/presents/client/Client.as
+++ src/as/com/threerings/presents/client/Client.as
@@ -28,10 +28,9 @@

     private static const log :Log = Log.getLog(Client);

-    public function Client (creds :Credentials, app :Application)
+    public function Client (creds :Credentials)
     {
         _creds = creds;
-        _app = app;
     }

     /**
@@ -98,7 +97,7 @@

     public function callLater (fn :Function, args :Array = null) :void
     {
-        _app.callLater(fn, args);
+        Application.application.callLater(fn, args);
     }

     /**
@@ -106,7 +105,7 @@
      */
     public function getStage () :Stage
     {
-        return _app.stage;
+        return Application.application.stage;
     }

     public function getHostname () :String
@@ -371,9 +370,6 @@

     /** The credentials we used to authenticate with the server. */
     protected var _creds :Credentials;
-
-    /** The app we're in, needed for creating the Communicator. */
-    protected var _app :Application;

     /** The version string reported to the server at auth time. */
     protected var _version :String = "";


[FragmentLoader] Add com.pivotshare.hls.loader.FragmentLoader

--- src/com/pivotshare/hls/loader/FragmentLoader.as
+++ src/com/pivotshare/hls/loader/FragmentLoader.as
@@ -148,6 +148,23 @@
         private var _fragLoadStatus : int;
         private var _fragSkipping : Boolean;

+        /*
+         * Whether _onDemuxProgress event listener has been called at least once
+         * for current Fragment.
+         */
+        private var _hasDemuxProgressedOnce : Boolean;
+
+        /*
+         * Emergency Fragment to be loaded if current Fragment does not start
+         * with an IDR.
+         */
+        private var _emergencyFragment : Fragment;
+
+        /*
+         * FragmentDemuxedStream to for emergency Fragment.
+         */
+        private var _emergencyFragmentDemuxedStream : FragmentDemuxedStream;
+
         //
         //
         //
@@ -182,6 +199,10 @@
             _loadingState = LOADING_STOPPED;
             _manifestJustLoaded = false;
             _keyLoader = new KeyLoader();
+
+            _hasDemuxProgressedOnce = false;
+            _emergencyFragment = null;
+            _emergencyFragmentDemuxedStream = null;
         };

         /**
@@ -1028,8 +1049,57 @@
                 HLSSettings.startFromBitrate !== -1 ||
                 _levels.length == 1;

+            var previousLevel : int = _fragPrevious !== null ? _fragPrevious.level : _fragCurrent.level;
+
+            var mustRecoverFromNonIDRStart : Boolean =
+                HLSSettings.recoverFromNonIDRStartFragment &&
+                !_fragCurrent.data.starts_with_idr &&
+                _fragCurrent.level !== previousLevel; // TODO
+
+            // If this is the first Progress call for this Fragment
+            if (!_hasDemuxProgressedOnce) {
+
+                _hasDemuxProgressedOnce = true;
+
+                CONFIG::LOGGING {
+                    Log.debug2("FragmentLoader#_onDemuxProgress: Fragment[" +
+                        _fragCurrent.level + "][" + _fragCurrent.seqnum +
+                        "] starts with IDR? " + _fragCurrent.data.starts_with_idr +
+                        "@" + _fragCurrent.data.pts_min_video_header);
+                }
+
+                //
+                // Check for IDR at beginning of Fragment on Level switch
+                //
+                // If Fragment does not start with IDR then async stream same
+                // sequence at previous Level.
+                //
+                if (mustRecoverFromNonIDRStart) {
+
+                    CONFIG::LOGGING {
+                        Log.debug("FragmentLoader#_onDemuxProgress: Fragment["
+                            + _fragCurrent.level + "][" + _fragCurrent.seqnum +
+                            "] DOES NOT start with IDR! Will load same sequence at previous level to recover.");
+                    }
+
+                    _emergencyFragment = _levels[previousLevel].getFragmentfromSeqNum(_fragCurrent.seqnum);
+
+                    // Initiate loading of same seqnum Fragment on previous level to find IDR
+                    _keyLoader.load(_emergencyFragment.decrypt_url, function (err : HLSError, keyData : ByteArray) : void {
+                        _emergencyFragmentDemuxedStream = new FragmentDemuxedStream(_hls.stage);
+                        _emergencyFragmentDemuxedStream.load(_emergencyFragment, keyData, null);
+                    });
+                }
+            }
+
+            //
+            // TODO: We have temporarily disabled progressive buffering, as it
+            // does not seem to work with IDR recovery. Seems PTS analysis
+            // changes expected states. Needs to be debugged further.
+            //
+            /*
             // Determine if we can do progressively append to StreamBuffer
-            if (_fragmentFirstLoaded || (_manifestJustLoaded && isFirstFragmentLevelDefined)) {
+            if (!mustRecoverFromNonIDRStart && (_fragmentFirstLoaded || (_manifestJustLoaded && isFirstFragmentLevelDefined))) {

                 //
                 // if audio expected, PTS analysis is done on audio
@@ -1129,7 +1199,7 @@
                     _hasDiscontinuity = false;
                 }
             }
-
+            */
         }

         /**
@@ -1172,6 +1242,50 @@
                             (_fragCurrent.data.pts_min_video - _fragCurrent.data.pts_min_audio) +
                             "/" + (_fragCurrent.data.pts_max_video - _fragCurrent.data.pts_max_audio));
                     }
+                }
+            }
+
+            //
+            // Handle possible IDR Problem here
+            // TODO: We should still have have simple removal of frames as option
+            //
+            if (_emergencyFragment) {
+
+                _emergencyFragment = _emergencyFragmentDemuxedStream.getFragment();
+
+                // Return all tags (audio/video) unless it is Video tag that precedes IDR
+                var isNotBadVideoTag : Function = function (tag:FLVTag, index:int, vector:Vector.<FLVTag>):Boolean {
+                    return tag.type !== FLVTag.AVC_NALU || tag.pts >= _fragCurrent.data.pts_min_video_header;
+                }
+
+                // Return only Video tags that precede and IDR
+                var isGoodVideoTag : Function = function (tag:FLVTag, index:int, vector:Vector.<FLVTag>):Boolean {
+                    return tag.type == FLVTag.AVC_NALU && tag.pts < _fragCurrent.data.pts_min_video_header;
+                }
+
+                // It's already been found
+                if (!isNaN(_emergencyFragment.data.pts_min_video_header)) {
+                    CONFIG::LOGGING {
+                        Log.debug("FragmentLoader#_fragParsingCompleteHandler: Will fix non-IDR right now!");
+                    }
+
+                    var tagsExceptBadVideo : Vector.<FLVTag> = _fragCurrent.data.tags.filter(isNotBadVideoTag);
+                    var goodNonIDRTags : Vector.<FLVTag> = _emergencyFragment.data.tags.filter(isGoodVideoTag);
+
+                    _fragCurrent.data.tags = goodNonIDRTags.concat(tagsExceptBadVideo);
+
+                    _emergencyFragment = null;
+                    // TODO: Remove listener?
+                    _emergencyFragmentDemuxedStream.close();
+                    _emergencyFragmentDemuxedStream.removeEventListener(Event.COMPLETE, _onEmergencyDemuxedStreamComplete);
+                    _emergencyFragmentDemuxedStream = null;
+
+                } else { // bail leaving _emergencyFragment callback to recall this callback :(
+                    CONFIG::LOGGING {
+                        Log.debug("FragmentLoader#_fragParsingCompleteHandler: Cannot fix this non-IDR Fragment yet.");
+                    }
+                    _emergencyFragmentDemuxedStream.addEventListener(Event.COMPLETE, _onEmergencyDemuxedStreamComplete);
+                    return;
                 }
             }

@@ -1282,6 +1396,9 @@
                         _hls.dispatchEvent(new HLSEvent(HLSEvent.TAGS_LOADED, _metrics));
                         _fragCurrent.data.shiftTags();
                         _hasDiscontinuity = false;
+
+                        _hasDemuxProgressedOnce = false;
+                        _emergencyFragment = null;
                     }

                 } else {
@@ -1350,5 +1467,16 @@
         private function _onDemuxID3TagFound(id3_tags : Vector.<ID3Tag>) : void {
             _fragCurrent.data.id3_tags = id3_tags;
         }
+
+        /**
+         * Called when emergency Fragment has finished loading and demuxing.
+         *
+         * @method  _onEmergencyDemuxedStreamComplete
+         * @param   {Event}  evt
+         */
+        private function _onEmergencyDemuxedStreamComplete (evt : Event) : void {
+            _emergencyFragment = _emergencyFragmentDemuxedStream.getFragment();
+            _onDemuxComplete();
+        }
     }
 }


Added streamStopped event

Added streamStopped event

--- src/Player.as
+++ src/Player.as
@@ -31,6 +31,7 @@
   public class Player extends Sprite {
     private static const EVENT_STREAM_STARTED:String  = "streamStarted";
     private static const EVENT_STREAM_PAUSED:String  = "streamPaused";
+    private static const EVENT_STREAM_STOPPED:String  = "streamStopped";
     private static const EVENT_FULLSCREEN_ENTERED:String  = "fullscreenEntered";
     private static const EVENT_FULLSCREEN_EXITED:String  = "fullscreenExited";

@@ -225,7 +226,6 @@
       urlParsed = null;
       ns = null;
       client.stop();
-      this.callAPI('streamStopped');
       this.currentState = "stopped";
       this.streamHasAudio = false;
       this.streamHasVideo = false;
@@ -343,6 +343,7 @@
     private function onStopped(ev:ClientEvent):void {
       video.clear();
       client = null;
+      this.callAPI(EVENT_STREAM_STOPPED);
       if (urlParsed) {
         start();
       }


Found one of the bugs: the default ArrayStreamer was being picked to stream
TypedArrays.

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

--- src/as/com/threerings/io/streamers/ArrayStreamer.as
+++ src/as/com/threerings/io/streamers/ArrayStreamer.as
@@ -43,26 +43,26 @@

     override public function isStreamerFor (obj :Object) :Boolean
     {
-        if (_jname === "[Ljava.lang.Object;") {
-            // we fall back to streaming any array as Object
-            return (obj is Array);
+        if (obj is TypedArray) {
+            // TypedArrays need the same element type
+            return ((obj as TypedArray).getJavaType() === _jname);

         } else {
-            return (obj is TypedArray) &&
-                ((obj as TypedArray).getJavaType() === _jname);
+            // any other array is streamed as Object[]
+            return (obj is Array) && (_jname === "[Ljava.lang.Object;");
         }
     }

     override public function isStreamerForClass (clazz :Class) :Boolean
     {
-        if (_jname === "[Ljava.lang.Object;") {
-            return (clazz != TypedArray) &&
-                ClassUtil.isAssignableAs(Array, clazz);
-
-        } else {
+        if (clazz == TypedArray) {
             return false; // TODO: we're kinda fucked for finding a streamer
             // by class for TypedArrays here. The caller should be passing
             // the java name.
+
+        } else {
+            return ClassUtil.isAssignableAs(Array, clazz) &&
+                (_jname === "[Ljava.lang.Object;");
         }
     }


Let's refresh the scene prior to the delay so that by the time we add the view to the display list, we're really ready.

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

--- src/as/com/threerings/miso/client/MisoScenePanel.as
+++ src/as/com/threerings/miso/client/MisoScenePanel.as
@@ -287,8 +287,8 @@
     {
         _model = model;
         _ctx.getTileManager().ensureLoaded(_model.getAllTilesets(), function() :void {
+                refreshScene();
                 DelayUtil.delayFrame(function() :void {
-                    refreshScene();
                     removeChild(_loading);
                     addChild(_isoView);
                 });


Расширение возможностей FilePathUtils

Расширение возможностей FilePathUtils

--- src/main/org/shypl/common/util/FilePathUtils.as
+++ src/main/org/shypl/common/util/FilePathUtils.as
@@ -54,6 +54,20 @@
 			return index;
 		}

+		public static function parent(path:String):String {
+			var index:int = path.lastIndexOf(UNIX_SEPARATOR);
+
+			if (index === -1) {
+				index = path.lastIndexOf(WINDOWS_SEPARATOR);
+			}
+
+			if (index === -1) {
+				return "";
+			}
+
+			return path.substring(0, index);
+		}
+
 		public static function resolveSibling(path:String, sibling:String):String {
 			var index:int = path.lastIndexOf(UNIX_SEPARATOR);


Fix unnecessarily name injecting during abstract Event "mapValue"

--- src/org/robotlegs/base/CommandMap.as
+++ src/org/robotlegs/base/CommandMap.as
@@ -164,7 +164,7 @@
 				payloadClass ||= reflector.getClass(payload);

 				if (payload is Event && payloadClass != Event)
-					injector.mapValue(Event, payload, named);
+					injector.mapValue(Event, payload);

 				injector.mapValue(payloadClass, payload, named);
 			}
@@ -174,7 +174,7 @@
 			if (payload !== null || payloadClass != null)
 			{
 				if (payload is Event && payloadClass != Event)
-					injector.unmap(Event, named);
+					injector.unmap(Event);

 				injector.unmap(payloadClass, named);
 			}


Transferred from the Adobe Open Source Subversion Repository

Revision: 12550
Author:   chaase@adobe.com
Date:     2009-12-04T21:07:13.670531Z

Log Message:
-----------
Fixed bug with shader transition effects running on loaded modules/applications.
The problem was in how we were capturing the bitmap snapshot of the object. We would get the object's location relative to its parent's systemManager, but would then combine that location with the concatenatedMatrix of the object (which is collected all the way to the root window). This caused a problem with loaded SWFs where its systemManager was not at (0,0) relative to the stage. The fix was to use the sandboxRoot of that systemManager, which is relative to the overall stage.

QE notes: -
Doc notes: -
Bugs: sdk-20712
Reviewer: Jason
Tests run: checkintests, Mustella spark/effects/CrossFade|Wipe|AnimateShaderTransition
Is noteworthy for integration: No

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

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -44,6 +44,8 @@
 import mx.events.PropertyChangeEvent;
 import mx.filters.BaseFilter;
 import mx.filters.IBitmapFilter;
+import mx.geom.Transform;
+import mx.geom.TransformOffsets;
 import mx.graphics.shaderClasses.ColorBurnShader;
 import mx.graphics.shaderClasses.ColorDodgeShader;
 import mx.graphics.shaderClasses.ColorShader;
@@ -52,9 +54,7 @@
 import mx.graphics.shaderClasses.LuminosityMaskShader;
 import mx.graphics.shaderClasses.LuminosityShader;
 import mx.graphics.shaderClasses.SaturationShader;
-import mx.graphics.shaderClasses.SoftLightShader;
-import mx.geom.Transform;
-import mx.geom.TransformOffsets;
+import mx.graphics.shaderClasses.SoftLightShader;
 import mx.managers.ILayoutManagerClient;
 import mx.utils.MatrixUtil;

@@ -3066,12 +3066,11 @@
                 validateDisplayList();
             }

-            var topLevel:Sprite = Sprite(IUIComponent(parent).systemManager);
+            var topLevel:Sprite = Sprite(IUIComponent(parent).systemManager.getSandboxRoot());
             var rectBounds:Rectangle = useLocalSpace ?
                         new Rectangle(getLayoutBoundsX(), getLayoutBoundsY(), getLayoutBoundsWidth(), getLayoutBoundsHeight()) :
                         displayObject.getBounds(topLevel);
             var bitmapData:BitmapData = new BitmapData(Math.ceil(rectBounds.width), Math.ceil(rectBounds.height), transparent, fillColor);
-

             // Can't use target's concatenatedMatrix, as it is sometimes wrong
             var m:Matrix = useLocalSpace ?


- bugfix: ignore properties that change towards 'auto' in CSSTransitionManager

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

--- src/reprise/css/transitions/CSSTransitionsManager.as
+++ src/reprise/css/transitions/CSSTransitionsManager.as
@@ -159,7 +159,7 @@

 					//ignore properties that don't have previous values or target values
 					//TODO: check if we can implement default values for new elements
-					if (!oldValue || !targetValue ||
+					if (!oldValue || !targetValue || targetValue.isAuto() ||
 						oldValue.specifiedValue() == targetValue.specifiedValue())
 					{
 						return;


Transferred from the Adobe Open Source Subversion Repository

Revision: 12787
Author:   mhorn@adobe.com
Date:     2009-12-10T15:41:17.889108Z

Log Message:
-----------
asdoc updates for l10n

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/ColorDodgeShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/HueShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/SoftLightShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/ColorBurnShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/LuminosityMaskShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/ExclusionShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/SaturationShader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/graphics/shaderClasses/LuminosityShader.as</path>

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

--- frameworks/projects/framework/src/mx/graphics/shaderClasses/SoftLightShader.as
+++ frameworks/projects/framework/src/mx/graphics/shaderClasses/SoftLightShader.as
@@ -14,14 +14,14 @@
 import flash.display.Shader;

 /**
- *  The SoftLightShader class creates a blend shader that is equivalent to
+ *  Creates a blend shader that is equivalent to
  *  the 'Soft Light' blend mode for RGB premultiplied colors available
  *  in Adobe Creative Suite tools. This blend mode is not native to Flash,
  *  but is available in tools like Adobe Illustrator and Adobe Photoshop.
  *
- *  The 'softlight' blend mode can be set on Flex groups and graphic
- *  elements and the visual appearance in tools like Adobe Illustrator and
- *  Adobe Photoshop will be mimicked through this blend shader.
+ *
The 'softlight' blend mode can be set on Flex groups and graphic
+ *  elements. The visual appearance in tools like Adobe Illustrator and
+ *  Adobe Photoshop will be mimicked through this blend shader.

  *
  *  @langversion 3.0
  *  @playerversion Flash 10


Fix versionning bug in lazy access to local data from the CameraData (cameraLocalPosition and cameraLocalLookAt)

--- src/aerys/minko/scene/visitor/data/CameraData.as
+++ src/aerys/minko/scene/visitor/data/CameraData.as
@@ -56,9 +56,11 @@

 		protected var _localPosition					: Vector4;
 		protected var _localPosition_positionVersion	: uint;
+		protected var _localPosition_worldVersion		: uint;

 		protected var _localLookAt						: Vector4;
 		protected var _localLookAt_lookAtVersion		: uint;
+		protected var _localLookAt_worldVersion			: uint;

 		protected var _frustum							: Frustum;
 		protected var _frustum_projectionVersion		: uint;
@@ -147,10 +149,14 @@

 		public function get localPosition() : Vector4
 		{
-			if (_localPosition_positionVersion != _position.version)
-			{
-				_localPosition = _localData.world.multiplyVector(_position, _localPosition);
-				_localPosition_positionVersion = _position.version;
+			var worldMatrix : Matrix4x4 = _localData.world;
+
+			if (_localPosition_positionVersion != _position.version ||
+				_localPosition_worldVersion != worldMatrix.version)
+			{
+				_localPosition = worldMatrix.multiplyVector(_position, _localPosition);
+				_localPosition_positionVersion	= _position.version;
+				_localPosition_worldVersion		= worldMatrix.version;
 			}

 			return _localPosition;
@@ -158,10 +164,14 @@

 		public function get localLookAt() : Vector4
 		{
-			if (_localLookAt_lookAtVersion != _lookAt.version)
-			{
-				_localLookAt = _localData.world.deltaMultiplyVector(_lookAt, _localLookAt);
-				_localLookAt_lookAtVersion = _lookAt.version;
+			var worldMatrix : Matrix4x4 = _localData.world;
+
+			if (_localLookAt_lookAtVersion != _lookAt.version ||
+				_localLookAt_worldVersion != worldMatrix.version)
+			{
+				_localLookAt = worldMatrix.multiplyVector(_lookAt, _localLookAt);
+				_localLookAt_lookAtVersion	= _lookAt.version;
+				_localLookAt_worldVersion	= worldMatrix.version;
 			}

 			return _localLookAt;
@@ -250,7 +260,9 @@
 			_view_lookAtVersion				= uint.MAX_VALUE;
 			_view_upVersion					= uint.MAX_VALUE;
 			_localPosition_positionVersion	= uint.MAX_VALUE;
+			_localPosition_worldVersion		= uint.MAX_VALUE;
 			_localLookAt_lookAtVersion		= uint.MAX_VALUE;
+			_localLookAt_worldVersion		= uint.MAX_VALUE;
 			_frustum_projectionVersion		= uint.MAX_VALUE;

 			_zFarParts_invalidated	= true;


Passes on error when registering type is null

--- src/asfac/src/com/thedevstop/asfac/AsFactory.as
+++ src/asfac/src/com/thedevstop/asfac/AsFactory.as
@@ -49,6 +49,9 @@

 		public function registerCallback(callback:Function, type:Class, asSingleton:Boolean=false):void
 		{
+			if (!type)
+				throw new IllegalOperationError("Type cannot be null when registering a callback");
+
 			if (callback.length !== 0)
 				throw new IllegalOperationError("Callback function registered for {0} must not have arguments".replace("{0}", getQualifiedClassName(type)));


Added comment.

Added comment.

Change-Id: I8521f833bc5e326931559a42c0104da66003132f

--- WeaveUI/src/weave/utils/BitmapUtils.as
+++ WeaveUI/src/weave/utils/BitmapUtils.as
@@ -134,6 +134,12 @@
 			return screenshot;
 		}

+		/**
+		 * This function accepts a component, gets its corresponding bitmap, and encodes the image as
+		 * a base 64 string.
+		 * @param component The component for which to get the string encoding.
+		 * @return A base 64 encoding of the image.
+		 */
 		public static function getBase64Image(component:UIComponent):String
 		{
 			var data:BitmapData = getBitmapDataFromComponent(component);


Transferred from the Adobe Open Source Subversion Repository

Revision: 22690
Author:   aaltman@adobe.com
Date:     2011-09-22T19:01:30.686149Z

Log Message:
-----------
When a focus manager is removed from the active window manager, update StyleableStageText's bitmaps

QE notes: None
Doc notes: None
Bugs: SDK-31619
Reviewer: jasonsj
Tests run: checkintests mustella-mobile
Is noteworthy for integration: No

Modified Paths:
--------------
/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as

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

--- frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as
+++ frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as
@@ -1732,9 +1732,9 @@

     /**
      *  Iterate through the forms tracked by ActiveWindowManager and return the
-     *  one that is highest in z-order.
-     */
-    private function findTopmostForm():Object
+     *  one that is highest in z-order excluding the passed-in form.
+     */
+    private function findTopmostForm(excludeForm:Object):Object
     {
         if (!awm)
             return null;
@@ -1746,7 +1746,7 @@
         {
             var otherIndex:int = getFormIndex(otherForm);

-            if (otherIndex > formIndex)
+            if (otherIndex > formIndex && otherForm != excludeForm)
             {
                 form = otherForm;
                 formIndex = otherIndex;
@@ -1837,9 +1837,10 @@
     /**
      *  Find the topmost form in z-order and show the StageText if this is a
      *  child of that form. Otherwise, create or update the proxy bitmap and
-     *  hide the StageText.
-     */
-    private function updateProxyImageForTopmostForm():void
+     *  hide the StageText. When searching for the topmost form, optionally
+     *  exclude a form that is known to be hiding or closing.
+     */
+    private function updateProxyImageForTopmostForm(excludeForm:Object = null):void
     {
         if (!awm)
             return;
@@ -1847,7 +1848,7 @@
         var form:Object = awm.form;

         if (!(form is DisplayObject) || isFormApplication(form as DisplayObject))
-            form = findTopmostForm();
+            form = findTopmostForm(excludeForm);

         updateProxyImageForForm(form);
     }
@@ -2166,6 +2167,18 @@
         updateProxyImageForForm(form);
     }

+    private function awm_removeFocusManagerHandler(event:FocusEvent):void
+    {
+        // When a popup is removed from the popup manager, its focus manager
+        // gets removed from the ActiveWindowManager. This happens even in cases
+        // where the AWM will not send a deactivatedForm event for that popup.
+        // This happens before the popup is removed from the AWM's forms array,
+        // though, so the popup whose focus manager is getting removed needs to
+        // be explicitly skipped when determining the new topmost form.
+        var removedForm:Object = event.relatedObject;
+        updateProxyImageForTopmostForm(removedForm);
+    }
+
     private function stageText_changeHandler(event:Event):void
     {
         var foundChange:Boolean = false;
@@ -2346,6 +2359,7 @@
         {
             awm.addEventListener("activatedForm", awm_activatedFormHandler, false, 0, true);
             awm.addEventListener("deactivatedForm", awm_deactivatedFormHandler, false, 0, true);
+            awm.addEventListener("removeFocusManager", awm_removeFocusManagerHandler, false, 0, true);
         }

         if (stageText == null)
@@ -2422,6 +2436,7 @@
         {
             awm.removeEventListener("activatedForm", awm_activatedFormHandler);
             awm.removeEventListener("deactivatedForm", awm_deactivatedFormHandler);
+            awm.removeEventListener("removeFocusManager", awm_removeFocusManagerHandler);
         }

         if (stageText == null)


Make TextureLoader inheritable.

Make TextureLoader inheritable.

--- src/aerys/minko/type/loader/TextureLoader.as
+++ src/aerys/minko/type/loader/TextureLoader.as
@@ -18,7 +18,7 @@
 	import flash.utils.ByteArray;
 	import flash.utils.getQualifiedClassName;

-	public final class TextureLoader implements ILoader
+	public class TextureLoader implements ILoader
 	{
 		private var _progress			: Signal;
 		private var _error				: Signal;


We don't need these methods, really.
They are freaking out asdoc.

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

--- src/as/com/threerings/util/MapProxyObject.as
+++ src/as/com/threerings/util/MapProxyObject.as
@@ -41,24 +41,27 @@
         _map = source;
     }

-    // from Object (but does not require 'override')
-    public function hasOwnProperty (name :String) :Boolean
-    {
-        return _map.containsKey(name);
-    }
-
-    // from Object (but does not require 'override')
-    public function propertyIsEnumerable (name :String) :Boolean
-    {
-        return _map.containsKey(name);
-    }
-
-    // from Object (but does not require 'override')
-    public function setPropertyIsEnumerable (name :String, isEnum :Boolean = true) :void
-    {
-        // no-op
-        // (Alternatively, we could keep a dictionary of keys that we ignore for enumeration...)
-    }
+// The following are not strictly necessary and are freaking out asdoc, so I'll
+// comment them out for now.
+//
+//    // from Object (but does not require 'override')
+//    public function hasOwnProperty (name :String) :Boolean
+//    {
+//        return _map.containsKey(name);
+//    }
+//
+//    // from Object (but does not require 'override')
+//    public function propertyIsEnumerable (name :String) :Boolean
+//    {
+//        return _map.containsKey(name);
+//    }
+//
+//    // from Object (but does not require 'override')
+//    public function setPropertyIsEnumerable (name :String, isEnum :Boolean = true) :void
+//    {
+//        // no-op
+//        // (Alternatively, we could keep a dictionary of keys that we ignore for enumeration...)
+//    }

     /**
      * Handle value = proxy[key].


Fixed regression that caused FLVPlayer#play to always play from the beginning instead of resuming if paused

--- src/reprise/media/FLVPlayer.as
+++ src/reprise/media/FLVPlayer.as
@@ -170,7 +170,7 @@

 		protected override function doPlay():void
 		{
-			if (!m_source.isExecuting())
+			if (!(m_source.isExecuting() || m_source.didFinishLoading()))
 			{
 				m_source.execute();
 			}


Transferred from the Adobe Open Source Subversion Repository

Revision: 11452
Author:   klin@adobe.com
Date:     2009-11-05T01:43:45.759633Z

Log Message:
-----------
Couple of various fixes.

ComboBox.as - The dropDown was not receiving changes to styles nor dataproviders. This was a result of not recreating the dropDown each time it was shown. I've changed the default of the flag for destroying the dropDown to be true. I've also modified the code to only not destroy the dropDown when it is showing or being shown.

ButtonBar.as - In one case, when calculating the percentage that each button takes of the width, there was a rounding error that caused the total percentage to be less than 100%. I've changed the code to use Numbers to avoid the rounding error.

DropDownList.as - I've fixed the page down code to take into account the case when selectedIndex==-1.

Label.as, SWFLoader.as, TextInput.as - Excluded baseColor style.

TitleWindowBoundsEvent.as - ASDoc change. "afterBounds" is always null when the "windowMoveStart" event is dispatched

QE notes: No
Doc notes: No
Bugs: SDK-21715, SDK-23338, SDK-23512, SDK-23838, SDK-23660
Reviewer: Chet
Tests run: checkintests, ButtonBar, ToggleButtonBar, tabnavigator
Is noteworthy for integration: No

Modified Paths:
--------------
<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/spark/src/spark/components/DropDownList.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/Label.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/controls/ButtonBar.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/SWFLoader.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/events/TitleWindowBoundsEvent.as</path>

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

--- frameworks/projects/mx/src/mx/controls/TextInput.as
+++ frameworks/projects/mx/src/mx/controls/TextInput.as
@@ -212,6 +212,7 @@

 [Exclude(name="selectionActivePosition", kind="method")]
 [Exclude(name="selectionAnchorPosition", kind="method")]
+[Exclude(name="baseColor", kind="style")]

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


create test

create test

--- test/request/HTTPClientTest.as
+++ test/request/HTTPClientTest.as
@@ -43,6 +43,24 @@
       r.show(1);
     }

+    public function testCreate():void {
+      var r:HTTPClient = new HTTPClient(new ResourcePathBuilder("posts"), new JSONFilter());
+      r.addEventListener("result", asyncHandler(verifyCreateComplete, 1500));
+      r.create({post: {subject: "creating new post", body: "creating new post with body"}});
+    }
+
+    private function verifyCreateComplete(e:ResultEvent, data:Object):void {
+      var r:HTTPClient = new HTTPClient(new ResourcePathBuilder("posts"), new JSONFilter());
+
+      r.addEventListener("result", asyncHandler(function (e:ResultEvent, data:Object):void {
+        var p:Record = e.result as Record;
+
+        assertEquals('testFindAll #2 updated', p.subject);
+        assertEquals('testFindAll #2 body updated', p.body);
+      }, 1500));
+      r.show(2);
+    }
+
     public function testUpdate():void {
       var r:HTTPClient = new HTTPClient(new ResourcePathBuilder("posts"), new JSONFilter());
       r.addEventListener("result", asyncHandler(verifyUpdateComplete, 1500));


Removed excess code which was preventing the button's hit area from covering the entire button face.

--- frameworks/projects/HTML/as/src/org/apache/flex/html/beads/CSSTextButtonView.as
+++ frameworks/projects/HTML/as/src/org/apache/flex/html/beads/CSSTextButtonView.as
@@ -267,21 +267,6 @@
 		{
 			var useWidth:uint = Math.max(DisplayObject(_strand).width, upTextField.textWidth);
 			var useHeight:uint = Math.max(DisplayObject(_strand).height, upTextField.textHeight);
-			var borderThickness:Object = ValuesManager.valuesImpl.getValue(_strand, "border-thickness");
-			if (borderThickness == null) borderThickness = 0;
-			var padding:Object = ValuesManager.valuesImpl.getValue(_strand, "padding");
-			if (padding == null) padding = 0;
-			var paddingLeft:Object = ValuesManager.valuesImpl.getValue(_strand,"padding-left");
-			if (paddingLeft == null) paddingLeft = padding;
-			var paddingRight:Object = ValuesManager.valuesImpl.getValue(_strand,"padding-right");
-			if (paddingRight == null) paddingRight = padding;
-			var paddingTop:Object = ValuesManager.valuesImpl.getValue(_strand,"padding-top");
-			if (paddingTop == null) paddingTop = padding;
-			var paddingBottom:Object = ValuesManager.valuesImpl.getValue(_strand,"padding-bottom");
-			if (paddingBottom == null) paddingBottom = padding;
-
-			useWidth = paddingLeft + paddingRight + 2*Number(borderThickness) + upTextField.textWidth;
-			useHeight = paddingTop + paddingBottom + 2*Number(borderThickness) + upTextField.textHeight;

 			shape.graphics.clear();
 			shape.graphics.beginFill(0xCCCCCC);


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

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


Transferred from the Adobe Open Source Subversion Repository

Revision: 21839
Author:   jszeto@adobe.com
Date:     2011-08-04T22:35:00.199381Z

Log Message:
-----------
SpinnerList Bug Fixes

SDK-30904 - SpinnerList dispatches "change" event on programmatic selectedIndex changes

Call setSelectedIndex after a user interaction change

SDK-30961 - SpinnerList should use a less common property name when deciding if an item is disabled

Changed from using "enabled" to "_enabled_". Added static constant to SpinnerList.

SDK-30998 - SpinnerListContainerSkin.layoutContents calls setElementPosition() before setElementSize()

QE notes: none
Doc notes: none
Bugs: SDK-30904, SDK-30961, SDK-30998
Reviewer: Tom K
Tests run: checkintests
Is noteworthy for integration: no

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/SpinnerListContainerSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/SpinnerList.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/DateSpinner.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/SpinnerListItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/layouts/VerticalSpinnerLayout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/modules/compiler/src/java/flex2/compiler/common/DefaultsConfigurator.java</path>

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

--- frameworks/projects/mobilecomponents/src/spark/layouts/VerticalSpinnerLayout.as
+++ frameworks/projects/mobilecomponents/src/spark/layouts/VerticalSpinnerLayout.as
@@ -18,6 +18,7 @@
 import mx.core.IVisualElement;
 import mx.core.mx_internal;

+import spark.components.SpinnerList;
 import spark.components.supportClasses.GroupBase;
 import spark.core.NavigationUnit;

@@ -167,25 +168,39 @@
             normalizeScrollPosition(verticalScrollPosition) :
             verticalScrollPosition;

-        var itemIndex:int = 0;
+        var itemIndex:int = Math.floor(scrollPosition / rowHeight);
         var yPos:Number = 0;

         var foundLastVisibleElement:Boolean = false;
         var numVisibleElements:int = 0;
         var numVisitedElements:int = 0;
-
+
         // Translate the vsp to the item index
         if (wrapElements)
         {
-            itemIndex = Math.floor(scrollPosition / rowHeight);
             // The top item might only be partially visible.
             yPos = -(scrollPosition % rowHeight);
         }
         else
         {
-            // If wrapElements == false, then start at the first index
-            // TODO (jszeto) Fix bug. Need to start at first visible index
-            yPos = -scrollPosition;
+            if (!useVirtualLayout)
+                itemIndex = 0;
+
+            // If itemIndex is either the first or last element
+            // then position using -scrollPosition
+            if (itemIndex >= numElements)
+            {
+                itemIndex = numElements - 1;
+                yPos = -scrollPosition;
+            }
+            else if (itemIndex > 0)
+            {
+                yPos = -(scrollPosition % rowHeight);
+            }
+            else // itemIndex == 0
+            {
+                yPos = -scrollPosition;
+            }
         }

         // Start at the top index
@@ -214,6 +229,11 @@
                         break;
                 }
             }
+
+            // Make sure to not wrap if wrapElements = false
+            if (!wrapElements && iter.currentIndex == numElements - 1)
+                break;
+
             iter.next();
         }
         while (itemIndex != iter.currentIndex)
@@ -374,8 +394,15 @@
     {
         // Element is false if it was a simple type and didn't survive the
         // casting as an object
-        if (!element || element["enabled"] == undefined || element["enabled"] == true)
-            return true;
+        try
+        {
+            if (!element || element["enabled"] == undefined || element["enabled"] == true)
+                return true;
+        }
+        catch (e:Error)
+        {
+
+        }

         return false;


Transferred from the Adobe Open Source Subversion Repository

Revision: 1451
Author:   jimurphy@adobe.com
Date:     2008-04-29T14:19:59.414928Z

Log Message:
-----------
Merge 3.0.x [1412,1415-1417,1444] -> Trunk

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/AMFChannel.as</path>
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/lib/flex-messaging-common.jar</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/NetConnectionChannel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingHTTPChannel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/airframework/src/mx/controls/HTML.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingAMFChannel.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/rpc/src/mx/messaging/channels/HTTPChannel.as</path>

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

--- frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as
+++ frameworks/projects/rpc/src/mx/messaging/channels/StreamingConnectionHandler.as
@@ -11,7 +11,7 @@

 package mx.messaging.channels
 {
-
+
 import flash.events.Event;
 import flash.events.EventDispatcher;
 import flash.events.HTTPStatusEvent;
@@ -32,11 +32,11 @@
 import mx.messaging.FlexClient;
 import mx.messaging.events.MessageEvent;
 import mx.messaging.messages.AbstractMessage;
+import mx.messaging.messages.AcknowledgeMessage;
 import mx.messaging.messages.CommandMessage;
 import mx.messaging.messages.IMessage;
-import mx.messaging.messages.AcknowledgeMessage;
-
-use namespace mx_internal;
+
+use namespace mx_internal;

 /**
  *  Dispatched when the StreamingConnectionHandler receives a status command from the server.
@@ -44,71 +44,71 @@
  *  @eventType flash.events.StatusEvent
  */
 [Event(name="status", type="flash.events.StatusEvent")]
-
+
 /**
  *  A helper class that is used by the streaming channels to open an internal
  *  HTTP connection to the server that is held open to allow the server to
  *  stream data down to the client with no poll overhead.
- */
+ */
 public class StreamingConnectionHandler extends EventDispatcher
 {
     //--------------------------------------------------------------------------
     //
     // Public Static Constants
-    //
-    //--------------------------------------------------------------------------
-
+    //
+    //--------------------------------------------------------------------------
+
     /**
      *  The code for the StatusEvent dispatched by this handler when a disconnect
      *  command is received from the server.
      */
     public static const DISCONNECT_CODE:String = "disconnect";
-
+
     //--------------------------------------------------------------------------
     //
     // Private Static Constants
-    //
-    //--------------------------------------------------------------------------
-
+    //
+    //--------------------------------------------------------------------------
+
     /**
      *  Parameter name for the command passed in the request for a new streaming connection.
      */
     private static const COMMAND_PARAM_NAME:String = "command";
-
-    /**
-     *  A request to open a streaming connection passes this 'command' in the request URI to the
-     *  remote endpoint.
+
+    /**
+     *  A request to open a streaming connection passes this 'command' in the request URI to the
+     *  remote endpoint.
      */
     private static const OPEN_COMMAND:String = "open";

     /**
-     *  A request to close a streaming connection passes this 'command' in the request URI to the
-     *  remote endpoint.
+     *  A request to close a streaming connection passes this 'command' in the request URI to the
+     *  remote endpoint.
      */
     private static const CLOSE_COMMAND:String = "close";
-
+
     /**
      *  Parameter name for the stream id; passed with commands for an existing streaming connection.
      */
     private static const STREAM_ID_PARAM_NAME:String = "streamId";
-
+
     /**
      *  Parameter name for the version param passed in the request for a new streaming connection.
      */
     private static const VERSION_PARAM_NAME:String = "version";
-
+
     /**
      *  Indicates the stream version used for this channel's stream connection.
      *  Currently just version 1. If the protocol over the wire needs to change in the future
      *  this gives us a way to indicate the change.
      */
-    private static const VERSION_1:String = "1";
-
+    private static const VERSION_1:String = "1";
+
     // Constants for bytes used in parsing response chunks.
-    private static const CR_BYTE:int = 13;
+    private static const CR_BYTE:int = 13;
     private static const LF_BYTE:int = 10;
     private static const NULL_BYTE:int = 0;
-
+
     // Map of ASCII bytes to hex digits.
     private static const HEX_DIGITS:Object = {"48":  "0",
                                               "49":  "1",
@@ -149,23 +149,23 @@
                                               "d": 13,
                                               "e": 14,
                                               "f": 15};
-
+
     // Parse states; streamProgressHandler() uses these states to parse incoming HTTP response chunks.
     private static const INIT_STATE:int = 0;
     private static const CR_STATE:int = 1;
     private static const LF_STATE:int = 2;
     private static const SIZE_STATE:int = 3;
     private static const TEST_CHUNK_STATE:int = 4;
-    private static const SKIP_STATE:int = 5;
+    private static const SKIP_STATE:int = 5;
     private static const DATA_STATE:int = 6;
     private static const RESET_BUFFER_STATE:int = 7;
-
+
     //--------------------------------------------------------------------------
     //
     // Constructor
-    //
-    //--------------------------------------------------------------------------
-
+    //
+    //--------------------------------------------------------------------------
+
     /**
      *  Creates an new StreamingConnectionHandler instance.
      *
@@ -177,118 +177,124 @@
         super();
     	this.channel = channel;
     	this._log = log;
-    }
-
+    }
+
     //--------------------------------------------------------------------------
     //
     // Variables
-    //
-    //--------------------------------------------------------------------------
-
+    //
+    //--------------------------------------------------------------------------
+
   	/**
   	 * The Channel that uses this class.
   	 */
   	 protected var channel:Channel;
-
+
     /**
      *  Byte buffer used to store the current chunk from the remote endpoint.
      *  Once a full chunk has been buffered, a message instance encoded in binary
      *  AMF format can be read from the chunk and dispatched.
      */
     protected var chunkBuffer:ByteArray;
-
+
     /**
      *  Counter that keeps track of how many data bytes remain to be read for the current chunk.
      *  A sentinal value of -1 indicates an initial state (either waiting for the first chunk or
      *  just finished parsing the previous chunk).
      */
     protected var dataBytesToRead:int = -1;
-
+
     /**
      *  Index into the chunk buffer pointing to the first byte of chunk data.
      */
     protected var dataOffset:int;
-
-    /**
-     *  @private
+
+    /**
+     *  @private
      *  Reference to the logger for the associated Channel.
      */
     protected var _log:ILogger;
-
+
     /**
      *  @private
      *  The server-assigned id for the streaming connection.
      */
     protected var streamId:String;
-
+
     /**
      *  Storage for the hex-format chunk size value from the byte stream.
      */
-    private var hexChunkSize:String;
-
+    private var hexChunkSize:String;
+
     /**
      *  Current parse state on the streaming connection.
      */
     private var state:int = INIT_STATE;
-
+
     /**
      *  URLStream used to open a streaming connection from the server to
      *  the client over HTTP.
-     */
+     */
     private var streamingConnection:URLStream;

     /**
-     *  URLStream used to close the original streaming connection opened from
+     *  URLStream used to close the original streaming connection opened from
      *  the server to the client over HTTP.
-     */
+     */
 	private var streamingConnectionCloser:URLStream;
-
+
     //--------------------------------------------------------------------------
     //
     // Public Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Used by the streaming channels to set up the streaming connection if
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Used by the streaming channels to set up the streaming connection if
      *  necessary and issue the open request to the server.
-     */
-    public function openStreamingConnection():void
+     *
+     *  @param appendToURL The string to append such as session id to the endpoint
+     *  url while making the streaming connection request.
+     */
+    public function openStreamingConnection(appendToURL:String=null):void
     {
     	// Construct the streaming connection if needed.
         if (streamingConnection == null)
         {
             streamingConnection = new URLStream();
             streamingConnection.addEventListener(Event.OPEN, streamOpenHandler);
-            streamingConnection.addEventListener(ProgressEvent.PROGRESS, streamProgressHandler);
+            streamingConnection.addEventListener(ProgressEvent.PROGRESS, streamProgressHandler);
             streamingConnection.addEventListener(Event.COMPLETE, streamCompleteHandler);
             streamingConnection.addEventListener(HTTPStatusEvent.HTTP_STATUS, streamHttpStatusHandler);
             streamingConnection.addEventListener(IOErrorEvent.IO_ERROR, streamIoErrorHandler);
-            streamingConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, streamSecurityErrorHandler);
+            streamingConnection.addEventListener(SecurityErrorEvent.SECURITY_ERROR, streamSecurityErrorHandler);
         }
-
-        // Open the streaming connection, only if not already requested to open.
+
+        // Open the streaming connection, only if not already requested to open.
         if (!streamingConnection.connected)
         {
-            var request:URLRequest = new URLRequest();
-            request.url = channel.endpoint + "?" + COMMAND_PARAM_NAME + "=" + OPEN_COMMAND + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
-            request.method = URLRequestMethod.POST;
+            var request:URLRequest = new URLRequest();
+            var url:String = channel.endpoint;
+            if (appendToURL != null)
+                url += appendToURL;
+            request.url = url + "?" + COMMAND_PARAM_NAME + "=" + OPEN_COMMAND + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
+            request.method = URLRequestMethod.POST;
             var postParams:URLVariables = new URLVariables();
-            postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
-            request.data = postParams;
-
-			streamingConnection.load(request);
+            postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
+            request.data = postParams;
+
+			streamingConnection.load(request);
         }
     }
-
-    /**
-     *  Used by the streaming channels to shut down the streaming connection.
+
+    /**
+     *  Used by the streaming channels to shut down the streaming connection.
      */
     public function closeStreamingConnection():void
     {
     	// First, close the existing connection.
         if (streamingConnection != null)
-        {
+        {
             if (streamingConnection.connected)
             {
                 try
@@ -297,18 +303,18 @@
                 }
                 catch(ignore:Error)
 				{
-				}
-            }
+				}
+            }
         }

-		// Then, let the server know that streaming connection can be cleaned up.
+		// Then, let the server know that streaming connection can be cleaned up.
 		if (streamId != null)
-		{
+		{
     		if (streamingConnectionCloser == null)
     		{
                 var process:Function = function(event:Event):void
-                {
-                    if (streamingConnectionCloser.connected)
+                {
+                    if (streamingConnectionCloser.connected)
                     {
                         try
                         {
@@ -316,46 +322,46 @@
                             streamingConnectionCloser.close();
                         }
                         catch (ignore:Error)
-                        {
+                        {
                         }
-                    }
-                }
-
+                    }
+                }
+
                 var ignore:Function = function(event:Event):void
                 {
                     // Ignore.
                 }
-
-    			streamingConnectionCloser = new URLStream();
+
+    			streamingConnectionCloser = new URLStream();
     			streamingConnectionCloser.addEventListener(Event.COMPLETE, process);
-                streamingConnectionCloser.addEventListener(IOErrorEvent.IO_ERROR, process);
+                streamingConnectionCloser.addEventListener(IOErrorEvent.IO_ERROR, process);
     			// Ignore the following events.
                 streamingConnectionCloser.addEventListener(HTTPStatusEvent.HTTP_STATUS, ignore);
-                streamingConnectionCloser.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ignore);
-    		}
-
+                streamingConnectionCloser.addEventListener(SecurityErrorEvent.SECURITY_ERROR, ignore);
+    		}
+
     		// Request the streaming connection close, only if not already requested to close.
-    		if (!streamingConnectionCloser.connected)
+    		if (!streamingConnectionCloser.connected)
     		{
-    			var request:URLRequest = new URLRequest();
-    			request.url = channel.endpoint + "?" + COMMAND_PARAM_NAME + "=" + CLOSE_COMMAND + "&"
-    			              + STREAM_ID_PARAM_NAME + "=" + streamId + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
-    			request.method = URLRequestMethod.POST;
+    			var request:URLRequest = new URLRequest();
+    			request.url = channel.endpoint + "?" + COMMAND_PARAM_NAME + "=" + CLOSE_COMMAND + "&"
+    			              + STREAM_ID_PARAM_NAME + "=" + streamId + "&" + VERSION_PARAM_NAME + "=" + VERSION_1;
+    			request.method = URLRequestMethod.POST;
     			var postParams:URLVariables = new URLVariables();
-    			postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
-    			request.data = postParams;
-
-    			streamingConnectionCloser.load(request);
+    			postParams[AbstractMessage.FLEX_CLIENT_ID_HEADER] = FlexClient.getInstance().id
+    			request.data = postParams;
+
+    			streamingConnectionCloser.load(request);
     		}
         }
     }
-
+
     //--------------------------------------------------------------------------
     //
     // Protected Methods
-    //
-    //--------------------------------------------------------------------------
-
+    //
+    //--------------------------------------------------------------------------
+
 	/**
 	 *  Used by the streamProgressHandler to read a message. Default implementation
 	 *  returns null and subclasses must override this method.
@@ -363,55 +369,55 @@
 	 *  @return Returns the message that was read.
 	 */
     protected function readMessage():IMessage
-    {
-    	return null;
-    }
-
+    {
+    	return null;
+    }
+
     //--------------------------------------------------------------------------
     //
     // Private Methods
-    //
-    //--------------------------------------------------------------------------
-
-    /**
-     *  Helper method to process the chunk size value in hex read from the beginning of a chunk
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  Helper method to process the chunk size value in hex read from the beginning of a chunk
      *  into a decimal value that can be used to determine when all data for the chunk has been read.
-     *
+     *
      *  @param value The hex value as a String.
      *  @return The hex value converted as a decimal int.
      */
     private function convertHexToDecimal(value:String):int
     {
         var result:int = 0;
-        var powerOfSixteen:int = 0;
+        var powerOfSixteen:int = 0;
         for (var i:int = value.length - 1; i >= 0; i--)
         {
             if (powerOfSixteen == 0)
                 powerOfSixteen = 1;
-            else
+            else
                 powerOfSixteen *= 16;
-
+
             var digit:int = HEX_VALUES[value.charAt(i)];
             result += digit * powerOfSixteen;
         }
         return result;
-    }
-
-    /**
-     *  Handles a complete event that indicates that the streaming connection
+    }
+
+    /**
+     *  Handles a complete event that indicates that the streaming connection
      *  has been closed by the server by re-dispatching the event for the channel.
-     *
+     *
      *  @param event The COMPLETE Event.
      */
     private function streamCompleteHandler(event:Event):void
     {
     	dispatchEvent(event);
     }
-
+
     /**
      *  Handles HTTP status events dispatched by the streaming connection by
      *  re-dispatching the event for the channel.
-     *
+     *
      *  @param event The HTTPStatusEvent.
      */
     private function streamHttpStatusHandler(event:HTTPStatusEvent):void
@@ -422,33 +428,33 @@
     /**
      *  Handles IO error events dispatched by the streaming connection by
      *  re-dispatching the event for the channel.
-     *
+     *
      *  @param event The IOErrorEvent.
      */
     private function streamIoErrorHandler(event:IOErrorEvent):void
     {
 		dispatchEvent(event);
     }
-
+
     /**
      *  The open event is dispatched when the streaming connection has been established
      *  to the server, but it may still fail or be rejected so ignore this event and do
-     *  not advance the channel to a connected state yet.
-     *
+     *  not advance the channel to a connected state yet.
+     *
      *  @param event The OPEN Event.
      */
     private function streamOpenHandler(event:Event):void
     {
-       // Ignore.
-    }
-
+       // Ignore.
+    }
+
     /**
      *  The arrival of data from the remote endpoint triggers progress events.
      *  The format of the data stream is HTTP Transfer-Encoding chunked, and each chunk contains either an object
      *  encoded in binary AMF format or a block of bytes to read off the network but skip any processing of.
-     *
-     *  @param event The ProgressEvent.
-     */
+     *
+     *  @param event The ProgressEvent.
+     */
     private function streamProgressHandler(event:ProgressEvent):void
     {
         if (chunkBuffer == null)
@@ -456,78 +462,78 @@
             chunkBuffer = new ByteArray();
             chunkBuffer.objectEncoding = ObjectEncoding.AMF3;
         }
-
+
         var n:int = streamingConnection.bytesAvailable;
         if (n > 0)
-        {
+        {
             // Move available bytes to chunk buffer.
             streamingConnection.readBytes(chunkBuffer, chunkBuffer.length, n);

-            // Parse chunk buffer. Currently no validation is done of the chunk format.
+            // Parse chunk buffer. Currently no validation is done of the chunk format.
             // There's little need for it with our known server but validation could be added.
             var value:int; // Storage for current byte read.
             while (chunkBuffer.bytesAvailable > 0)
             {
                 if (state == INIT_STATE)
-                {
-                    value = chunkBuffer.readByte();
+                {
+                    value = chunkBuffer.readByte();
                     if (value == NULL_BYTE) // Ignore the null heartbeat byte.
                         continue;
-
+
                     dataBytesToRead = -1;
-                    hexChunkSize = "";
+                    hexChunkSize = "";
                     chunkBuffer.position--; // Push back byte read.
-                    state = CR_STATE;
+                    state = CR_STATE;
                 }
                 if (state == CR_STATE)
-                {
+                {
                     value = chunkBuffer.readByte();
-
+
                     // This state skips past CRLF pairs but may also be hit at the start of a stream
-                    // in which case we need to advance to the size state to finish reading the size header.
+                    // in which case we need to advance to the size state to finish reading the size header.
                     if (value == CR_BYTE)
                     {
                         state = LF_STATE;
                     }
-                    else
-                    {
-                        // We seem to get into this state when a high number of messages
-                        // are being streamed in a very short amount of time.
-                        chunkBuffer.position--; // Push back byte read.
+                    else
+                    {
+                        // We seem to get into this state when a high number of messages
+                        // are being streamed in a very short amount of time.
+                        chunkBuffer.position--; // Push back byte read.
                         value = chunkBuffer.readByte();
-
+
                         if (value == LF_BYTE)
                         {
                             state = (dataBytesToRead == -1) ? SIZE_STATE : // Parsing a new chunk, read size next.
-                                                            TEST_CHUNK_STATE; // Done with the size, now read the data.
-                        }
+                                                            TEST_CHUNK_STATE; // Done with the size, now read the data.
+                        }
                         else
                         {
                             chunkBuffer.position--; // Push back byte read.
                             state = SIZE_STATE;
                         }
                     }
-
+
                     if (chunkBuffer.bytesAvailable == 0)
                         break;
                 }
                 if (state == LF_STATE)
-                {
-                    value = chunkBuffer.readByte();
-
+                {
+                    value = chunkBuffer.readByte();
+
                     if (value == LF_BYTE)
                         state = (dataBytesToRead == -1) ? SIZE_STATE : // Parsing a new chunk, read size next.
-                                                          TEST_CHUNK_STATE; // Done with the size, now read the data.
-
-                    if (chunkBuffer.bytesAvailable == 0)
+                                                          TEST_CHUNK_STATE; // Done with the size, now read the data.
+
+                    if (chunkBuffer.bytesAvailable == 0)
                         break;
                 }
                 if (state == SIZE_STATE)
-                {
+                {
                     value = chunkBuffer.readByte();
                     if (value == NULL_BYTE) // Ignore the null heartbeat byte.
                         continue;
-
+
                     // CR indicates that we've finished reading the size.
                     if (value == CR_BYTE)
                     {
@@ -538,25 +544,25 @@
                     {
                         hexChunkSize += HEX_DIGITS[value];
                     }
-
-                    if (chunkBuffer.bytesAvailable == 0)
+
+                    if (chunkBuffer.bytesAvailable == 0)
                         break;
                 }
                 if (state == TEST_CHUNK_STATE)
-                {
-                    // A leading NULL byte in a chunk body indicates that the chunk should be read
-                    // off the network but not processed further.
+                {
+                    // A leading NULL byte in a chunk body indicates that the chunk should be read
+                    // off the network but not processed further.
                     value = chunkBuffer.readByte();
                     dataOffset = chunkBuffer.position;
                     state = (value == NULL_BYTE) ? SKIP_STATE :
                                                    DATA_STATE;
                     chunkBuffer.position--;
-
-                    if (chunkBuffer.bytesAvailable == 0)
-                        break;
+
+                    if (chunkBuffer.bytesAvailable == 0)
+                        break;
                 }
                 if (state == SKIP_STATE)
-                {
+                {
                     if (chunkBuffer.bytesAvailable >= dataBytesToRead)
                     {
                         chunkBuffer.position += dataBytesToRead; // Skip over all bytes for the chunk.
@@ -564,16 +570,16 @@
                     }
                     else // Wait for the rest of the chunk to arrive.
                     {
-                        break;
+                        break;
                     }
                 }
                 if (state == DATA_STATE)
-                {
+                {
                     if (chunkBuffer.bytesAvailable >= dataBytesToRead)
-                    {
+                    {
                         var message:IMessage = readMessage();
                         // Dispatch a message event from the channel.
-                        // Prepare for the next chunk.
+                        // Prepare for the next chunk.
                         if (message != null)
                         {
                             if ((message is AcknowledgeMessage) && (AcknowledgeMessage(message).correlationId == OPEN_COMMAND))
@@ -596,8 +602,8 @@
                             {
 							    channel.dispatchEvent(MessageEvent.createEvent(MessageEvent.MESSAGE, message));
                             }
-                        }
-						state = RESET_BUFFER_STATE;
+                        }
+						state = RESET_BUFFER_STATE;
                     }
                     else // Wait for the rest of the chunk to arrive.
                     {
@@ -605,41 +611,41 @@
                     }
                 }
                 if (state == RESET_BUFFER_STATE)
-                {
+                {
                     if (chunkBuffer.bytesAvailable > 0) // Copy unparsed bytes for the next chunk over into a new buffer.
                     {
                         for (var j:int = 0; j < chunkBuffer.bytesAvailable; j++)
                             var x:int = chunkBuffer[j];
-
+
                         var tempBuffer:ByteArray = new ByteArray();
                         tempBuffer.objectEncoding = ObjectEncoding.AMF3;
                         chunkBuffer.readBytes(tempBuffer, 0, chunkBuffer.bytesAvailable);
                         chunkBuffer = tempBuffer;
-                    }
+                    }
                     else // Nothing left in the buffer; let the GC collect the bytes for the old chunk.
                     {
                         chunkBuffer = new ByteArray();
                         chunkBuffer.objectEncoding = ObjectEncoding.AMF3;
                     }
                     state = INIT_STATE;
-
-                    if (chunkBuffer.bytesAvailable == 0)
+
+                    if (chunkBuffer.bytesAvailable == 0)
                         break;
                 }
-            }
+            }
         }
     }

     /**
      *  Handles security error events dispatched by the streaming connection by
      *  re-dispatching the event for the channel.
-     *
+     *
      *  @param event The SecurityErrorEvent.
      */
     private function streamSecurityErrorHandler(event:SecurityErrorEvent):void
     {
 		dispatchEvent(event);
-    }
+    }
 }

 }


Transferred from the Adobe Open Source Subversion Repository

Revision: 12969
Author:   egeorgie@adobe.com
Date:     2009-12-15T21:56:35.581732Z

Log Message:
-----------
Cleanup FIXMEs.

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/effects/supportClasses/AnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/TextBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/Group.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/supportClasses/LayoutElementHelper.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ToggleButtonBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Path.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/primitives/Rect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/spark/src/spark/components/supportClasses/ListItemDragProxy.as</path>

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -1370,7 +1370,6 @@
      */
     public function get maxHeight():Number
     {
-        // FIXME (egeorgie): Examine this logic, Make this arbitrarily large (use UIComponent max)
         return !isNaN(_maxHeight) ? _maxHeight : DEFAULT_MAX_HEIGHT;
     }

@@ -1410,7 +1409,6 @@
      */
     public function get maxWidth():Number
     {
-        // FIXME (egeorgie): Examine this logic, Make this arbitrarily large (use UIComponent max)
         return !isNaN(_maxWidth) ? _maxWidth : DEFAULT_MAX_WIDTH;
     }

@@ -1574,7 +1572,6 @@
      */
     public function get minHeight():Number
     {
-        // FIXME (egeorgie): Examine this logic
         return !isNaN(_minHeight) ? _minHeight : DEFAULT_MIN_HEIGHT;
     }

@@ -1614,7 +1611,6 @@
      */
     public function get minWidth():Number
     {
-        // FIXME (egeorgie): Examine this logic
         return !isNaN(_minWidth) ? _minWidth : DEFAULT_MIN_WIDTH;
     }

@@ -3784,11 +3780,14 @@
      */
     public function validateDisplayList():void
     {
-        // FIXME (egeorgie): Turn this off for now because we need to clear all of the DisplayObject
-        // graphics and thus need to redraw each graphic element
-        // Put this back in once we implement drawingAPI2
-        /* if (!invalidateDisplayListFlag)
-            return; */
+        // Don't check the invalidateDisplayListFlag for early return, the Group takes care to
+        // call validateDisplayList() only for elements that need to redraw.
+        // Note that even when invalidateDisplayListFlag is false for a particular element,
+        // the Group may still call it to redraw if it shares a display object with another
+        // element that is redrawing.
+        // if (!invalidateDisplayListFlag)
+        //    return;
+
         var wasInvalid:Boolean = invalidateDisplayListFlag;
         invalidateDisplayListFlag = false;

@@ -3800,7 +3799,6 @@
             applyComputedTransform();
         }

-        // FIXME (egeorgie): don't clear the graphics if the GraphicElement is invisible and explicitly owns the DO?
         // If we are the first in the sequence, clear the graphics:
         if (displayObjectSharingMode != DisplayObjectSharingMode.USES_SHARED_OBJECT)
         {


prop function nesting

prop function nesting

--- src/com/kemsky/filters/prop.as
+++ src/com/kemsky/filters/prop.as
@@ -2,7 +2,7 @@
 {
     /**
      * Creates function that extracts named property from value
-     * @param name name of the property
+     * @param name name of the property (nested properties are supported: 'prop.prop1.prop2')
      * @return function function that extracts named property from value
      */
     public function prop(name:String):Function


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

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

 package mx.utils
 {


Attack issue where initiating a pending BEF could cause the current BEF to never report completion.

--- HLSPlugin/src/com/kaltura/hls/HLSIndexHandler.as
+++ HLSPlugin/src/com/kaltura/hls/HLSIndexHandler.as
@@ -667,7 +667,7 @@
 			else if(!checkAnySegmentKnowledge(currentManifest.segments) && !isBestEffortActive())
 			{
 				trace("(B) Encountered a live/VOD manifest with no timebase knowledge, request newest segment via best effort path for quality " + reloadingQuality);
-				_pendingBestEffortRequest = initiateBestEffortRequest(getLastSequence() + 1, lastQuality, currentManifest.segments, currentManifest);
+				_pendingBestEffortRequest = initiateBestEffortRequest(getLastSequence() + 1, targetQuality, currentManifest.segments, currentManifest);
 			}

 			if(!checkAnySegmentKnowledge(newManifest.segments) || !checkAnySegmentKnowledge(currentManifest.segments))
@@ -1680,7 +1680,7 @@
 		private function initiateBestEffortRequest(nextFragmentId:uint, quality:int, segments:Vector.<HLSManifestSegment>, localManifest:HLSManifestParser):HTTPStreamRequest
 		{
 			// if we had a pending BEF download, invalidate it
-			stopListeningToBestEffortDownload();
+			stopListeningToBestEffortDownload(true);

 			// clean up best effort state
 			_bestEffortDownloadReply = null;
@@ -1704,6 +1704,12 @@
 			{
 				trace("initiateBestEffortRequest - NO SEGMENTS FOUND, ABORTING initiateBestEffortRequest");
 				return null;
+			}
+
+			if(newMan.streamEnds == false && segments.length > 0 && nextFragmentId <= segments[0].id)
+			{
+				trace("initiateBestEffortRequest - Forcing to live edge to avoid eternal BEF.");
+				nextFragmentId = segments[segments.length - 1].id;
 			}

 			var nextSeg:HLSManifestSegment = getSegmentBySequenceCapped(segments, nextFragmentId);
@@ -1779,10 +1785,16 @@
 		 *
 		 * if we had a pending BEF download, invalid it
 		 **/
-		private function stopListeningToBestEffortDownload():void
+		private function stopListeningToBestEffortDownload(cleanup:Boolean = false):void
 		{
 			if(_bestEffortDownloaderMonitor != null)
 			{
+				if(_bestEffortDownloader != null && cleanup)
+				{
+					trace("stopListeningToBestEffortDownload - firing skip event to keep rest of system in sync");
+					skipBestEffortFetch(_lastBestEffortFetchURI, _bestEffortDownloader as HLSHTTPStreamDownloader);
+				}
+
 				trace("stopListeningToBestEffortDownload - Disconnecting existing best effort monitor.");
 				_bestEffortDownloaderMonitor.removeEventListener(HTTPStreamingEvent.DOWNLOAD_COMPLETE, onBestEffortDownloadComplete);
 				_bestEffortDownloaderMonitor.removeEventListener(HTTPStreamingEvent.DOWNLOAD_ERROR, onBestEffortDownloadError);
@@ -1913,7 +1925,7 @@
 			trace("Best effort download complete " + event.toString());

 			// unregister the listeners
-			stopListeningToBestEffortDownload();
+			stopListeningToBestEffortDownload(false);

 			trace("Start download parse");
 			bufferAndParseDownloadedBestEffortBytes(event.url, event.downloader as HLSHTTPStreamDownloader);
@@ -1959,7 +1971,7 @@
 			trace("Best effort download error " + event.toString());

 			// unregister our listeners
-			stopListeningToBestEffortDownload();
+			stopListeningToBestEffortDownload(false);

 			if(_bestEffortDownloadReply != null)
 			{


small getRectangle optimization

small getRectangle optimization

--- YCanvasMapLibrary/src/main/actionscript/sk/yoz/ycanvas/map/utils/PolygonUtils.as
+++ YCanvasMapLibrary/src/main/actionscript/sk/yoz/ycanvas/map/utils/PolygonUtils.as
@@ -37,15 +37,18 @@
             var maxY:Number = points[1];
             for(var i:uint = 0, length:uint = points.length / 2; i < length; i++)
             {
-                var x:Number = points[i * 2];
-                var y:Number = points[i * 2 + 1];
+                var xi:uint = i * 2;
+                var x:Number = points[xi];
                 if(x < minX)
                     minX = x;
-                if(x > maxX)
+                else if(x > maxX)
                     maxX = x;
+
+                var yi:uint = xi + 1;
+                var y:Number = points[yi];
                 if(y < minY)
                     minY = y;
-                if(y > maxY)
+                else if(y > maxY)
                     maxY = y;
             }
             return new Rectangle(minX, minY, maxX - minX, maxY - minY);


Fix bug with falling back to default action.

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

--- src/as/com/threerings/cast/ComponentDataPack.as
+++ src/as/com/threerings/cast/ComponentDataPack.as
@@ -103,7 +103,8 @@
                     aset = TileSet(actseq.tileset.clone());
                     aset.setImagePath(cpath);
                 } else if (_zip.getEntry(dpath)) {
-                    aset = TileSet(TileSet(_actions.get(ActionSequence.DEFAULT_SEQUENCE)).clone());
+                    actseq = _actions.get(ActionSequence.DEFAULT_SEQUENCE);
+                    aset = TileSet(actseq.tileset.clone());
                     aset.setImagePath(dpath);
                     _setcache.put(dpath, aset);
                 }