Transferred from the Adobe Open Source Subversion Repository

Revision: 6290
Author:   chaase@adobe.com
Date:     2009-04-27T18:42:18.522446Z

Log Message:
-----------
Added animation behavior to scrollbars and sliders. For now, animation only happens based on mouse events (key events still have previous non-animated behavior).
Also, added shift-click behavior to ScrollBar, behaves essentially like a Slider, going to the clicked location instead of paging toward it.
Finally, fixed an unrelated bug in Animation where Animates set up with a MotionPath with no time=0 keyframe would not run properly.

These changes necessitate changes in Mustella (need to listen to 'change' event on scrollbars/sliders, not 'updateComplete' or 'click', since the animations may cause several valid 'updateComplete' events on the way to the final changed value.

QE Notes: Mustella changes in ScrollBar and Slider necessary. See note above. Changes have been made and are awaiting this checkin to update Mustella tests.
Doc Notes: None
Bugs:
Reviewer: Hans and Glenn (scrolling/sliding changes), Jason (Animation bug changes)
tests: checkintests, Mustella ScrollBar, Slider, Scroller (all required minor changes to pass)

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/Range.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/Animation.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/VScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/TrackBase.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/HScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/ScrollBar.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/KeyFrame.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/tests/flex4/flex4test_testScript.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/defaults.css</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/AnimationTarget.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/ScrollbarFrenzy.mxml</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/ScrollBarBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/ScrollBarBase.as
@@ -17,10 +17,19 @@
 import flash.events.TimerEvent;
 import flash.geom.Point;
 import flash.utils.Timer;
+
+import mx.events.FlexEvent;
+import mx.events.PropertyChangeEvent;
+import mx.events.ResizeEvent;
+import mx.events.SandboxMouseEvent;
+
 import spark.components.Button;
 import spark.core.IViewport;
-import mx.events.PropertyChangeEvent;
-import mx.events.ResizeEvent;
+import spark.effects.SimpleMotionPath;
+import spark.effects.animation.Animation;
+import spark.effects.easing.IEaser;
+import spark.effects.easing.Linear;
+import spark.effects.easing.Sine;

 /**
  *  @copy spark.components.supportClasses.GroupBase#symbolColor
@@ -31,6 +40,32 @@
  *  @productversion Flex 4
  */
 [Style(name="symbolColor", type="uint", format="Color", inherit="yes")]
+
+/**
+ *  Number of milliseconds after the first pageevent
+ *  until subsequent page events occur.
+ *
+ *  @default 500
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+[Style(name="repeatDelay", type="Number", format="Time", inherit="no")]
+
+/**
+ *  Number of milliseconds between page events
+ *  if the user presses and holds the mouse on the track.
+ *
+ *  @default 35
+ *
+ *  @langversion 3.0
+ *  @playerversion Flash 10
+ *  @playerversion AIR 1.5
+ *  @productversion Flex 4
+ */
+[Style(name="repeatInterval", type="Number", format="Time", inherit="no")]

 /**
  *  The ScrollBar class helps to position
@@ -76,11 +111,6 @@
     //
     //--------------------------------------------------------------------------

-    // TODO (chaase): These constants should go away and be replaced by a more
-    // flexible mechanism of setting the repeat parameters
-    private const REPEAT_DELAY:Number = 500;
-    private const REPEAT_INTERVAL:Number = 35;
-
     //--------------------------------------------------------------------------
     //
     //  Constructor
@@ -141,6 +171,44 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     * @private
+     * this one animator is used by both paging and stepping animations. It
+     * is responsible for running the repeated operation (animating from the beginning
+     * of the repeat to whenever it ends or the user stops the repeating action).
+     */
+    private var _animator:Animation = null;
+    private function get animator():Animation
+    {
+        if (_animator)
+            return _animator;
+        _animator = new Animation();
+        var animTarget:AnimationTarget = new AnimationTarget(animationUpdateHandler);
+        animTarget.endFunction = animationEndHandler;
+        _animator.animationTarget = animTarget;
+        return _animator;
+    }
+
+    /**
+     * @private
+     * These variables track whether we are currently involved in a stepping
+     * animation, and which direction we are stepping
+     */
+    private var steppingDown:Boolean;
+    private var steppingUp:Boolean;
+
+    /**
+     * @private
+     * This variable tracks whether we are currently running an animation to
+     * do a single page() operation. This is used to end that operation properly
+     * if another operation interrupts it.
+     */
+    private var animatingSinglePage:Boolean;
+
+
+    private static var easyInLinearEaser:IEaser = new Linear(.1);
+    private static var deceleratingSineEaser:IEaser = new Sine(0);
+
     // TODO: transient?
     // Direction indicator for current track-scrolling operations
     private var trackScrollDown:Boolean;
@@ -183,6 +251,47 @@
     // Properties
     //
     //--------------------------------------------------------------------------
+
+    //---------------------------------
+    // smoothScrolling
+    //---------------------------------
+    /**
+     * This property determines the default value smoothScrolling
+     * for all ScrollBars.
+     *
+     * @default true
+     * @see #smoothScrolling
+     */
+    public static var smoothScrollingDefault:Boolean = true;
+
+    //---------------------------------
+    // smoothScrolling
+    //---------------------------------
+
+    /**
+     * @private
+     * Backing storage for the smoothScrolling property
+     */
+    private var _smoothScrolling:Boolean = smoothScrollingDefault;
+
+    /**
+     * This property determines whether the scrollbar will animate
+     * smoothly when paging and stepping. When false, page and step
+     * operations will jump directly to the paged/stepped locations.
+     * When true, the scrollbar, and any content it is scrolling, will
+     * animate to that location.
+     *
+     * @default true
+     */
+    public function get smoothScrolling():Boolean
+    {
+        return _smoothScrolling;
+    }
+
+    public function set smoothScrolling(value:Boolean):void
+    {
+        _smoothScrolling = value;
+    }

     //---------------------------------
     // pageSize
@@ -298,6 +407,20 @@
     /**
      *  @private
      */
+    private function startAnimation(duration:Number, valueTo:Number,
+        easer:IEaser, startDelay:Number = 0):void
+    {
+        animator.stop();
+        animator.duration = duration;
+        animator.easer = easer;
+        animator.motionPaths = [new SimpleMotionPath("value", value, valueTo)];
+        animator.startDelay = startDelay;
+        animator.play();
+    }
+
+    /**
+     *  @private
+     */
     override protected function commitProperties():void
     {
         super.commitProperties();
@@ -320,14 +443,22 @@

         if (instance == decrementButton)
         {
-            decrementButton.addEventListener("buttonDown",
-                                            decrementButton_buttonDownHandler);
+            decrementButton.addEventListener(FlexEvent.BUTTON_DOWN,
+                                             button_buttonDownHandler);
+            decrementButton.addEventListener(MouseEvent.ROLL_OVER,
+                                             button_rollOverHandler);
+            decrementButton.addEventListener(MouseEvent.ROLL_OUT,
+                                             button_rollOutHandler);
             decrementButton.autoRepeat = true;
         }
         else if (instance == incrementButton)
         {
-            incrementButton.addEventListener("buttonDown",
-                                            incrementButton_buttonDownHandler);
+            incrementButton.addEventListener(FlexEvent.BUTTON_DOWN,
+                                             button_buttonDownHandler);
+            incrementButton.addEventListener(MouseEvent.ROLL_OVER,
+                                             button_rollOverHandler);
+            incrementButton.addEventListener(MouseEvent.ROLL_OUT,
+                                             button_rollOutHandler);
             incrementButton.autoRepeat = true;
         }
         else if (instance == track)
@@ -348,13 +479,21 @@

         if (instance == decrementButton)
         {
-            decrementButton.removeEventListener("buttonDown",
-                                            decrementButton_buttonDownHandler);
+            decrementButton.removeEventListener(FlexEvent.BUTTON_DOWN,
+                                                button_buttonDownHandler);
+            decrementButton.removeEventListener(MouseEvent.ROLL_OVER,
+                                                button_rollOverHandler);
+            decrementButton.removeEventListener(MouseEvent.ROLL_OUT,
+                                                button_rollOutHandler);
         }
         else if (instance == incrementButton)
         {
-            incrementButton.removeEventListener("buttonDown",
-                                            incrementButton_buttonDownHandler);
+            incrementButton.removeEventListener(FlexEvent.BUTTON_DOWN,
+                                                button_buttonDownHandler);
+            incrementButton.removeEventListener(MouseEvent.ROLL_OVER,
+                                                button_rollOverHandler);
+            incrementButton.removeEventListener(MouseEvent.ROLL_OUT,
+                                                button_rollOutHandler);
         }
         else if (instance == track)
         {
@@ -385,7 +524,7 @@

     /**
      *  Adds or subtracts pageSize from value.
-     *  For an add, the new value is the closets multiple of pageSize
+     *  For an add, the new value is the closest multiple of pageSize
      *  that is larger than the current value.
      *  For an subtraction, the new value
      *  is the closets multiple of pageSize that is
@@ -402,10 +541,20 @@
      */
     public function page(increase:Boolean = true):void
     {
+        var val:Number;
         if (increase)
-            setValue(nearestValidValue(value + pageSize, pageSize));
+            val = value + pageSize;
         else
-            setValue(nearestValidValue(value - pageSize, pageSize));
+            val = value - pageSize;
+        if (smoothScrolling) {
+            startAnimation(getStyle("repeatInterval"), val, Linear.getInstance());
+            animatingSinglePage = true;
+        }
+        else
+        {
+            setValue(val);
+            dispatchEvent(new Event("change"));
+        }
     }

     /**
@@ -527,40 +676,78 @@
     //---------------------------------

     /**
-     *  @private
-     *  Handle a click on the up button of the scroll bar. This
-     *  should up one step.
-     */
-    protected function decrementButton_buttonDownHandler(event:Event):void
-    {
-        var oldValue:Number = value;
-
-        step(false); // up
-
-        if (value != oldValue)
-        {
-            positionThumb(valueToPosition(value));
-            dispatchEvent(new Event("change"));
-        }
-    }
-
-    /**
-     *  @private
-     *  Handle a click on the down button of the scroll bar. This
-     *  should down one step.
-     */
-    protected function incrementButton_buttonDownHandler(event:Event):void
-    {
-        var oldValue:Number = value;
-
-        step(true); // down
-
-        if (value != oldValue)
-        {
-            positionThumb(valueToPosition(value));
-            dispatchEvent(new Event("change"));
-        }
-    }
+     *  Handle a click on the increment or decrement button of the scroll bar.
+     *  This should cause a stepping operation, which is repeated if held down.
+     *  The delay before repetition begins and the delay between repeated events
+     *  are determined by the repeatDelay and
+     *  repeatInterval styles of the underlying Button objects.
+     *
+     *  @see spark.components.Button
+     */
+    protected function button_buttonDownHandler(event:Event):void
+    {
+        // Noop if we're currently running a stepping animation. We get
+        // called repeatedly here due to the button's autoRepeat
+        if (!steppingDown && !steppingUp)
+        {
+            var increment:Boolean = (event.target == incrementButton);
+            var oldValue:Number = value;
+
+            // TODO (chaase): first step is non-animated, just to simplify the delayed
+            // start of the animated stepping. Seems okay, but worth thinking
+            // about whether we should animate the first step too
+            step(increment);
+
+            if (value != oldValue)
+            {
+                positionThumb(valueToPosition(value));
+                dispatchEvent(new Event("change"));
+            }
+
+            if (smoothScrolling)
+            {
+                systemManager.getSandboxRoot().addEventListener(MouseEvent.MOUSE_UP,
+                    button_buttonUpHandler, true /*useCapture*/);
+                systemManager.getSandboxRoot().addEventListener(
+                    SandboxMouseEvent.MOUSE_UP_SOMEWHERE, button_buttonUpHandler);
+                // TODO (chaase): what's a reasonable stepSize? Can't use viewport's because
+                // it can vary widely depending on what items are in the view. Can't use
+                // default stepSize because it can be quite small if not changed by
+                // the scroller. 1/10th of pageSize seems reasonable, but will result
+                // in a different total duration with animated vs. non-animated stepping
+                animateStepping(increment ? maximum : minimum, pageSize/10);
+            }
+            return;
+        }
+    }
+
+    /**
+     *  Handle releasing the increment or decrement button of the scrollbar.
+     *  This ends the stepping operation started by the original buttonDown
+     *  event on the button.
+     */
+    protected function button_buttonUpHandler(event:Event):void
+    {
+        if (steppingDown || steppingUp)
+        {
+            if (animator.isPlaying)
+            {
+                animationEndHandler(animator);
+            }
+            else
+            {
+                // probably shouldn't get here, but just in case
+                steppingUp = steppingDown = false;
+            }
+            // stop even if !isPlaying - it might just be startDelayed
+            animator.stop();
+
+            systemManager.getSandboxRoot().removeEventListener(MouseEvent.MOUSE_UP,
+                button_buttonUpHandler, true /*useCapture*/);
+            systemManager.getSandboxRoot().removeEventListener(
+                SandboxMouseEvent.MOUSE_UP_SOMEWHERE, button_buttonUpHandler);
+        }
+    }

     //---------------------------------
     // Track dragging handlers
@@ -580,7 +767,13 @@
         // which would push this enabled check into the child/skin components
         if (!enabled)
             return;
-
+
+        // Make sure we finish any running page animation before starting
+        // a new one. end() will set value to the desired paged-to value for
+        // that running animation
+        if (animatingSinglePage)
+            animator.end();
+
         var pt:Point = new Point(event.stageX, event.stageY);
         // Cache original event location for use on later repeating events
         trackPosition = track.globalToLocal(pt);
@@ -591,14 +784,35 @@

         var oldValue:Number = value;

+        if (event.shiftKey)
+        {
+            // shift-click positions jumps to the clicked location instead
+            // of incrementally paging
+            var slideDuration:Number = getStyle("slideDuration");
+            // Adjust the position - we want the clicked position to be at the
+            // half-way point of the thumb when it's done moving
+            newScrollPosition -= thumbSize/2;
+            newScrollValue = positionToValue(newScrollPosition);
+            var adjustedValue:Number = nearestValidValue(newScrollValue, valueInterval);
+            if (smoothScrolling &&
+                slideDuration != 0 &&
+                (maximum - minimum) != 0)
+            {
+                // Animate the shift-click operation
+                startAnimation(slideDuration *
+                    (Math.abs(value - newScrollValue) / (maximum - minimum)),
+                    adjustedValue, deceleratingSineEaser);
+            }
+            else
+            {
+                setValue(adjustedValue);
+                dispatchEvent(new Event("change"));
+            }
+            return;
+        }
+
         page(trackScrollDown);

-        if (value != oldValue)
-        {
-            positionThumb(valueToPosition(value));
-            dispatchEvent(new Event("change"));
-        }
-
         trackScrolling = true;

         // Add event handlers for drag and up events
@@ -608,7 +822,7 @@
             MouseEvent.MOUSE_UP, track_mouseLeaveHandler, true);
         systemManager.stage.addEventListener(Event.MOUSE_LEAVE,
                             track_mouseLeaveHandler);
-
+
         // TODO (chaase): consider using the repeat behavior of Button
         // to handle track-down repetition, instead of doing it with a
         // custom Timer. As long as we can distinguish the first
@@ -618,7 +832,7 @@
         // continues to hold the mouse button down
         if (!trackScrollTimer)
         {
-            trackScrollTimer = new Timer(REPEAT_DELAY, 1);
+            trackScrollTimer = new Timer(getStyle("repeatDelay"), 1);
             trackScrollTimer.addEventListener(TimerEvent.TIMER,
                                               trackScrollTimerHandler);
         }
@@ -627,12 +841,73 @@
             // Note that this behavior, resetting the initial delay, differs
             // from Flex3 but is more consistent with general application
             // scrollbar behavior
-            trackScrollTimer.delay = REPEAT_DELAY;
+            trackScrollTimer.delay = getStyle("repeatDelay");
             trackScrollTimer.repeatCount = 1;
         }
         trackScrollTimer.start();
     }

+    protected function animatePaging(newValue:Number, pageSize:Number):void
+    {
+        animatingSinglePage = false;
+        if (trackScrollDown)
+            newValue = newValue - pageSize;
+        // TODO (chaase): hard-coding easing behavior, how to style it?
+        startAnimation(
+            getStyle("repeatInterval") * (Math.abs(newValue - value) / pageSize),
+            nearestValidValue(newValue, pageSize), Linear.getInstance());
+    }
+
+    protected function animateStepping(newValue:Number, stepSize:Number):void
+    {
+        steppingDown = (newValue > value);
+        steppingUp = !steppingDown;
+        // TODO (chaase): we're using ScrollBar's repeatInterval for animated
+        // stepping, but Button's repeatInterval for non-animated stepping
+        // TODO (chaase): think about the total duration for the animation. This
+        // calculation
+        // TODO (chaase): hard-coding easing behavior, how to style it?
+        startAnimation(
+            getStyle("repeatInterval") * (Math.abs(newValue - value) / stepSize),
+            newValue, easyInLinearEaser, getStyle("repeatDelay"));
+    }
+
+    /**
+     * @private
+     * Handles events from the Animation that runs the page, step,
+     * and shift-click smooth-scrolling operations.
+     * Just call setValue() with the current animated value.
+     */
+    private function animationUpdateHandler(animation:Animation):void
+    {
+        setValue(animation.currentValue["value"]);
+    }
+
+    /**
+     * @private
+     * Handles end event from the Animation that runs the page, step,
+     * and shift-click animations.
+     * We dispatch the "change" event at this time, after the animation
+     * is done.
+     */
+    private function animationEndHandler(animation:Animation):void
+    {
+        if (trackScrolling)
+            trackScrolling = false;
+
+        if (steppingDown || steppingUp)
+        {
+            // If we're animating stepping, end on a final real step call in the
+            // appropriate direction, ensuring that we stop on a content
+            // item boundary
+            step(steppingDown);
+            steppingUp = steppingDown = false;
+            animator.startDelay = 0;
+        }
+        animatingSinglePage = false;
+        dispatchEvent(new Event("change"));
+    }
+
     /**
      *  @private
      *  This gets called at certain intervals to repeat the scroll
@@ -654,7 +929,6 @@
             if (range == 0)
                 return;

-            //if (newScrollValue <= (value + (thumbSize / trackSize) * range))
             if ((value + pageSize) > newScrollValue)
                 return;
         }
@@ -663,6 +937,15 @@
             return;
         }

+        if (smoothScrolling)
+        {
+            // This gets called after an initial repeateDelay on a paging
+            // operation, but after that we're just running the animation. This
+            // function is only called repeatedly in the non-smoothScrolling case.
+            animatePaging(newScrollValue, pageSize);
+            return;
+        }
+
         var oldValue:Number = value;

         page(trackScrollDown);
@@ -677,7 +960,7 @@
         {
             // If this was the first time repeating, set the Timer to
             // repeat indefinitely with an appropriate interval delay
-            trackScrollTimer.delay = REPEAT_INTERVAL;
+            trackScrollTimer.delay = getStyle("repeatInterval");
             trackScrollTimer.repeatCount = 0;
         }
     }
@@ -731,6 +1014,17 @@

         if (trackScrollTimer)
             trackScrollTimer.reset();
+
+        if (smoothScrolling && !animatingSinglePage)
+        {
+            if (animator.isPlaying)
+            {
+                animationEndHandler(animator);
+            }
+            // Stop it regardless, in case the animation is startDelayed and
+            // thus not 'playing', but still active
+            animator.stop();
+        }
     }

     /**
@@ -740,7 +1034,7 @@
      */
     private function track_rollOverHandler(event:MouseEvent):void
     {
-        if (trackScrolling)
+        if (trackScrolling && trackScrollTimer)
             trackScrollTimer.start();
     }

@@ -751,9 +1045,31 @@
      */
     private function track_rollOutHandler(event:MouseEvent):void
     {
-        if (trackScrolling)
+        if (trackScrolling && trackScrollTimer)
             trackScrollTimer.stop();
     }
+
+    /**
+     *  @private
+     *  Resume the increment/decrement animation if the mouse enters the
+     *  button area
+     */
+    private function button_rollOverHandler(event:MouseEvent):void
+    {
+        if (steppingUp || steppingDown)
+            animator.resume();
+    }
+
+    /**
+     *  @private
+     *  Pause the increment/decrement animation if the mouse leaves the
+     *  button area
+     */
+    private function button_rollOutHandler(event:MouseEvent):void
+    {
+        if (steppingUp || steppingDown)
+            animator.pause();
+    }
 }

 }


Fixed issue where a loadedr defined as type IExternalDependencyLoader would fail to load

--- FlexUnit4/src/org/flexunit/internals/dependency/ExternalDependencyResolver.as
+++ FlexUnit4/src/org/flexunit/internals/dependency/ExternalDependencyResolver.as
@@ -60,10 +60,10 @@

 		private function executeDependencyLoader( loaderField:Field, targetField:Field ):void {
 			if ( loaderField && loaderField.isStatic ) {
-				var loaderFieldInfo:Klass = new Klass( loaderField.type );
+				var loaderObj:Object = loaderField.getObj( null );

-				if ( loaderFieldInfo.implementsInterface( IExternalDependencyLoader ) ) {
-					var token:ExternalDependencyToken = ( loaderField.getObj( null ) as IExternalDependencyLoader ).retrieveDependency( clazz );
+				if ( loaderObj is IExternalDependencyLoader ) {
+					var token:ExternalDependencyToken = ( loaderObj as IExternalDependencyLoader ).retrieveDependency( clazz );
 					token.targetField = targetField;
 					token.addResolver( this );


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

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


fix Matrix4x4 translation*, rotation* and scale* to preserve values consitency by storing them in separate components property and updating them only when required

--- src/aerys/minko/type/math/Matrix4x4.as
+++ src/aerys/minko/type/math/Matrix4x4.as
@@ -6,6 +6,7 @@
 	import aerys.minko.type.binding.IWatchable;

 	import flash.geom.Matrix3D;
+	import flash.geom.Orientation3D;
 	import flash.geom.Utils3D;
 	import flash.geom.Vector3D;

@@ -13,102 +14,138 @@

 	public class Matrix4x4 implements IWatchable
 	{
-		private static const FACTORY			: Factory			= Factory.getFactory(Matrix4x4);
-		private static const RAD2DEG			: Number			= 180. / Math.PI;
-		private static const DEG2RAD			: Number			= Math.PI / 180.;
-		private static const EPSILON			: Number			= 1e-100;
-
-		private static const TMP_VECTOR			: Vector.<Number>	= new <Number>[];
-		private static const TMP_VECTOR4		: Vector4			= new Vector4();
-		private static const TMP_MATRIX			: Matrix4x4			= new Matrix4x4();
-
-		private var _data		: Vector.<Number>		= new <Number>[];
-		private var _numPushes	: int					= 0;
-
-		private var _locked		: Boolean				= false;
-		private var _changed	: Signal				= new Signal('Matrix4x4.changed');
-
-		minko_math var _matrix	: flash.geom.Matrix3D	= new flash.geom.Matrix3D();
+		private static const FACTORY				: Factory			= Factory.getFactory(Matrix4x4);
+		private static const RAD2DEG				: Number			= 180. / Math.PI;
+		private static const DEG2RAD				: Number			= Math.PI / 180.;
+		private static const EPSILON				: Number			= 1e-100;
+
+		private static const TMP_VECTOR				: Vector.<Number>	= new <Number>[];
+		private static const TMP_VECTOR4			: Vector4			= new Vector4();
+		private static const TMP_MATRIX				: Matrix4x4			= new Matrix4x4();
+
+		private static const COMPONENT_TRANSLATION	: uint				= 1;
+		private static const COMPONENT_ROTATION		: uint				= 2;
+		private static const COMPONENT_SCALE		: uint				= 4;
+		private static const COMPONENT_ALL			: uint				= 7;
+
+		private var _data				: Vector.<Number>	= new <Number>[];
+		private var _rotation			: Vector4			= new Vector4();
+		private var _scale				: Vector4			= new Vector4();
+		private var _translation		: Vector4			= new Vector4();
+		private var _invalidComponents	: uint				= 7;
+		private var _numPushes			: uint				= 0;
+
+		private var _locked		: Boolean					= false;
+		private var _changed	: Signal					= new Signal('Matrix4x4.changed');
+
+		minko_math var _matrix	: flash.geom.Matrix3D		= new flash.geom.Matrix3D();

 		public function get translationX() : Number
 		{
-			return getTranslation(TMP_VECTOR4).x;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_TRANSLATION);
+
+			return _translation.x;
 		}
 		public function set translationX(value : Number) : void
 		{
-			setTranslation(value, NaN, NaN);
+			setTranslation(value, _translation.y, _translation.z);
 		}

 		public function get translationY() : Number
 		{
-			return getTranslation(TMP_VECTOR4).y;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_TRANSLATION);
+
+			return _translation.y;
 		}
 		public function set translationY(value : Number) : void
 		{
-			setTranslation(NaN, value, NaN);
+			setTranslation(_translation.x, value, _translation.z);
 		}

 		public function get translationZ() : Number
 		{
-			return getTranslation(TMP_VECTOR4).z;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_TRANSLATION);
+
+			return _translation.z;
 		}
 		public function set translationZ(value : Number) : void
 		{
-			setTranslation(NaN, NaN, value);
+			setTranslation(_translation.x, _translation.y, value);
 		}

 		public function get rotationX() : Number
 		{
-			return getRotation(TMP_VECTOR4).x;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_ROTATION);
+
+			return _rotation.x;
 		}
 		public function set rotationX(value : Number) : void
 		{
-			setRotation(value, NaN, NaN);
+			setRotation(value, _rotation.y, _rotation.z);
 		}

 		public function get rotationY() : Number
 		{
-			return getRotation(TMP_VECTOR4).y;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_ROTATION);
+
+			return _rotation.y;
 		}
 		public function set rotationY(value : Number) : void
 		{
-			setRotation(NaN, value, NaN);
+			setRotation(_rotation.x, value, _rotation.z);
 		}

 		public function get rotationZ() : Number
 		{
-			return getRotation(TMP_VECTOR4).z;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_ROTATION);
+
+			return _rotation.z;
 		}
 		public function set rotationZ(value : Number) : void
 		{
-			setRotation(NaN, NaN, value);
+			setRotation(_rotation.x, _rotation.y, value);
 		}

 		public function get scaleX() : Number
 		{
-			return getScale(TMP_VECTOR4).x;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_SCALE);
+
+			return _scale.x;
 		}
 		public function set scaleX(value : Number) : void
 		{
-			setScale(value, NaN, NaN);
+			setScale(value, _scale.y, _scale.z);
 		}

 		public function get scaleY() : Number
 		{
-			return getScale(TMP_VECTOR4).y;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_SCALE);
+
+			return _scale.y;
 		}
 		public function set scaleY(value : Number) : void
 		{
-			setScale(NaN, value, NaN);
+			setScale(_scale.x, value, _scale.z);
 		}

 		public function get scaleZ() : Number
 		{
-			return getScale(TMP_VECTOR4).z;
+			if (_invalidComponents)
+				updateComponents(COMPONENT_SCALE);
+
+			return _scale.z;
 		}
 		public function set scaleZ(value : Number) : void
 		{
-			setScale(NaN, NaN, value);
+			setScale(_scale.x, _scale.y, value);
 		}

 		public function get determinant(): Number
@@ -153,6 +190,7 @@
 			);

 			_matrix.copyRawDataFrom(TMP_VECTOR);
+			_invalidComponents = COMPONENT_ALL;

 			if (!_locked)
 				_changed.execute(this);
@@ -198,7 +236,10 @@

 			_numPushes--;
 			if (restore)
+			{
 				_matrix.copyRawDataFrom(_data, _numPushes * 16);
+				_invalidComponents = COMPONENT_ALL;
+			}

 			if (!_locked)
 				_changed.execute(this);
@@ -208,6 +249,7 @@

 		public function prepend(m : Matrix4x4) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.prepend(m._matrix);

 			if (!_locked)
@@ -218,6 +260,7 @@

 		public function append(m : Matrix4x4) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.append(m._matrix);

 			if (!_locked)
@@ -230,6 +273,7 @@
 									   axis			: Vector4,
 									   pivotPoint	: Vector4	= null) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.appendRotation(
 				radians * RAD2DEG,
 				axis._vector,
@@ -246,6 +290,7 @@
 									y	: Number	= 1.,
 									z	: Number	= 1.) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.appendScale(x, y, z);

 			if (!_locked)
@@ -256,6 +301,7 @@

 		public function appendUniformScale(scale : Number) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.appendScale(scale, scale, scale);

 			if (!_locked)
@@ -280,9 +326,12 @@
 										axis		: Vector4,
 										pivotPoint	: Vector4 = null) : Matrix4x4
 		{
-			_matrix.prependRotation(radians * RAD2DEG,
-									axis._vector,
-									pivotPoint ? pivotPoint._vector : null);
+			_invalidComponents = COMPONENT_ALL;
+			_matrix.prependRotation(
+				radians * RAD2DEG,
+				axis._vector,
+				pivotPoint ? pivotPoint._vector : null
+			);

 			if (!_locked)
 				_changed.execute(this);
@@ -294,6 +343,7 @@
 									 y	: Number = 1.,
 									 z	: Number = 1.) : Matrix4x4
 		{
+			_invalidComponents = COMPONENT_ALL;
 			_matrix.prependScale(x, y, z);

 			if (!_locked)
@@ -527,16 +577,14 @@

 		public function setTranslation(x : Number, y : Number, z : Number) : Matrix4x4
 		{
-			var position : Vector4	= getTranslation(TMP_VECTOR4);
-
-			if (!isNaN(x))
-				position.x = x;
-			if (!isNaN(y))
-				position.y = y;
-			if (!isNaN(z))
-				position.z = z;
-
-			_matrix.copyColumnFrom(3, position._vector);
+			if (_invalidComponents)
+				updateComponents(COMPONENT_TRANSLATION);
+
+			_translation.x = x;
+			_translation.y = y;
+			_translation.z = z;
+
+			_matrix.copyColumnFrom(3, _translation._vector);

 			if (!_locked)
 				_changed.execute(this);
@@ -557,22 +605,32 @@

 		public function setRotation(x : Number, y : Number, z : Number) : Matrix4x4
 		{
-			var components 	: Vector.<Vector3D>	= _matrix.decompose();
+			if (_invalidComponents)
+				updateComponents();
+
+			_rotation._vector.setTo(x, y, z);
+
+			_matrix.recompose(new <Vector3D>[
+				_translation._vector,
+				_rotation._vector,
+				_scale._vector
+			]);
+
+			if (!_locked)
+				_changed.execute(this);
+
+			return this;
+		}
+
+		public function getRotationQuaternion(output : Vector4 = null) : Vector4
+		{
+			var components 	: Vector.<Vector3D>	= _matrix.decompose(Orientation3D.QUATERNION);
 			var rotation	: Vector3D			= components[1];

-			if (!isNaN(x))
-				rotation.x = x;
-			if (!isNaN(y))
-				rotation.y = y;
-			if (!isNaN(z))
-				rotation.z = z;
-
-			_matrix.recompose(components);
-
-			if (!_locked)
-				_changed.execute(this);
-
-			return this;
+			output ||= new Vector4();
+			output._vector = components[1];
+
+			return output;
 		}

 		public function getScale(output : Vector4 = null) : Vector4
@@ -589,17 +647,20 @@

 		public function setScale(x : Number, y : Number, z : Number) : Matrix4x4
 		{
-			var components 	: Vector.<Vector3D>	= _matrix.decompose();
-			var scale		: Vector3D			= components[2];
-
-			if (!isNaN(x))
-				scale.x = x;
-			if (!isNaN(y))
-				scale.y = y;
-			if (!isNaN(z))
-				scale.z = z;
-
-			_matrix.recompose(components);
+			if (_invalidComponents)
+				updateComponents();
+
+			_scale.x = x;
+			_scale.y = y;
+			_scale.z = z;
+
+			_scale._vector.setTo(x, y, z);
+
+			_matrix.recompose(new <Vector3D>[
+				_translation._vector,
+				_rotation._vector,
+				_scale._vector
+			]);

 			if (!_locked)
 				_changed.execute(this);
@@ -961,5 +1022,24 @@

 			return this;
 		}
+
+		private function updateComponents(components : uint = 7) : void
+		{
+			if (_invalidComponents & components & COMPONENT_TRANSLATION)
+			{
+				_invalidComponents &= ~COMPONENT_TRANSLATION;
+				getTranslation(_translation);
+			}
+			if (_invalidComponents & components & COMPONENT_ROTATION)
+			{
+				_invalidComponents &= ~COMPONENT_ROTATION;
+				getRotation(_rotation);
+			}
+			if (_invalidComponents & components & COMPONENT_SCALE)
+			{
+				_invalidComponents &= ~COMPONENT_SCALE;
+				getScale(_scale);
+			}
+		}
 	}
 }


Work around a bug in Tamarin. Sorry for the ugly. Hopefully it's temporary.

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

--- src/as/com/threerings/presents/dobj/DEvent.as
+++ src/as/com/threerings/presents/dobj/DEvent.as
@@ -32,6 +32,10 @@
 {
     public function DEvent (targetOid :int = 0)
     {
+        // TODO: Remove when https://bugzilla.mozilla.org/show_bug.cgi?id=433103 is fixed
+        if (UNSET_OLD_ENTRY == null) {
+            UNSET_OLD_ENTRY = new DummyEntry();
+        }
         _toid = targetOid;
     }

@@ -112,6 +116,6 @@
     /** The oid of the object that is the target of this event. */
     protected var _toid :int;

-    protected static const UNSET_OLD_ENTRY :DSet_Entry = new DummyEntry();
+    protected static var UNSET_OLD_ENTRY :DSet_Entry;
 }
 }


Adjust performance test thresholds.

Adjust performance test thresholds.

--- src/avm2/tests/performance/c4/basic.as
+++ src/avm2/tests/performance/c4/basic.as
@@ -19,9 +19,11 @@
   var K_BIGGER = 128 * K;
   var K_BIG = 2 * 1024 * K;

-  var JS_FAST = 200;
-  var AS_FAST = JS_FAST * 5;
-  var VERY_SLOW = 5000;
+  /**
+   * Make sure all tests run at least twice as fast as this threshold to
+   * account for slower machines and slowdowns in Tamarin.
+   */
+  var THRESHOLD = 500 * 5;

   (function () {
     var s = 0;
@@ -41,10 +43,10 @@
       s = s + i;
       s = s + i;
     }
-    trace(s);
-  })();
-
-  clockUnder(AS_FAST, "Adding Numbers");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Adding Numbers");

   (function () {
     var s = "";
@@ -56,10 +58,10 @@
       s = s + i;
       s = s + i;
     }
-    trace(s.length);
-  })();
-
-  clockUnder(AS_FAST, "Adding Strings + Numbers");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Adding Strings + Numbers");

   (function () {
     var s = 0;
@@ -71,10 +73,10 @@
       }
       s += a.length;
     }
-    trace(s);
-  })();
-
-  clockUnder(AS_FAST, "Arrays AS3 Namespace Push");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Arrays AS3 Namespace Push");

   (function () {
     var s = 0;
@@ -86,10 +88,10 @@
       }
       s += a.length;
     }
-    trace(s);
-  })();
-
-  clockUnder(AS_FAST, "Arrays AS3 Prototype Push");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Arrays AS3 Prototype Push");

   class C {
     function foo() {
@@ -104,10 +106,10 @@
     for (var i = 0; i < COUNT; i++) {
       s += c.foo();
     }
-    trace(s);
-  })();
-
-  clockUnder(AS_FAST, "Class Method Call");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Class Method Call");

   (function () {
     var s = 0;
@@ -117,10 +119,10 @@
     for (var i = 0; i < COUNT; i++) {
       s += v[0].foo();
     }
-    trace(s);
-  })();
-
-  clockUnder(AS_FAST, "Class Method Call - Vector");
+    return s;
+  })();
+
+  clockUnder(THRESHOLD, "Class Method Call - Vector");

   (function () {
     var s = 0;
@@ -132,7 +134,7 @@
     }
   })();

-  clockUnder(AS_FAST, "Set Vector");
+  clockUnder(THRESHOLD, "Set Vector");

   class A {
     static const staticConstant = 123;
@@ -147,7 +149,7 @@
         s += staticConstant;
         s += staticVar;
       }
-      clockUnder(AS_FAST, "Access Static Constant / Var");
+      clockUnder(THRESHOLD, "Access Static Constant / Var");
       return s;
     }

@@ -157,7 +159,7 @@
         s += instanceConstant;
         s += instanceVar;
       }
-      clockUnder(AS_FAST, "Access Instance Constant / Var");
+      clockUnder(THRESHOLD, "Access Instance Constant / Var");
       return s;
     }
   }
@@ -169,7 +171,7 @@
         s += staticConstant;
         s += staticVar;
       }
-      clockUnder(AS_FAST, "Access Static Constant / Var");
+      clockUnder(THRESHOLD, "Access Static Constant / Var");
       return s;
     }
     function instanceFunctionB() {
@@ -178,7 +180,7 @@
         s += instanceConstant;
         s += instanceVar;
       }
-      clockUnder(AS_FAST, "Access Instance Constant / Var");
+      clockUnder(THRESHOLD, "Access Instance Constant / Var");
       return s;
     }
   }
@@ -196,7 +198,7 @@
       s += Number.MAX_VALUE;
       s += Math.abs(i);
     }
-    clockUnder(AS_FAST, "Math.abs()");
+    clockUnder(THRESHOLD, "Math.abs()");
     return s;
   })();

@@ -215,8 +217,48 @@
       s += (new D(2, 3)).foobar;
       s += (new D(2, 3)).y;
     }
-    clockUnder(AS_FAST, "Object allocation with property access");
-    return s;
+    clockUnder(THRESHOLD, "Object allocation with property access");
+    return s;
+  })();
+
+  dynamic class E {
+    var e = 0;
+    E.prototype.foo = function() {
+      var e : E = this;
+      e.vir = 123;
+    };
+    function bar() {
+      return 1;
+    }
+  }
+
+  (function () {
+    var s = 0;
+    var e = new E();
+    for (var i = 0; i < 100; i++) {
+      s += e.foo();
+    }
+    clockUnder(THRESHOLD, "Coerced this access.");
+    return s;
+  })();
+
+  (function (e) {
+    var s = 0;
+    for (var i = 0; i < 100000; i++) {
+      e.e += e.bar();
+    }
+    clockUnder(THRESHOLD, "ICs.");
+    return s;
+  })(new E());
+
+  (function () {
+    var a = [];
+    for (var i = 0; i < 1000000; i++) {
+      a[i] = i;
+      a[i] += a[i];
+    }
+    clockUnder(THRESHOLD, "Array Access.");
+    return a.length;
   })();

 }


Add a toString() method to com consumer objects.

--- axscript/mscom.as
+++ axscript/mscom.as
@@ -149,6 +149,10 @@
 	// are used internally
 	public class IUnknown
 	{
+		public function toString():String
+		{
+			return "[COM Object]"
+		}
 	}

 	// The rest of these 'derive' from IUnknown...


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

--- frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkVideoDisplayAutomationImpl.as
+++ frameworks/projects/automation_spark/src/spark/automation/delegates/components/SparkVideoDisplayAutomationImpl.as
@@ -1,3 +1,13 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  ADOBE SYSTEMS INCORPORATED
+//  Copyright 2010 Adobe Systems Incorporated
+//  All Rights Reserved.
+//
+//  NOTICE: Adobe permits you to use, modify, and distribute this file
+//  in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////

 package spark.automation.delegates.components
 {


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

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

 package mx.managers.marshalClasses
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 22564
Author:   tkraikit@adobe.com
Date:     2011-09-14T19:50:07.656843Z

Log Message:
-----------
Update ASDoc "@productversion Flex 4.5.2" => "@productversion Flex 4.6"

Modified Paths:
--------------
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/SpinnerListSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/LabelItemRenderer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/collections/OnDemandDataProvider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/DateSpinnerSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/TabbedViewNavigator.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/framework/src/mx/graphics/BitmapScaleMode.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/framework/src/mx/core/FlexVersion.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/ArrowDirection.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/globalization/supportClasses/FormatPattern.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/DefaultTransparentNavigationButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/supportClasses/DropDownController.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/core/ISoftKeyboardHintClient.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/CalloutArrow.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/CalloutButton.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutActionBarSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/calendarClasses/YearProvider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/supportClasses/SkinnableTextBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/calendarClasses/DateSelectorDisplayMode.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/ToggleSwitch.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/DefaultBeveledBackButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/SpinnerListScrollerSkin.mxml</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/ScrollSnappingMode.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/supportClasses/StageTextSkinBase.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/DefaultTransparentActionButtonSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/StageTextAreaSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/SpinnerListContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/List.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/ToggleSwitchSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/calendarClasses/DateAndTimeProvider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutViewNavigatorSkin.as</path>
<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/CalloutPosition.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/Scroller.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/preloaders/SplashScreenImageSource.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/DataGroup.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/components/SkinnablePopUpContainer.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/SplitViewNavigator.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/Callout.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/StageTextInputSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/spark/src/spark/collections/NumericDataProvider.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/supportClasses/StyleableStageText.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/preloaders/SplashScreenImage.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobilecomponents/src/spark/components/calendarClasses/DateSpinnerItemRenderer.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/spark/src/spark/globalization/supportClasses/CalendarDate.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/CalloutSkin.as</path>
<path kind="file" action="M">/private/flex/sdk/branches/4.y/frameworks/projects/mobiletheme/src/spark/skins/mobile/DefaultBeveledActionButtonSkin.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/spark/src/spark/globalization/supportClasses/DateTimeFormatterEx.as</path>

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

--- frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as
+++ frameworks/projects/mobilecomponents/src/spark/components/ContentBackgroundAppearance.as
@@ -21,7 +21,7 @@
  *
  *  @langversion 3.0
  *  @playerversion AIR 3
- *  @productversion Flex 4.5.2
+ *  @productversion Flex 4.6
  */
 public final class ContentBackgroundAppearance
 {
@@ -36,7 +36,7 @@
      *
      *  @langversion 3.0
      *  @playerversion AIR 3
-     *  @productversion Flex 4.5.2
+     *  @productversion Flex 4.6
      */
     public static const INSET:String = "inset";

@@ -45,7 +45,7 @@
      *
      *  @langversion 3.0
      *  @playerversion AIR 3
-     *  @productversion Flex 4.5.2
+     *  @productversion Flex 4.6
      */
     public static const FLAT:String = "flat";

@@ -57,7 +57,7 @@
      *
      *  @langversion 3.0
      *  @playerversion AIR 3
-     *  @productversion Flex 4.5.2
+     *  @productversion Flex 4.6
      */
     public static const NONE:String = "none";
 }


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

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


Started to modularize the app

Started to modularize the app

git-svn-id: 27326a786375daad9d33dc990c6f272e4c8f567c@751 fda5f131-174c-0410-8613-e0905860106b

--- org.openwms/trunk/source/org.openwms.client.flex.app/src/main/flex/org/openwms/web/flex/client/model/ModelLocator.as
+++ org.openwms/trunk/source/org.openwms.client.flex.app/src/main/flex/org/openwms/web/flex/client/model/ModelLocator.as
@@ -1,109 +0,0 @@
-/*
- * openwms.org, the Open Warehouse Management System.
- *
- * This file is part of openwms.org.
- *
- * openwms.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * openwms.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software. If not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.openwms.web.flex.client.model
-{
-
-    import com.adobe.cairngorm.model.IModelLocator;
-    import mx.collections.ArrayCollection;
-    import org.openwms.common.domain.system.usermanagement.User;
-
-    /**
-     * A ModelLocator.
-     *
-     * @author Heiko Scherrer
-     * @version $Revision$
-     */
-    [Bindable]
-    public class ModelLocator implements IModelLocator
-    {
-
-        public static const MAIN_VIEW_STACK_LOGIN_VIEW:uint = 0;
-        public static const MAIN_VIEW_STACK_EMPTY_VIEW:uint = 1;
-        public static const MAIN_VIEW_STACK_MODULE_MGMT_VIEW:uint = 2;
-        public static const MAIN_VIEW_STACK_LOCATION_VIEW:uint = 3;
-        public static const MAIN_VIEW_STACK_LOCATIONGROUP_VIEW:uint = 4;
-        public static const MAIN_VIEW_STACK_USER_MGMT_VIEW:uint = 5;
-        public static const MAIN_VIEW_STACK_TRANSPORTUNIT_VIEW:uint = 6;
-        public var mainViewStackIndex:uint = MAIN_VIEW_STACK_EMPTY_VIEW;
-
-        public const UPLOAD_URL:String = "/openwms/upload";
-        public const DIRECTORY_NAME:String = "data";
-
-        public var allLocationGroups:ArrayCollection = new ArrayCollection();
-        public var allLocations:ArrayCollection = new ArrayCollection();
-        public var allTransportUnits:ArrayCollection = new ArrayCollection();
-        public var allModules:ArrayCollection = new ArrayCollection();
-        public var allUsers:ArrayCollection = new ArrayCollection();
-        public var selectedUser:User = null;
-        public var locationGroupTree:TreeNode;
-        public var image:Object;
-        private var views:Array = new Array();
-
-        private static var instance:ModelLocator;
-
-        /**
-         * Used to construct the Singleton instance.
-         */
-        public function ModelLocator(enforcer:SingletonEnforcer)
-        {
-        }
-
-        /**
-         * Return the instance of ModelLocator which is implemented
-         * as Singleton.
-         */
-        public static function getInstance():ModelLocator
-        {
-            if (instance == null)
-            {
-                instance = new ModelLocator(new SingletonEnforcer);
-            }
-            return instance;
-        }
-
-        /**
-         * Access the views array and add the viewObject to the defined
-         * position. The postion is mandatory for the viewStack.
-         */
-        public static function addView(pos:int, view:Object):void
-        {
-
-        }
-
-        /**
-         * Search the viewObject from the array of views and remove it.
-         */
-        public static function removeView(view:Object):void
-        {
-        }
-
-        /**
-         * Shift the view to a new position.
-         **/
-        public static function moveView(destPos:int, view:Object):void
-        {
-        }
-    }
-}
-
-class SingletonEnforcer
-{
-}


Transferred from the Adobe Open Source Subversion Repository

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

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

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

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

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

 package mx.core.windowClasses
 {