Transferred from the Adobe Open Source Subversion Repository

Revision: 2805
Author:   chaase@adobe.com
Date:     2008-08-11T20:37:18.700675Z

Log Message:
-----------
First checkin for the "Arbitrary Type Interpolation" feature. This feature has a rewritten Tween class (now named flex.effects.Animation). This class supports the old Tween capabilities, but adds functionality such as the ability to supply alternate interpolation objects (to allow animation of non-Number types), a new Easing API, and new 'repeat behavior' that will allow terser looping or reversing animations. The existing new effects were slightly changed to use the new Animation class (instead of Tween), and the superclass of the new effects, AnimateProperties (renamed 'Animate'), is now a subclass of Effect (not TweenEffect).

Added various new interpolation and easing classes, along with the new packages flex.effects.interpolation and flex.effects.easing. Also added new color-interpolation effect, 'Tint'.

Expect slight tweaks to the API during i7, but the bulk of the functionality and API changes are being checked in now.

Reviewed by Jason S.
Testing: checkintests & mustella tests/Effects (passed)

Modified Paths:
--------------
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Animation.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/development/eclipse/flex/flex4test/.actionScriptProperties</path>
<path kind="file" action="A">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/EffectsProperties.mxml</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/mxml-2009-manifest.xml</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/AnimatePropertiesInstance.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/AnimateProperties.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/gumbo-manifest.xml</path>
<path kind="file" action="A">/flex/sdk/trunk/development/eclipse/flex/flex4test/src/components/AnimationPropertiesForm.mxml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/Effect.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/FadeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Fade.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing/Constant.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing/Power.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation/ColorInterpolator.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/AnimateInstance.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/TintInstance.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing/IEaser.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Tint.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Animate.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation/NumberArrayInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/effects/EffectInstance.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation/IInterpolator.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation/NumberInterpolator.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/IAnimationTarget.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/ResizeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Resize.as</path>
<path kind="dir" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/easing/Sine.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/effectClasses/MoveInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/Move.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/events/AnimationEvent.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/flex/effects/interpolation/ArrayInterpolator.as</path>

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

--- frameworks/projects/spark/src/spark/effects/Resize.as
+++ frameworks/projects/spark/src/spark/effects/Resize.as
@@ -14,7 +14,7 @@

 import mx.effects.IEffectInstance;

-public class Resize extends AnimateProperties
+public class Resize extends Animate
 {
     include "../core/Version.as";


- change: removed debugging log

- change: removed debugging log

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

--- src/reprise/core/FocusManager.as
+++ src/reprise/core/FocusManager.as
@@ -161,7 +161,6 @@

 		protected function document_focusIn(event : FocusEvent) : void
 		{
-			log("event: " + (event.target));
 			if (m_inFocusHandling)
 			{
 				return;


fix comment for asdoc

fix comment for asdoc

--- src/com/google/analytics/utils/Environment.as
+++ src/com/google/analytics/utils/Environment.as
@@ -322,7 +322,7 @@
         /**
          * Returns the flash version object representation of the application.
          *
This object contains the attributes major, minor, build and revision :

-         *
Example :
+         *
Example :

          *

          * import com.google.analytics.utils.Environment ;
          *


Set channel to null when sound stops playing

--- SoundMain.as
+++ SoundMain.as
@@ -97,6 +97,7 @@
      */
     private function stop(id:int):void {
         sounds[id].channel.stop();
+        sounds[id].channel = null;
     }

     /**


Transferred from the Adobe Open Source Subversion Repository

Revision: 17393
Author:   chiedozi@adobe.com
Date:     2010-08-19T20:52:22.429864Z

Log Message:
-----------
Fixed a bug in ViewNavigatorSkin where the contentGroup would be incorrectly sized when the action bar was hidden.

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

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorSkin.as

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

--- frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorSkin.as
+++ frameworks/projects/mobiletheme/src/spark/skins/mobile/ViewNavigatorSkin.as
@@ -160,7 +160,7 @@
     {
         super.updateDisplayList(unscaledWidth, unscaledHeight);

-        var actionBarHeight:Number;
+        var actionBarHeight:Number = 0;

         // The action bar is always placed at 0,0 and stretches the entire
         // width of the navigator
@@ -195,7 +195,6 @@
     		if (contentGroup.includeInLayout)
     		{
     			var contentGroupHeight:Number = Math.max(unscaledHeight - actionBarHeight, 0);
-

                 contentGroup.setLayoutBoundsSize(unscaledWidth, contentGroupHeight);
                 contentGroup.setLayoutBoundsPosition(0, actionBarHeight);


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

--- frameworks/projects/rpc/src/mx/messaging/messages/MessagePerformanceInfo.as
+++ frameworks/projects/rpc/src/mx/messaging/messages/MessagePerformanceInfo.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.messaging.messages
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 7836
Author:   chaase@adobe.com
Date:     2009-06-15T14:37:21.379918Z

Log Message:
-----------
PARB changes for effects. This includes various property renames, a couple of class renames, moving 3 classes to a sub-package, and various doc cleanups. This also includes changing a handful of Array properties to typed Vectors.

QE: This breaks Mustella due to the renames
Doc: Docs will need to be updated to reflect the changes as well
Bugs: None
Reviewer: Jason
Tests: checkintests, Thermo's transitionbug test

Modified Paths:
--------------
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/utils/BitmapUtil.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/MotionPath.as" copyfrom-rev="7748" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/MotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Power.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/EasingFraction.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/KeyFrame.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/RGBInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/HSBInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/CallAction.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateColor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Animate.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/FadeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/RepeatBehavior.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateShaderTransition.as" copyfrom-rev="7748" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateTransitionShader.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateShaderTransition.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/spark-manifest.xml</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/supportClasses/Slider.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/IInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/NumberInterpolator.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/Rotate3D.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Scale.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/CallActionInstance.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/SimpleMotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateColorInstance.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/effects/Rotate.as</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateShaderTransitionInstance.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateShaderTransitionInstance.as" copyfrom-rev="7748" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateTransitionShaderInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Wipe.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Sine.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/Move.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/interpolation/ArrayInterpolator.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/CrossFade.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/AnimateTransform.as</path>
<path kind="file" copyfrom-path="/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/SimpleMotionPath.as" copyfrom-rev="7748" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/SimpleMotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/utils/HSBColor.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/IAnimationTarget.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/Linear.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/ResizeInstance.as</path>
<path kind="file" action="A">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/Keyframe.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/CrossFade.pbk</path>
<path kind="file" action="D">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/MotionPath.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/WipeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateTransformInstance.as</path>

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

--- frameworks/projects/spark/src/spark/components/supportClasses/SliderBase.as
+++ frameworks/projects/spark/src/spark/components/supportClasses/SliderBase.as
@@ -11,6 +11,7 @@

 package spark.components.supportClasses
 {
+import __AS3__.vec.Vector;

 import flash.display.DisplayObject;
 import flash.events.Event;
@@ -29,7 +30,8 @@
 import mx.formatters.NumberFormatter;
 import mx.managers.IFocusManagerComponent;

-import spark.effects.SimpleMotionPath;
+import spark.effects.animation.MotionPath;
+import spark.effects.animation.SimpleMotionPath;
 import spark.effects.animation.Animation;
 import spark.effects.easing.Sine;
 import spark.events.TrackBaseEvent;
@@ -555,7 +557,7 @@
                 animator.stop();
                 animator.duration = slideDuration *
                     (Math.abs(value - RtempValue) / (maximum - minimum));
-                animator.motionPaths = [
+                animator.motionPaths = new <MotionPath>[
                     new SimpleMotionPath("value", value, RtempValue)];

                 dispatchEvent(new FlexEvent(FlexEvent.CHANGING));


DRYer and more elegant config application

--- src/Player.as
+++ src/Player.as
@@ -183,16 +183,12 @@
         }
       }

-      if (iconfig.keepAlive !== undefined) {
-        if (this.client) {
-          if (false === this.client.setKeepAlive(config.keepAlive)) {
-            ErrorManager.dispatchError(834);
-          } else {
-            config.keepAlive = iconfig.keepAlive;
-          }
-        } else {
-            config.keepAlive = iconfig.keepAlive;
-        }
+       if (iconfig.keepAlive !== undefined) {
+         if (this.client && !this.client.setKeepAlive(config.keepAlive)) {
+           ErrorManager.dispatchError(834);
+         } else {
+           config.keepAlive = iconfig.keepAlive;
+         }
       }

       if (iconfig.frameByFrame !== undefined) {


Cut logging back to INFO by default

Cut logging back to INFO by default

--- exporter/src/main/as/flump/export/Exporter.as
+++ exporter/src/main/as/flump/export/Exporter.as
@@ -48,6 +48,7 @@
     protected static const AUTHORED_RESOLUTION :String = "AUTHORED_RESOLUTION";

     public function Exporter (win :ExporterWindow) {
+        Log.setLevel("", Log.INFO);
         _win = win;
         _errors = _win.errors;
         _libraries = _win.libraries;


Transferred from the Adobe Open Source Subversion Repository

Revision: 12640
Author:   gosmith@adobe.com
Date:     2009-12-08T01:29:16.417988Z

Log Message:
-----------
Fixed new compiler warning in Binding.as. The compiler no longer seems to like bodyless for-loops like

for (...);

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

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/framework/src/mx/binding/Binding.as

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

--- frameworks/projects/framework/src/mx/binding/Binding.as
+++ frameworks/projects/framework/src/mx/binding/Binding.as
@@ -440,7 +440,9 @@
 		var n:uint = x.length();
 		if (n == y.length())
 		{
-			for (var i:uint = 0; i < n && x[i] === y[i]; i++);
+			for (var i:uint = 0; i < n && x[i] === y[i]; i++)
+			{
+			}
 			return i == n;
 		}
 		else


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

--- frameworks/projects/framework/src/mx/effects/IEffect.as
+++ frameworks/projects/framework/src/mx/effects/IEffect.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.effects
 {


fix TransformController.updateLocalToWorld() to use !_localToWorldTransformsInitialized[childId] instead of _localToWorldTransformsInitialized[childId] to check if the child is dirty

--- src/aerys/minko/scene/controller/TransformController.as
+++ src/aerys/minko/scene/controller/TransformController.as
@@ -82,11 +82,9 @@
 				var numChildren		: uint		= _numChildren[nodeId];
 				var firstChildId	: uint		= _firstChildId[nodeId];
 				var lastChildId		: uint		= firstChildId + numChildren;
-				var isDirty			: Boolean	= localToWorld._hasChanged ||
-												  !_localToWorldTransformsInitialized[nodeId];
-
-				localToWorld._hasChanged = false;
-				_localToWorldTransformsInitialized[nodeId] = true;
+				var isDirty			: Boolean	= localToWorld._hasChanged;
+
+                localToWorld._hasChanged = false;

 				for (var childId : uint = firstChildId; childId < lastChildId; ++childId)
 				{
@@ -95,7 +93,7 @@
 					var childIsDirty		: Boolean		= isDirty || childTransform._hasChanged
 						|| !_localToWorldTransformsInitialized[childId];

-					if (childIsDirty || _localToWorldTransformsInitialized[childId])
+					if (childIsDirty)
 					{
 						var child	: ISceneNode	= _idToNode[childId];


Applied Signal's super() solution to DeluxeSignal.

--- src/org/osflash/signals/DeluxeSignal.as
+++ src/org/osflash/signals/DeluxeSignal.as
@@ -24,29 +24,26 @@
 		protected var onceListeners:Dictionary;

 		/**
-		 * Creates a Signal instance to dispatch events on behalf of a target object.
+		 * Creates a DeluxeSignal instance to dispatch events on behalf of a target object.
 		 * @param	target The object the signal is dispatching events on behalf of.
 		 * @param	valueClasses Any number of class references that enable type checks in dispatch().
 		 * For example, new DeluxeSignal(this, String, uint)
 		 * would allow: signal.dispatch("the Answer", 42)
 		 * but not: signal.dispatch(true, 42.5)
 		 * nor: signal.dispatch()
+		 *
+		 * NOTE: Subclasses cannot call super.apply(null, valueClasses),
+		 * but this constructor has logic to support super(valueClasses).
 		 */
 		public function DeluxeSignal(target:Object, ...valueClasses)
 		{
 			_target = target;
 			listenerBoxes = [];
 			onceListeners = new Dictionary();
-			_valueClasses = valueClasses;
-
-			for (var i:int = _valueClasses.length; i--; )
-			{
-				if (!(_valueClasses[i] is Class))
-				{
-					throw new ArgumentError('Invalid valueClasses argument: item at index ' + i
-						+ ' should be a Class but was:<' + _valueClasses[i] + '>.');
-				}
-			}
+			// Cannot use super.apply(null, valueClasses), so allow the subclass to call super(valueClasses).
+			if (valueClasses.length == 1 && valueClasses[0] is Array)
+				valueClasses = valueClasses[0];
+			setValueClasses(valueClasses);
 		}

 		/** @inheritDoc */
@@ -169,6 +166,20 @@
 			return -1;
 		}

+		protected function setValueClasses(valueClasses:Array):void
+		{
+			_valueClasses = valueClasses || [];
+
+			for (var i:int = _valueClasses.length; i--; )
+			{
+				if (!(_valueClasses[i] is Class))
+				{
+					throw new ArgumentError('Invalid valueClasses argument: item at index ' + i
+						+ ' should be a Class but was:<' + _valueClasses[i] + '>.');
+				}
+			}
+		}
+
 		protected function createListenerRelationship(listener:Function, priority:int):void
 		{
 			// function.length is the number of arguments.


Removed wrong CModule free call in DTNavMesh init method.

--- as3_lib/src/recastnavigation/detour/navmesh/DTNavMesh.as
+++ as3_lib/src/recastnavigation/detour/navmesh/DTNavMesh.as
@@ -19,7 +19,6 @@
 			var data_ptr:int = mallocInt8Vector(data);
 			var dataSize:int = data.length;
 			var result:int = internal_dtNavMesh_init(ptr, data_ptr, dataSize, flags);
-			CModule.free(data_ptr);
 			return result;

 		}


SICP exercises

SICP exercises

--- test/stutter/SICPTest.as
+++ test/stutter/SICPTest.as
@@ -26,7 +26,12 @@

 		private function assert(expression:String, result:*):void
 		{
-			assertThat(eval(expression), equalTo(result));
+			assertThat(expression, eval(expression), equalTo(result));
+		}
+
+		private function ignore(expression:String):void
+		{
+			trace('ignore: ', expression);
 		}

 		[Test(order=1)]
@@ -77,5 +82,119 @@
 			eval('(label f (quote (lambda (a) (sum-of-squares (+ a 1) (* a 2)))))');
 			assert('(f 5)', 136);
 		}
+
+		[Ignore]
+		[Test(order=5)]
+		public function ch1_1_6_ex1():void
+		{
+			eval(<![CDATA[
+
+				(label abs (quote (lambda (x)
+									(cond ((> x 0) x)
+										  ((= x 0) 0)
+										  ((< x 0) (- x))
+									))))
+
+				]]>.toString());
+
+			assert('(abs 4)', 4);
+			assert('(abs 0)', 0);
+			assert('(abs -4)', 4);
+		}
+
+		[Test(order=6)]
+		public function ch1_1_6_ex2():void
+		{
+			eval(<![CDATA[
+
+				(label abs (quote (lambda (x)
+									(if (< x 0)
+										(- x)
+										x))))
+
+				]]>.toString());
+
+			assert('(abs 4)', 4);
+			assert('(abs 0)', 0);
+			assert('(abs -4)', 4);
+		}
+
+		[Test(order=7)]
+		public function ch1_1_6_ex3():void
+		{
+			eval('(label x 6)');
+			assert('(and (> x 5) (< x 10))', TRUE);
+		}
+
+		[Test(order=8)]
+		public function ch1_1_6_ex4():void
+		{
+			eval('(label x 6)');
+			assert('(or (> x 5) (< x 3))', TRUE);
+		}
+
+		[Test(order=9)]
+		public function ch1_1_6_ex5():void
+		{
+			eval('(label x nil)');
+			eval('(label y t)');
+			assert('(not x)', TRUE);
+			assert('(not y)', FALSE);
+			assert('(not (not x))', FALSE);
+		}
+
+		[Test(order=10)]
+		public function ch1_ex1_1():void
+		{
+			assert('10', 10);
+			assert('(+ 5 3 4)', 12);
+			assert('(- 9 1)', 8);
+			assert('(/ 6 2)', 3);
+			assert('(+ (* 2 4) (- 4 6))', 6);
+			eval('(label a 3)');
+			eval('(label b (+ a 1)');
+			assert('(+ a b (* a b))', 19);
+
+			assert(<![CDATA[
+
+				(if (and (> b a) (< b (* a b)))
+    				b
+    				a)
+
+				]]>.toString(), eval('b'));
+
+			// cond not yet implemented
+			ignore(<![CDATA[
+
+				(cond ((= a 4) 6)
+					  ((= b 4) (+ 6 7 a))
+					  (else 25))
+
+				]]>.toString());
+
+			assert('(+ 2 (if (> b a) b a))', 6);
+		}
+
+		[Ignore]
+		[Test(order=11)]
+		public function ch1_ex1_3():void
+		{
+			eval('(label square (quote (lambda (x) (* x x)))');
+			eval(<![CDATA[
+
+				(label sum-largest-two (quote (lambda (a b c)
+					(if (and (> a b) (> b c))
+						(+ (square a) (square b))
+						(if (and (< a b) (> b c)))
+							(+ (square b) (square c))
+							(+ (square a) (square c))
+					))))
+
+				]]>.toString());
+
+			assert('(sum-largest-two 2 3 4)', 25);
+			assert('(sum-largest-two 3 4 2)', 25);
+			assert('(sum-largest-two 4 2 3)', 25);
+		}
 	}
 }


Add Apache license header

Add Apache license header

--- frameworks/projects/framework/src/mx/utils/AndroidPlatformVersionOverride.as
+++ frameworks/projects/framework/src/mx/utils/AndroidPlatformVersionOverride.as
@@ -1,3 +1,22 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.
+//
+////////////////////////////////////////////////////////////////////////////////
+
 package mx.utils
 {
 	import flash.display.DisplayObject;


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

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

 package spark.accessibility
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 6220
Author:   smgilson@adobe.com
Date:     2009-04-23T19:19:23.764222Z

Log Message:
-----------
More ASDoc work on effects

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

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateColorInstance.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/supportClasses/RotateInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/FadeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateShaderTransitionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/ResizeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateFilterInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/WipeInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AddActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/MoveInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/CallActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/SetActionInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/AnimateTransformInstance.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/supportClasses/RemoveActionInstance.as</path>

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

--- frameworks/projects/spark/src/spark/effects/supportClasses/RotateInstance.as
+++ frameworks/projects/spark/src/spark/effects/supportClasses/RotateInstance.as
@@ -42,7 +42,7 @@
  * Flex creates an instance of this class when it plays a Rotate effect;
  * you do not create one yourself.
  *
- * @see mx.effects.Rotate
+ * @see spark.effects.Rotate
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -60,9 +60,9 @@
     //--------------------------------------------------------------------------

     /**
-     * Constructor.
+     *  Constructor.
      *
-     * @param target The Object to animate with this effect.
+     *  @param target The Object to animate with this effect.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -130,9 +130,7 @@
     [Inspectable(category="General")]

     /**
-     * The starting angle of rotation of the target object,
-     * expressed in degrees.
-     * Valid values range from 0 to 360.
+     *  @copy spark.effects.Rotate#angleFrom
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -148,16 +146,7 @@
     [Inspectable(category="General")]

     /**
-     * The ending angle of rotation of the target object,
-     * expressed in degrees.
-     * Values can be either positive or negative.
-     *
-     *
If the value of angleTo is less
-     * than the value of angleFrom,
-     * then the target rotates in a counterclockwise direction.
-     * Otherwise, it rotates in clockwise direction.
-     * If you want the target to rotate multiple times,
-     * set this value to a large positive or small negative number.

+     *  @copy spark.effects.Rotate#angleTo
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -173,8 +162,7 @@
     [Inspectable(category="General")]

     /**
-     * Degrees by which to rotate the target object. Value
-     * may be negative.
+     *  @copy spark.effects.Rotate#angleBy
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -188,9 +176,7 @@
     //----------------------------------

     /**
-     * The x-position of the center point of rotation.
-     * The target rotates around this point.
-     * The valid values are between 0 and the width of the target.
+     *  @copy spark.effects.Rotate#originX
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -204,9 +190,7 @@
     //----------------------------------

     /**
-     * The y-position of the center point of rotation.
-     * The target rotates around this point.
-     * The valid values are between 0 and the height of the target.
+     *  @copy spark.effects.Rotate#originY
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


Added color & alpha parameters to Draw.curve(). Added Draw.graphic() and Draw.entity() functions.

--- net/flashpunk/utils/Draw.as
+++ net/flashpunk/utils/Draw.as
@@ -8,6 +8,7 @@
 	import flash.geom.Rectangle;
 	import net.flashpunk.Entity;
 	import net.flashpunk.FP;
+	import net.flashpunk.Graphic;

 	/**
 	 * Static class with access to miscellanious drawing functions.
@@ -314,14 +315,54 @@
 		 * @param	y2		Y control point, used to determine the curve.
 		 * @param	x3		X finish.
 		 * @param	y3		Y finish.
-		 */
-		public static function curve(x1:int, y1:int, x2:int, y2:int, x3:int, y3:int):void
-		{
-			_graphics.clear();
-			_graphics.lineStyle(1, 0xFF0000);
+		 * @param	color	Color of the curve
+		 * @param	alpha	Alpha transparency.
+		 */
+		public static function curve(x1:int, y1:int, x2:int, y2:int, x3:int, y3:int, thick:Number = 1, color:uint = 0, alpha:Number = 1):void
+		{
+			_graphics.clear();
+			_graphics.lineStyle(thick, color, alpha);
 			_graphics.moveTo(x1 - _camera.x, y1 - _camera.y);
 			_graphics.curveTo(x2 - _camera.x, y2 - _camera.y, x3 - _camera.x, y3 - _camera.y);
 			_target.draw(FP.sprite, null, null, blend);
+		}
+
+		/**
+		 * Draws a graphic object.
+		 * @param	g		The Graphic to draw.
+		 * @param	x		X position.
+		 * @param	y		Y position.
+		 */
+		public static function graphic(g:Graphic, x:int = 0, y:int = 0):void
+		{
+			if (g.visible)
+			{
+				if (g.relative)
+				{
+					FP.point.x = x;
+					FP.point.y = y;
+				}
+				else FP.point.x = FP.point.y = 0;
+				FP.point2.x = FP.camera.x;
+				FP.point2.y = FP.camera.y;
+				g.render(_target, FP.point, FP.point2);
+			}
+		}
+
+		/**
+		 * Draws an Entity object.
+		 * @param	e					The Entity to draw.
+		 * @param	x					X position.
+		 * @param	y					Y position.
+		 * @param	addEntityPosition	Adds the Entity's x and y position to the target position.
+		 */
+		public static function entity(e:Entity, x:int = 0, y:int = 0, addEntityPosition:Boolean = false):void
+		{
+			if (e.visible && e.graphic)
+			{
+				if (addEntityPosition) graphic(e.graphic, x + e.x, y + e.y);
+				else graphic(e.graphic, x, y);
+			}
 		}

 		// Drawing information.


update SceneLoader.parseCompleteHandler() to use setTimeout() and enforce asynchronous-like signals even when loading/parsing is synchronous for the sake of consistency

--- src/aerys/minko/type/loader/SceneLoader.as
+++ src/aerys/minko/type/loader/SceneLoader.as
@@ -15,6 +15,7 @@
 	import flash.net.URLRequest;
 	import flash.utils.ByteArray;
 	import flash.utils.getQualifiedClassName;
+	import flash.utils.setTimeout;

 	public class SceneLoader implements ILoader
 	{
@@ -182,26 +183,33 @@

 		private function parse() : void
 		{
-			_parser.error.add(onParseError);
-			_parser.progress.add(onParseProgress);
-			_parser.complete.add(onParseComplete);
+			_parser.error.add(parseErrorHandler);
+			_parser.progress.add(parseProgressHandler);
+			_parser.complete.add(parseCompleteHandler);
 			_parser.parse();
 		}

-		private function onParseError(parser : IParser) : void
+		private function parseErrorHandler(parser : IParser) : void
 		{
 			_isComplete = true;
 		}

-		private function onParseProgress(parser : IParser, progress : Number) : void
+		private function parseProgressHandler(parser : IParser, progress : Number) : void
 		{
 			_progress.execute(this, 0.5 * (1 + progress));
 		}

-		private function onParseComplete(parser : IParser, loadedData : ISceneNode) : void
+		private function parseCompleteHandler(parser : IParser, loadedData : ISceneNode) : void
 		{
 			_isComplete = true;
 			_data = loadedData;
+
+			// call later to make sure the loading is always seen as asynchronous
+			setTimeout(callLaterComplete, 0, loadedData);
+		}
+
+		private function callLaterComplete(loadedData : ISceneNode) : void
+		{
 			_complete.execute(this, loadedData);
 		}
 	}


-Clone marker rendering functions are re-implemented now we use gradient fill functions to render clone markers.

--- src/org/cytoscapeweb/view/render/SBGNNodeRenderer.as
+++ src/org/cytoscapeweb/view/render/SBGNNodeRenderer.as
@@ -119,14 +119,14 @@
 			var rect:Rectangle = cns.bounds;
 			var stateAndInfoGlyphs:Array = cns.data.stateAndInfoGlyphs as Array;
 			var g:Graphics = cns.graphics;
-			var isMultimer = false;
+			var isMultimer:Boolean = false;
 			var isClone:Boolean = cns.data.clone_marker;
-			var multimerOffset = 5;
+			var multimerOffset:Number = 5;

 			// if any multimer occurs
 			if (glyphClass.indexOf(MULTIMER) > 0)
 			{
-				var str = glyphClass.substr(0, glyphClass.indexOf(MULTIMER)-1);
+				var str:String = glyphClass.substr(0, glyphClass.indexOf(MULTIMER)-1);
 				glyphClass = str;
 				isMultimer = true;
 			}
@@ -134,13 +134,22 @@
 			if (glyphClass == MACROMOLECULE || glyphClass == SIMPLE_CHEMICAL )
 			{
 				g.lineStyle(1, 0x000000, 1);
+				var cornerOffset:Number = 10;
+
+				if (glyphClass == SIMPLE_CHEMICAL)
+				{
+					cornerOffset = 100;
+				}
+
+				g.beginFill(0xffffff & fillColor, 1.0);
+				drawMolecule(cns,cns.graphics,-cns.bounds.width/2, -cns.bounds.height/2, cns.bounds.width, cns.bounds.height,isClone,cornerOffset);
+				g.endFill();

 				if (isMultimer)
 				{
-					drawMolecule(cns,rect, multimerOffset,isClone,glyphClass);
-				}
-
-				drawMolecule(cns,rect, 0,isClone,glyphClass);
+					drawMolecule(cns,cns.graphics,-cns.bounds.width/2+multimerOffset, -cns.bounds.height/2+multimerOffset, cns.bounds.width, cns.bounds.height,isClone,cornerOffset);
+				}
+
 			}
 			else if (glyphClass == SOURCE_AND_SINK || glyphClass == AND )
 			{
@@ -175,13 +184,15 @@
 			}
 			else if (glyphClass == UNSPECIFIED_ENTITY  )
 			{
+				g.beginFill(0xffffff & fillColor, 1.0);
+				drawEllipse(cns.graphics,-cns.bounds.width/2,-cns.bounds.height/2, cns.bounds.width,cns.bounds.height,isClone);
+				g.endFill();
+
 				if (isMultimer)
 				{
-					drawEllyptics(cns,multimerOffset,isClone);
-				}
-
-				drawEllyptics(cns,0,isClone);
-
+					drawEllipse(cns.graphics,-cns.bounds.width/2+multimerOffset,-cns.bounds.height/2+multimerOffset
+						,cns.bounds.width,cns.bounds.height,isClone);
+				}
 			}
 			else if (glyphClass == PHENOTYPE )
 			{
@@ -210,11 +221,29 @@
 				// dummy
 			}

+			//finally render state and info glyphs
 			renderStateAndInfoGlyphs(stateAndInfoGlyphs,cns,fillColor);

 		}

-		protected function renderStateAndInfoGlyphs(stateAndInfoGlyphs:Array,cns:CompoundNodeSprite, fillColor:uint)
+		protected function drawEllipse(g:Graphics,x:Number, y:Number,w:Number, h:Number,isClone:Boolean):void
+		{
+			if(isClone)
+			{
+				var matrix:Matrix = new Matrix();
+				matrix.createGradientBox(w, h/2, -Math.PI/2, 0, 0);
+				var colors:Array = [CLONE_MARKER_COLOR,0xFFFFFF];
+				var alphas:Array = [1,  1];
+				var ratios:Array = [127,127];
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
+				g.drawEllipse(x,y,w,h);
+				g.endFill();
+			}
+			else
+				g.drawEllipse(x,y,w,h);
+		}
+
+		protected function renderStateAndInfoGlyphs(stateAndInfoGlyphs:Array,cns:CompoundNodeSprite, fillColor:uint):void
 		{
 			var g:Graphics = cns.graphics;

@@ -227,10 +256,10 @@
 				for each (var tmpCns:CompoundNodeSprite in stateAndInfoGlyphs)
 				{
 					var childRect:Rectangle = tmpCns.data.glyph_bbox;
-					trace(tmpCns.data.id+ " " +childRect);
+
 					// Adjust the position of state variable and unit of information glyphs
-					var x = -cns.x + tmpCns.x-childRect.width/2;
-					var y = -cns.y + tmpCns.y-childRect.height/2;
+					var x:Number = -cns.x + tmpCns.x-childRect.width/2;
+					var y:Number = -cns.y + tmpCns.y-childRect.height/2;

 					if (cns.getChildByName(tmpCns.data.id)  != null )
 					{
@@ -285,14 +314,15 @@
 							g.drawRect(x,y,childRect.width, childRect.height);
 							g.endFill();

-							var tmpString = tmpCns.data.glyph_label_text;
-							if (tmpString.length > MAX_LENGTH_FOR_INFO_GLYPH_LABEL)
+							var tmpStr:String = tmpCns.data.glyph_label_text;
+
+							if (tmpStr.length > MAX_LENGTH_FOR_INFO_GLYPH_LABEL)
 							{
-								tmpString = tmpString.substr(0, MAX_LENGTH_FOR_INFO_GLYPH_LABEL);
-								tmpString += "...";
+								tmpStr = tmpStr.substr(0, MAX_LENGTH_FOR_INFO_GLYPH_LABEL);
+								tmpStr += "...";
 							}

-							myTextBox.text = tmpString;
+							myTextBox.text = tmpStr;

 							myTextBox.x = x + tmpCns.bounds.width/2-myTextBox.width/2;
 							myTextBox.y = y + tmpCns.bounds.height/2-myTextBox.height/2;
@@ -348,33 +378,34 @@
 			}
 		}

-		//renders shape especially for "macromolecules" glyph type
-		protected function drawMolecule(cns:CompoundNodeSprite ,bounds:Rectangle, multimerOffset:Number, isClone:Boolean, glyphClass:String): void
-		{
-			var g:Graphics = cns.graphics;
-			var cornerOffset:Number = 10;
-
-			if(glyphClass == SIMPLE_CHEMICAL)
-				cornerOffset = 20;
-
-			g.drawRoundRect(-bounds.width/2+multimerOffset, -bounds.height/2+multimerOffset, bounds.width, bounds.height, cornerOffset,cornerOffset);
-
-			if (isClone)
-			{
-				g.beginFill(CLONE_MARKER_COLOR,1.0);
-				drawOval(cns,true,multimerOffset);
-				//g.drawRoundRect(-bounds.width/2+multimerOffset, bounds.height/4+multimerOffset, bounds.width, bounds.height/4, 4*cornerOffset, 4*cornerOffset);
-				renderCloneMarkerText(cns, 0, bounds.height/4);
-				g.endFill();
-			}
+		protected function drawMolecule(cns:CompoundNodeSprite,g:Graphics,x:Number, y:Number,w:Number, h:Number,isClone:Boolean, roundigParameter:Number ):void
+		{
+			if(isClone)
+			{
+				var matrix:Matrix = new Matrix();
+				matrix.createGradientBox(w, h/2, -Math.PI/2, 0, 0);
+				var colors:Array = [CLONE_MARKER_COLOR,0xFFFFFF];
+				var alphas:Array = [1,  1];
+				var ratios:Array = [127,127];
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
+				g.drawRoundRect(x,y,w,h,roundigParameter,roundigParameter);
+				g.endFill();
+
+			}
+			else
+			{
+				g.drawRoundRect(x,y,w,h,roundigParameter,roundigParameter);
+			}
+
+			renderCloneMarkerText(cns, 0, cns.bounds.height/4);
 		}

 		//renders shape especially for "perturbing agent" glyph type
 		protected function drawPetrubingAgent(cns:CompoundNodeSprite, bounds:Rectangle, isClone:Boolean): void
 		{
 			var g:Graphics = cns.graphics;
-			var w  = bounds.width;
-			var h  = bounds.height;
+			var w:Number  = bounds.width;
+			var h:Number  = bounds.height;

 			g.moveTo(-w/4,0);
 			g.lineTo(-w/2,-h/2);
@@ -386,7 +417,12 @@

 			if (isClone)
 			{
-				g.beginFill(CLONE_MARKER_COLOR,1.0);
+				var matrix:Matrix = new Matrix();
+				matrix.createGradientBox(w, h/2, -Math.PI/2, 0, 0);
+				var colors:Array = [CLONE_MARKER_COLOR,0xFFFFFF];
+				var alphas:Array = [1,  1];
+				var ratios:Array = [127,127];
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
 				g.moveTo(-3*w/8,h/4);
 				g.lineTo(-w/2,h/2);
 				g.lineTo(w/2,h/2);
@@ -402,8 +438,8 @@
 		protected function drawTag(cns:CompoundNodeSprite, bounds:Rectangle, isClone:Boolean): void
 		{
 			var g:Graphics = cns.graphics;
-			var w  = bounds.width;
-			var h  = bounds.height;
+			var w:Number  = bounds.width;
+			var h:Number  = bounds.height;

 			g.moveTo(-w/2,-h/2);
 			g.lineTo(w/4,-h/2);
@@ -414,7 +450,12 @@

 			if (isClone)
 			{
-				g.beginFill(CLONE_MARKER_COLOR,1.0);
+				var matrix:Matrix = new Matrix();
+				matrix.createGradientBox(w, h/2, -Math.PI/2, 0, 0);
+				var colors:Array = [CLONE_MARKER_COLOR,0xFFFFFF];
+				var alphas:Array = [1,  1];
+				var ratios:Array = [127,127];
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
 				g.moveTo(-w/2, h/4);
 				g.lineTo(3*w/8, h/4);
 				g.lineTo(w/4,h/2);
@@ -430,8 +471,8 @@
 		protected function drawHexagon(cns:CompoundNodeSprite, bounds:Rectangle, isClone:Boolean): void
 		{
 			var g:Graphics = cns.graphics;
-			var w  = bounds.width;
-			var h  = bounds.height;
+			var w:Number  = bounds.width;
+			var h:Number  = bounds.height;

 			g.moveTo(-w/2,0);
 			g.lineTo(-w/4,-h/2);
@@ -455,100 +496,50 @@
 			}
 		}

-		protected function drawNucleicAcid(cns:CompoundNodeSprite, bounds:Rectangle, multimerOffset:Number, isClone:Boolean)
+		protected function drawNucleicAcid(cns:CompoundNodeSprite, bounds:Rectangle, multimerOffset:Number, isClone:Boolean):void
 		{
 			var g:Graphics = cns.graphics;
-			var w  = bounds.width;
-			var h  = bounds.height;
-
-			var cornerOffset = 10;
-
-			var NAFCornerOffset = 8;
-
-			g.moveTo(-w/2+multimerOffset,-h/2+multimerOffset);
-			g.lineTo(w/2+multimerOffset,-h/2+multimerOffset);
-			g.lineTo(w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
-			g.curveTo(w/2+multimerOffset,h/2+multimerOffset,w/2-NAFCornerOffset+multimerOffset,h/2+multimerOffset);
-			g.lineTo(-w/2+NAFCornerOffset+multimerOffset,h/2+multimerOffset);
-			g.curveTo(-w/2+multimerOffset,h/2+multimerOffset,-w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
-			g.lineTo(-w/2+multimerOffset,-h/2+multimerOffset);
+			var w:Number  = bounds.width;
+			var h:Number  = bounds.height;
+			var NAFCornerOffset:Number = 8;

 			if (isClone)
 			{
-				g.beginFill(CLONE_MARKER_COLOR,1.0);
-				g.moveTo(-w/2+multimerOffset,h/2-cornerOffset+multimerOffset);
-				g.lineTo(w/2+multimerOffset,h/2-cornerOffset+multimerOffset);
-				g.lineTo(w/2-cornerOffset+multimerOffset,h/2+multimerOffset);
-				g.lineTo(-w/2+cornerOffset+multimerOffset,h/2+multimerOffset);
-				g.lineTo(-w/2+multimerOffset,h/2-cornerOffset+multimerOffset);
-				g.endFill();
-
-				renderCloneMarkerText(cns, 0, h/2-cornerOffset+multimerOffset);
-
-			}
-		}
-
-		protected function drawEllyptics(cns:CompoundNodeSprite, multimerOffset:Number, isClone:Boolean)
-		{
-			var glyphClass = cns.data.glyph_class;
-			var g:Graphics = cns.graphics;
-			var rect:Rectangle = cns.bounds;
-
-			drawOval(cns, false, multimerOffset);
-
-			if (isClone)
-			{
-				g.beginFill(CLONE_MARKER_COLOR,1.0);
-				drawOval(cns, isClone, multimerOffset);
-				g.endFill();
-			}
-		}
-
-		//
-		// Change "radius" to "xRadius" and add "yRadius" argument.
-		protected function drawOval(cns:CompoundNodeSprite, isClone:Boolean, multimerOffset:Number): void
-		{
-			var centerX = 0+multimerOffset;
-			var centerY = 0+multimerOffset;
-			var xRadius = cns.bounds.width/2;
-			var yRadius = cns.bounds.height/2;
-			var sides = 200;
-			var loopBounds = sides;
-
-			if (isClone)
-			{
-				centerX = 0+multimerOffset;
-				centerY = cns.bounds.height/6+multimerOffset;
-				xRadius = 0.48*cns.bounds.width;
-				yRadius = 0.31*cns.bounds.height;
-				loopBounds = loopBounds/2;
-
-				renderCloneMarkerText(cns,centerX, centerY);
-			}
-
-			// Change "radius" to "xRadius".
-			cns.graphics.moveTo(centerX + xRadius,  centerY);
-			//
-			for(var i=0; i<=loopBounds; i++)
-			{
-				var pointRatio = i/sides;
-				var radians = pointRatio * 2 * Math.PI;
-				var xSteps = Math.cos(radians);
-				var ySteps = Math.sin(radians);
-				//
-				// Change "radius" to "xRadius".
-				var pointX = centerX + xSteps * xRadius;
-				//
-				// Change "radius" to "yRadius".
-				var pointY = centerY + ySteps * yRadius;
-				//
-				cns.graphics.lineTo(pointX, pointY);
-			}
-		}
-
-		protected function renderCloneMarkerText(cns:CompoundNodeSprite,x:Number, y:Number)
-		{
-			var labelText = cns.data.clone_label_text;
+				var matrix:Matrix = new Matrix();
+				matrix.createGradientBox(w, h/2, -Math.PI/2, 0, 0);
+				var colors:Array = [CLONE_MARKER_COLOR,0xFFFFFF];
+				var alphas:Array = [1,  1];
+				var ratios:Array = [127,127];
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
+				g.moveTo(-w/2+multimerOffset,-h/2+multimerOffset);
+				g.lineTo(w/2+multimerOffset,-h/2+multimerOffset);
+				g.lineTo(w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
+				g.curveTo(w/2+multimerOffset,h/2+multimerOffset,w/2-NAFCornerOffset+multimerOffset,h/2+multimerOffset);
+				g.lineTo(-w/2+NAFCornerOffset+multimerOffset,h/2+multimerOffset);
+				g.curveTo(-w/2+multimerOffset,h/2+multimerOffset,-w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
+				g.lineTo(-w/2+multimerOffset,-h/2+multimerOffset);
+				g.endFill();
+
+				renderCloneMarkerText(cns, 0, h/4+multimerOffset);
+
+			}
+			else
+			{
+				g.beginGradientFill(GradientType.LINEAR,colors, alphas, ratios, matrix, SpreadMethod.PAD);
+				g.moveTo(-w/2+multimerOffset,-h/2+multimerOffset);
+				g.lineTo(w/2+multimerOffset,-h/2+multimerOffset);
+				g.lineTo(w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
+				g.curveTo(w/2+multimerOffset,h/2+multimerOffset,w/2-NAFCornerOffset+multimerOffset,h/2+multimerOffset);
+				g.lineTo(-w/2+NAFCornerOffset+multimerOffset,h/2+multimerOffset);
+				g.curveTo(-w/2+multimerOffset,h/2+multimerOffset,-w/2+multimerOffset,h/2-NAFCornerOffset+multimerOffset);
+				g.lineTo(-w/2+multimerOffset,-h/2+multimerOffset);
+			}
+		}
+
+
+		protected function renderCloneMarkerText(cns:CompoundNodeSprite,x:Number, y:Number):void
+		{
+			var labelText:String = cns.data.clone_label_text;

 			if (labelText != "")
 			{
@@ -561,7 +552,7 @@
 				var myTextBox:TextSprite = new TextSprite();
 				var textField:TextField = new TextField();

-				myTextBox.color = 0x908888;
+				myTextBox.color = 0xFFFFFF;
 				myTextBox.name = cns.data.id+"c";
 				myTextBox.mouseEnabled = false;
 				myTextBox.mouseChildren = false;


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

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

 package mx.olap
 {


Transferred from the Adobe Open Source Subversion Repository

Revision: 7053
Author:   egeorgie@adobe.com
Date:     2009-05-19T04:01:43.055157Z

Log Message:
-----------
Fix bug http://bugs.adobe.com/jira/browse/SDK-21194 [ASDoc] VerticalLayout documentation issues, http://bugs.adobe.com/jira/browse/SDK-21189 [ASDoc] HorizontalLayout documentation issues, http://bugs.adobe.com/jira/browse/SDK-21179 [ASDoc] spark.components.Button Button ASDoc issues, http://bugs.adobe.com/jira/browse/SDK-21192 [ASDoc] for BasicLayout need some clarification, add extra information, http://bugs.adobe.com/jira/browse/SDK-19538 UIComponent's includeInLayout property needs documentation.

Fix: update asdoc comments.

QE Notes: None
Doc Notes: None
Bugs: SDK-21194, SDK-21189, SDK-21179, SDK-21192, SDK-19538
Reviewer:
tests: build, checkintests

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/IVisualElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/BasicLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/components/Button.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/HorizontalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/layouts/VerticalLayout.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/ILayoutElement.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>

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

--- frameworks/projects/framework/src/mx/core/UIComponent.as
+++ frameworks/projects/framework/src/mx/core/UIComponent.as
@@ -1151,7 +1151,7 @@
     IDeferredInstantiationUIComponent, IFlexDisplayObject, IFlexModule, IID,
     IInvalidating, ILayoutManagerClient, IPropertyChangeNotifier,
     IRepeaterClient, IStateClient, IAdvancedStyleClient, IToolTipManagerClient,
-    IUIComponent, IValidatorListener, IVisualElement, ILayoutElement
+    IUIComponent, IValidatorListener, IVisualElement
 {
     include "../core/Version.as";

@@ -5082,7 +5082,14 @@
     [Inspectable(category="General", defaultValue="true")]

     /**
-     *  @inheritDoc
+     *  Specifies whether this component is included in the layout of the
+     *  parent container.
+     *  If true, the object is included in its parent container's
+     *  layout and is sized and positioned by its parent container as per its layout rules.
+     *  If false, the object size and position are not affected by its parent container's
+     *  layout.
+     *
+     *  @default true
      *
      *  @langversion 3.0
      *  @playerversion Flash 9


Transferred from the Adobe Open Source Subversion Repository

Revision: 14964
Author:   klin@adobe.com
Date:     2010-03-23T21:42:26.739757Z

Log Message:
-----------
Merge revision 14945 from 4.x to trunk.

Rollback revision 14922. This seems to break components that are initially RTL and then set to LTR.

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

Modified Paths:
--------------
<path kind="dir" action="M">/flex/sdk/trunk</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/framework/src/mx/core/UIComponent.as</path>

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

--- frameworks/projects/framework/src/mx/core/UIComponent.as
+++ frameworks/projects/framework/src/mx/core/UIComponent.as
@@ -5852,7 +5852,7 @@
      *  to check if its parent's layoutDirection has changed, see commitProperties().
      *  The flag is cleared in validateDisplayList().
      */
-    private var oldLayoutDirection:String = LayoutDirection.LTR;
+    private var oldLayoutDirection:String = null;

     /**
      *  @inheritDoc


Transferred from the Adobe Open Source Subversion Repository

Revision: 18381
Author:   egeorgie@adobe.com
Date:     2010-10-29T22:14:38.033199Z

Log Message:
-----------
Fix SDK-27645 RTE occurs when scaleY = 0 and percentHeight is set in mobile text controls.

The problem was that we did not check for division by zero in the MatrixUtil fitBounds & co code.

QE notes:
Doc notes: None
Bugs: SDK-27645
Reviewer: Ryan
Tests run: mustella cyclone
Is noteworthy for integration: No

Modified Paths:
--------------
/private/flex/sdk/branches/hero_private/frameworks/projects/framework/src/mx/utils/MatrixUtil.as

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

--- frameworks/projects/framework/src/mx/utils/MatrixUtil.as
+++ frameworks/projects/framework/src/mx/utils/MatrixUtil.as
@@ -769,6 +769,9 @@
         if (-1.0e-9 < d && d < +1.0e-9)
             d = 0;

+        if (b == 0 && d == 0)
+            return null; // No solution
+
         // Handle special cases first
         if (b == 0)
             return new Point( preferredX, h / Math.abs(d) );
@@ -939,6 +942,9 @@
             c = 0;

         // Handle special cases first
+        if (a == 0 && c == 0)
+            return null; // No solution
+
         if (a == 0)
             return new Point( preferredX, w / Math.abs(c) );
         else if (c == 0)


Should check array length outside of loop.

--- frameworks/projects/framework/src/mx/utils/ObjectUtil.as
+++ frameworks/projects/framework/src/mx/utils/ObjectUtil.as
@@ -1293,10 +1293,11 @@
     private static function getCacheKey(o:Object, excludes:Array = null, options:Object = null):String
     {
         var key:String = getQualifiedClassName(o);
-
+		var length:int = excludes.length;
+
         if (excludes != null)
         {
-            for (var i:uint = 0; i < excludes.length; i++)
+            for (var i:uint = 0; i < length; i++)
             {
                 var excl:String = excludes[i] as String;
                 if (excl != null)


Transferred from the Adobe Open Source Subversion Repository

Revision: 3628
Author:   smgilson@adobe.com
Date:     2008-10-14T18:30:19.526857Z

Log Message:
-----------
ASdoc edits

Checkin Test Passed: Yes
QA: No
Bug:
Doc: No

Modified Paths:
--------------
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxCheckBox.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxButton.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/mx/components/FxToggleButton.as</path>

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

--- frameworks/projects/spark/src/spark/components/Button.as
+++ frameworks/projects/spark/src/spark/components/Button.as
@@ -11,7 +11,7 @@

 package mx.components
 {
-
+
 import flash.events.Event;
 import flash.events.FocusEvent;
 import flash.events.KeyboardEvent;
@@ -28,7 +28,7 @@
 import mx.managers.IFocusManagerComponent;

 /**
- *  Dispatched when the user presses the Button control.
+ *  Dispatched when the user presses the FxButton control.
  *  If the autoRepeat property is true,
  *  this event is dispatched repeatedly as long as the button stays down.
  *
@@ -67,7 +67,19 @@
 [DefaultProperty("content")]

 /**
- *  Documentation is not currently available.
+ *  The FxButton component is a commonly used rectangular button.
+ *  The FxButton component looks like it can be pressed.
+ *  It can have a text label, an icon, or both on its face.
+ *
+ *
Buttons typically use event listeners to perform an action
+ *  when the user selects the control. When a user clicks the mouse
+ *  on a FxButton control, and the FxButton control is enabled,
+ *  it dispatches a click event and a buttonDown event.
+ *  A button always dispatches events such as the mouseMove,
+ *  mouseOver, mouseOut, rollOver,
+ *  rollOut, mouseDown, and
+ *  mouseUp events whether enabled or disabled.

+ *
  */
 public class FxButton extends FxComponent implements IFocusManagerComponent
 {
@@ -82,29 +94,29 @@
     /**
      *  Constructor.
      */
-	public function FxButton()
-	{
-		super();
-
-		// DisplayObjectContainer properties.
-		// Setting mouseChildren to false ensures that mouse events
-		// are dispatched from the Button itself,
-		// not from its skins, icons, or TextField.
-		// One reason for doing this is that if you press the mouse button
-		// while over the TextField and release the mouse button while over
-		// a skin or icon, we want the player to dispatch a "click" event.
-		// Another is that if mouseChildren were true and someone uses
-		// Sprites rather than Shapes for the skins or icons,
-		// then we we wouldn't get a click because the current skin or icon
-		// changes between the mouseDown and the mouseUp.
-		// (This doesn't happen even when mouseChildren is true if the skins
-		// and icons are Shapes, because Shapes never dispatch mouse events;
-		// they are dispatched from the Button in this case.)
-		mouseChildren = false;
-
-		// add event listeners to the button
-		addHandlers();
-	}
+    public function FxButton()
+    {
+        super();
+
+        // DisplayObjectContainer properties.
+        // Setting mouseChildren to false ensures that mouse events
+        // are dispatched from the Button itself,
+        // not from its skins, icons, or TextField.
+        // One reason for doing this is that if you press the mouse button
+        // while over the TextField and release the mouse button while over
+        // a skin or icon, we want the player to dispatch a "click" event.
+        // Another is that if mouseChildren were true and someone uses
+        // Sprites rather than Shapes for the skins or icons,
+        // then we we wouldn't get a click because the current skin or icon
+        // changes between the mouseDown and the mouseUp.
+        // (This doesn't happen even when mouseChildren is true if the skins
+        // and icons are Shapes, because Shapes never dispatch mouse events;
+        // they are dispatched from the Button in this case.)
+        mouseChildren = false;
+
+        // add event listeners to the button
+        addHandlers();
+    }

     //--------------------------------------------------------------------------
     //
@@ -113,6 +125,9 @@
     //--------------------------------------------------------------------------

     [SkinPart(required="false")]
+    /**
+     *  A skin part that defines the  label of the button.
+     */
     public var labelField:TextBox;

     //--------------------------------------------------------------------------
@@ -121,145 +136,195 @@
     //
     //--------------------------------------------------------------------------

-	[Bindable("labelChanged")]
-	public function set label(value:String):void
-	{
-		content = value;
-		dispatchEvent(new Event("labelChanged"));
-
-		if (labelField)
-			labelField.text = label;
-	}
-	public function get label():String
-	{
-		return (content != null) ? content.toString():"";
-	}
-
-	[Bindable]
-	public var content:*
-
-	// -----------------------------------------------------------------------
-	//
-	// Public properties defining the state of the button.
-	//
-	// -----------------------------------------------------------------------
-
-	/**
-	 *  @return Returns true when the mouse cursor is over the button.
-	 */
-	public function get isHoveredOver():Boolean
-	{
-		return flags.isSet(isHoveredOverFlag);
-	}
-
-	/**
-	 *  Sets the flag indicating whether the mouse cursor
-	 *  is over the button.
-	 */
-	protected function setHoveredOver(value:Boolean):void
-	{
-		if (!flags.update(isHoveredOverFlag, value))
-			return;
-
-		invalidateSkinState();
-	}
-
-	/**
-	 *  @return Returns true when the mouse button is down and it was pressed
-	 *  while cursor was over the button.
-	 */
-	public function get isMouseCaptured():Boolean
-	{
-		return flags.isSet(isMouseCapturedFlag);
-	}
-
-	/**
-	 *  Sets the flag indicating whether the mouse has been pressed
-	 *  while cursor was over the button.
-	 */
-	protected function setMouseCaptured(value:Boolean):void
-	{
-		if (!flags.update(isMouseCapturedFlag, value))
-			return;
-
-		invalidateSkinState();
-
-		// System mouse handlers are not needed when the button is not mouse captured
-		if (!value)
-			removeSystemMouseHandlers();
-	}
-
-	/**
-	 *  @return Returns true when the button is enabled.
-	 */
-	public function get isEnabled():Boolean { return enabled; }
+    [Bindable("labelChanged")]
+    /**
+     *  Text to appear on the FxButton control.
+     *
+     *
If the label is wider than the FxButton control,
+     *  the label is truncated and terminated by an ellipsis (...).
+     *  The full label displays as a tooltip
+     *  when the user moves the mouse over the control.
+     *  If you have also set a tooltip by using the tooltip
+     *  property, the tooltip is displayed rather than the label text.

+     *
+     *  @default ""
+     */
+    public function set label(value:String):void
+    {
+        content = value;
+        dispatchEvent(new Event("labelChanged"));
+
+        if (labelField)
+            labelField.text = label;
+    }
+    /**
+     *  @private
+     */
+    public function get label():String
+    {
+        return (content != null) ? content.toString():"";
+    }
+
+    [Bindable]
+    public var content:*
+
+    // -----------------------------------------------------------------------
+    //
+    // Public properties defining the state of the button.
+    //
+    // -----------------------------------------------------------------------
+
+    /**
+     *  true when the mouse pointer is over the button.
+     */
+    public function get isHoveredOver():Boolean
+    {
+        return flags.isSet(isHoveredOverFlag);
+    }
+
+    /**
+     *  Sets the isHoveredOver property,
+     *  which indicates whether the mouse cursor is over the button.
+     *
+     *  @param value The new value of the isHoveredOver property.
+     *  This parameter can be true or false.
+     */
+    protected function setHoveredOver(value:Boolean):void
+    {
+        if (!flags.update(isHoveredOverFlag, value))
+            return;
+
+        invalidateSkinState();
+    }
+
+    /**
+     *  true if the mouse button is pressed down
+     *  while the cursor is over the button.
+     */
+    public function get isMouseCaptured():Boolean
+    {
+        return flags.isSet(isMouseCapturedFlag);
+    }
+
+    /**
+     *  Sets the isMouseCaptured property,
+     *  which indicates whether the mouse button is pressed down
+     *  while the cursor is over the button.
+     *
+     *  @param value The new value of the isMouseCaptured property.
+     *  This parameter can be true or false.
+     */
+    protected function setMouseCaptured(value:Boolean):void
+    {
+        if (!flags.update(isMouseCapturedFlag, value))
+            return;
+
+        invalidateSkinState();
+
+        // System mouse handlers are not needed when the button is not mouse captured
+        if (!value)
+            removeSystemMouseHandlers();
+    }
+
+    /**
+     *  true if the button is enabled.
+     */
+    public function get isEnabled():Boolean { return enabled; }

     /**
      *  @inheritDoc
      */
-	override public function set enabled(value:Boolean):void
-	{
-		if (isEnabled == value)
-			return;
-		super.enabled = value;
-		invalidateSkinState();
-	}
-
-	/**
-	 *  @return Returns true when key has been pressed
-	 *  while button is in focus.
-	 */
-	public function get isKeyboardPressed():Boolean
-	{
-		return flags.isSet(isKeyboardPressedFlag);
-	}
-
-	/**
-	 *  Sets the flag indicating whether key has been pressed while
-	 *  button is in focus.
-	 */
-	protected function setKeyboardPressed(value:Boolean):void
-	{
-		if (!flags.update(isKeyboardPressedFlag, value))
-			return;
-		invalidateSkinState();
-	}
-
-    /**
-     *  If false, the Button displays its down skin
+    override public function set enabled(value:Boolean):void
+    {
+        if (isEnabled == value)
+            return;
+        super.enabled = value;
+        invalidateSkinState();
+    }
+
+    /**
+     *  true if a keyboard key is pressed
+     *  while the button has focus.
+     */
+    public function get isKeyboardPressed():Boolean
+    {
+        return flags.isSet(isKeyboardPressedFlag);
+    }
+
+    /**
+     *  Sets the isKeyboardPressed property,
+     *  which indicates if a keyboard key is pressed
+     *  while the cursor is over the button.
+     *
+     *  @param value The new value of the isMouseCaptured property.
+     *  This parameter can be true or false.
+     */
+    protected function setKeyboardPressed(value:Boolean):void
+    {
+        if (!flags.update(isKeyboardPressedFlag, value))
+            return;
+        invalidateSkinState();
+    }
+
+    /**
+     *  If false, the button displays its down skin
      *  when the user presses it but changes to its over skin when
      *  the user drags the mouse off of it.
-     *  If true, the Button displays its down skin
+     *  If true, the button displays its down skin
      *  when the user presses it, and continues to display this skin
      *  when the user drags the mouse off of it.
      *
-     *
Button subclasses, such as the SliderThumb and ScrollThumb classes
-     *  or the up and down arrows of a ScrollBar, set
-     *  this property to true.

-     *
      *  @default false
      */
     public function get stickyHighlighting():Boolean
     {
-    	return flags.isSet(stickyHighlightingFlag);
-    }
+        return flags.isSet(stickyHighlightingFlag);
+    }
+
+    /**
+     *  @private
+     */
     public function set stickyHighlighting(value:Boolean):void
     {
-    	if (!flags.update(stickyHighlightingFlag, value))
-    		return;
-
-    	invalidateSkinState();
-    }
-
-	protected static const isHoveredOverFlag:uint 		= 1 << 0;
-	protected static const isMouseCapturedFlag:uint 	= 1 << 1;
-	protected static const isKeyboardPressedFlag:uint	= 1 << 2;
-	protected static const autoRepeatFlag:uint			= 1 << 3;
-	protected static const stickyHighlightingFlag:uint	= 1 << 4;
-	protected static const downEventFiredFlag:uint		= 1 << 5;
-	protected static const lastFlag:uint				= 1 << 5;
-
-	protected var flags:Flags32 = new Flags32();
+        if (!flags.update(stickyHighlightingFlag, value))
+            return;
+
+        invalidateSkinState();
+    }
+
+    /**
+     *  @private
+     */
+    protected static const isHoveredOverFlag:uint       = 1 << 0;
+    /**
+     *  @private
+     */
+    protected static const isMouseCapturedFlag:uint     = 1 << 1;
+    /**
+     *  @private
+     */
+    protected static const isKeyboardPressedFlag:uint   = 1 << 2;
+    /**
+     *  @private
+     */
+    protected static const autoRepeatFlag:uint          = 1 << 3;
+    /**
+     *  @private
+     */
+    protected static const stickyHighlightingFlag:uint  = 1 << 4;
+    /**
+     *  @private
+     */
+    protected static const downEventFiredFlag:uint      = 1 << 5;
+    /**
+     *  @private
+     */
+    protected static const lastFlag:uint                = 1 << 5;
+
+    /**
+     *  An instance of the Flags32 class used to manipulate Boolean properties.
+     */
+    protected var flags:Flags32 = new Flags32();

     //--------------------------------------------------------------------------
     //
@@ -267,200 +332,227 @@
     //
     //--------------------------------------------------------------------------

+    /**
+     *  @inheritDoc
+     */
     override protected function partAdded(partName:String, instance:Object):void
     {
-    	super.partAdded(partName, instance);
-
-    	if (instance == labelField)
-    	{
-    		labelField.text = label;
-    	}
-    }
-
-	//--------------------------------------------------------------------------
-	//
-	//  States
-	//
-	//--------------------------------------------------------------------------
-
-	private function isDown():Boolean
-	{
-		if (!isEnabled)
-			return false;
-
-		if (isKeyboardPressed)
-			return true;
-
-		if (isMouseCaptured && (isHoveredOver || stickyHighlighting))
-			return true;
-		return false;
-	}
-
-	// GetState returns a string representation of the component's state as
-	// a combination of some of its public properties
-	protected override function getUpdatedSkinState():String
-	{
-		if (!isEnabled)
-			return "disabled";
-
-		if (isDown())
-			return "down";
-
-		if (isHoveredOver || isMouseCaptured )
-			return "over";
-
-		return "up";
-	}
-
-	override protected function commitSkinState(newState:String):void
-	{
-		super.commitSkinState(newState);
-
-		// Our state has changed, see whether we need to start/stop dispatching buttonDown
-		checkDownEventConditions();
-	}
-
-	private function checkDownEventConditions():void
-	{
-		var isCurrentlyDown:Boolean = isDown();
-
-		// If down state hasn't changed, simply return
-		if (!flags.update(downEventFiredFlag, isCurrentlyDown))
-			return;
-
-		if( isCurrentlyDown )
-			dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
-
-		checkAutoRepeatTimerConditions( isCurrentlyDown );
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Event handling
-	//
-	//--------------------------------------------------------------------------
-
-	protected function addHandlers():void
-	{
-		addEventListener(MouseEvent.ROLL_OVER, mouseEventHandler);
-		addEventListener(MouseEvent.ROLL_OUT, mouseEventHandler);
-		addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler);
-		addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler);
-		// TODO EGeorgie: should revisit, we are handling the CLICK during capture phase,
-		// since instance handlers are registered before base class handlers.
-		addEventListener(MouseEvent.CLICK, mouseEventHandler, true /*useCapture*/);
-		addEventListener("enabledChanged", enableChangedHandler);
-	}
-
-	private function addSystemMouseHandlers():void
-	{
-		systemManager.addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, true /*useCapture*/);
-		systemManager.stage.addEventListener(Event.MOUSE_LEAVE, mouseEventHandler);
-	}
-
-	private function removeSystemMouseHandlers():void
-	{
-		systemManager.removeEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, true /*useCapture*/);
-		systemManager.stage.removeEventListener(Event.MOUSE_LEAVE, mouseEventHandler);
-	}
-
-	protected function enableChangedHandler(event:Event):void
-	{
-		// Since enabled is part of our state, we need to invalidate it on changes.
-		invalidateSkinState();
-	}
-
-	protected function mouseEventHandler(event:Event):void
-	{
-		var mouseEvent:MouseEvent = event as MouseEvent;
-		switch (event.type)
-		{
-			case MouseEvent.ROLL_OVER:
-			{
-				// if the user rolls over while holding the mouse button
-				if (mouseEvent.buttonDown && !isMouseCaptured)
-					return;
-					setHoveredOver(true);
-				break;
-			}
-
-			case MouseEvent.ROLL_OUT:
-			{
-				setHoveredOver(false);
-				break;
-			}
-
-			case MouseEvent.MOUSE_DOWN:
-			{
-				// When the button is down we need to listen for mouse events outsied the button so that
-				// we update the state appropriately on mouse up.  Whenever isMouseCaptured changes to false,
-				// it will take care to remove those handlers.
-				addSystemMouseHandlers();
-				setMouseCaptured(true);
-				break;
-			}
-
-			case MouseEvent.MOUSE_UP:
-			{
-				if (event.currentTarget == this)
-					setHoveredOver(true);
-			} //fallthrough:
-			case Event.MOUSE_LEAVE:
-			{
-				setMouseCaptured(false);
-				break;
-			}
-
-			// Prevent the propagation of click from a disabled Button.
-			// This is conceptually a higher-level event and
-			// developers will expect their click handlers not to fire
-			// if the Button is disabled.
-			case MouseEvent.CLICK:
-			{
-				if(!isEnabled )
-					event.stopImmediatePropagation();
-				return;
-			}
-		}
-		if (mouseEvent)
+        super.partAdded(partName, instance);
+
+        if (instance == labelField)
+        {
+            labelField.text = label;
+        }
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  States
+    //
+    //--------------------------------------------------------------------------
+
+    private function isDown():Boolean
+    {
+        if (!isEnabled)
+            return false;
+
+        if (isKeyboardPressed)
+            return true;
+
+        if (isMouseCaptured && (isHoveredOver || stickyHighlighting))
+            return true;
+        return false;
+    }
+
+    // GetState returns a string representation of the component's state as
+    // a combination of some of its public properties
+    /**
+     *  @inheritDoc
+     */
+    protected override function getUpdatedSkinState():String
+    {
+        if (!isEnabled)
+            return "disabled";
+
+        if (isDown())
+            return "down";
+
+        if (isHoveredOver || isMouseCaptured )
+            return "over";
+
+        return "up";
+    }
+
+    /**
+     *  @inheritDoc
+     */
+    override protected function commitSkinState(newState:String):void
+    {
+        super.commitSkinState(newState);
+
+        // Our state has changed, see whether we need to start/stop dispatching buttonDown
+        checkDownEventConditions();
+    }
+
+    private function checkDownEventConditions():void
+    {
+        var isCurrentlyDown:Boolean = isDown();
+
+        // If down state hasn't changed, simply return
+        if (!flags.update(downEventFiredFlag, isCurrentlyDown))
+            return;
+
+        if( isCurrentlyDown )
+            dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
+
+        checkAutoRepeatTimerConditions( isCurrentlyDown );
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Event handling
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    protected function addHandlers():void
+    {
+        addEventListener(MouseEvent.ROLL_OVER, mouseEventHandler);
+        addEventListener(MouseEvent.ROLL_OUT, mouseEventHandler);
+        addEventListener(MouseEvent.MOUSE_DOWN, mouseEventHandler);
+        addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler);
+        // TODO EGeorgie: should revisit, we are handling the CLICK during capture phase,
+        // since instance handlers are registered before base class handlers.
+        addEventListener(MouseEvent.CLICK, mouseEventHandler, true /*useCapture*/);
+        addEventListener("enabledChanged", enableChangedHandler);
+    }
+
+    private function addSystemMouseHandlers():void
+    {
+        systemManager.addEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, true /*useCapture*/);
+        systemManager.stage.addEventListener(Event.MOUSE_LEAVE, mouseEventHandler);
+    }
+
+    private function removeSystemMouseHandlers():void
+    {
+        systemManager.removeEventListener(MouseEvent.MOUSE_UP, mouseEventHandler, true /*useCapture*/);
+        systemManager.stage.removeEventListener(Event.MOUSE_LEAVE, mouseEventHandler);
+    }
+
+    /**
+     *  @private
+     */
+    protected function enableChangedHandler(event:Event):void
+    {
+        // Since enabled is part of our state, we need to invalidate it on changes.
+        invalidateSkinState();
+    }
+
+    /**
+     *  @private
+     */
+    protected function mouseEventHandler(event:Event):void
+    {
+        var mouseEvent:MouseEvent = event as MouseEvent;
+        switch (event.type)
+        {
+            case MouseEvent.ROLL_OVER:
+            {
+                // if the user rolls over while holding the mouse button
+                if (mouseEvent.buttonDown && !isMouseCaptured)
+                    return;
+                    setHoveredOver(true);
+                break;
+            }
+
+            case MouseEvent.ROLL_OUT:
+            {
+                setHoveredOver(false);
+                break;
+            }
+
+            case MouseEvent.MOUSE_DOWN:
+            {
+                // When the button is down we need to listen for mouse events outsied the button so that
+                // we update the state appropriately on mouse up.  Whenever isMouseCaptured changes to false,
+                // it will take care to remove those handlers.
+                addSystemMouseHandlers();
+                setMouseCaptured(true);
+                break;
+            }
+
+            case MouseEvent.MOUSE_UP:
+            {
+                if (event.currentTarget == this)
+                    setHoveredOver(true);
+            } //fallthrough:
+            case Event.MOUSE_LEAVE:
+            {
+                setMouseCaptured(false);
+                break;
+            }
+
+            // Prevent the propagation of click from a disabled Button.
+            // This is conceptually a higher-level event and
+            // developers will expect their click handlers not to fire
+            // if the Button is disabled.
+            case MouseEvent.CLICK:
+            {
+                if(!isEnabled )
+                    event.stopImmediatePropagation();
+                return;
+            }
+        }
+        if (mouseEvent)
             mouseEvent.updateAfterEvent();
-	}
-
-	//--------------------------------------------------------------------------
-	//
-	//  Overridden event handlers: UIComponent
-	//
-	//--------------------------------------------------------------------------
-
-	override protected function focusOutHandler(event:FocusEvent):void
-	{
-		// Most of the time the system sends a rollout, but there are
-		// situations where the mouse is over something else
-		// that you don't get one so we force one on FOCUS_OUT.
-		super.focusOutHandler(event);
-
-		setMouseCaptured(false);
-		setKeyboardPressed(false);
-	}
-
-	override protected function keyDownHandler(event:KeyboardEvent):void
-	{
-		if( event.keyCode != Keyboard.SPACE )
-			return;
-		setKeyboardPressed(true);
-		event.updateAfterEvent();
-	}
-
-	override protected function keyUpHandler(event:KeyboardEvent):void
-	{
-		if( event.keyCode != Keyboard.SPACE )
-			return;
-		setKeyboardPressed(false);
-
-		if( isEnabled )
-			dispatchEvent(new MouseEvent(MouseEvent.CLICK));
-		event.updateAfterEvent();
-	}
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Overridden event handlers: UIComponent
+    //
+    //--------------------------------------------------------------------------
+
+    /**
+     *  @private
+     */
+    override protected function focusOutHandler(event:FocusEvent):void
+    {
+        // Most of the time the system sends a rollout, but there are
+        // situations where the mouse is over something else
+        // that you don't get one so we force one on FOCUS_OUT.
+        super.focusOutHandler(event);
+
+        setMouseCaptured(false);
+        setKeyboardPressed(false);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function keyDownHandler(event:KeyboardEvent):void
+    {
+        if( event.keyCode != Keyboard.SPACE )
+            return;
+        setKeyboardPressed(true);
+        event.updateAfterEvent();
+    }
+
+    /**
+     *  @private
+     */
+    override protected function keyUpHandler(event:KeyboardEvent):void
+    {
+        if( event.keyCode != Keyboard.SPACE )
+            return;
+        setKeyboardPressed(false);
+
+        if( isEnabled )
+            dispatchEvent(new MouseEvent(MouseEvent.CLICK));
+        event.updateAfterEvent();
+    }

     //----------------------------------
     //  autoRepeat
@@ -470,7 +562,7 @@
      *  @private
      *  Timer for doing auto-repeat.
      */
-	private var autoRepeatTimer:Timer;
+    private var autoRepeatTimer:Timer;

     [Inspectable(defaultValue="false")]

@@ -484,56 +576,60 @@
     {
         return flags.isSet(autoRepeatFlag);
     }
+
+    /**
+     *  @private
+     */
     public function set autoRepeat(value:Boolean):void
     {
-    	if (!flags.update(autoRepeatFlag, value))
-    		return;
-
-    	checkAutoRepeatTimerConditions( isDown() );
-    }
-
-	private function checkAutoRepeatTimerConditions(isButtonDown:Boolean):void
-	{
-		var needsTimer:Boolean = autoRepeat && isButtonDown;
-		var hasTimer:Boolean = autoRepeatTimer != null;
-
-		if (needsTimer == hasTimer)
-			return;
-
-		if (needsTimer)
-			startTimer();
-		else
-			stopTimer();
-	}
-
-	private function startTimer():void
-	{
-		autoRepeatTimer = new Timer(1);
-		autoRepeatTimer.delay = getStyle("repeatDelay");
-		autoRepeatTimer.addEventListener(TimerEvent.TIMER, autoRepeat_timerDelayHandler);
-		autoRepeatTimer.start();
-	}
-
-	private function stopTimer():void
-	{
-		autoRepeatTimer.stop();
-		autoRepeatTimer = null;
-	}
-
-	private function autoRepeat_timerDelayHandler(event:TimerEvent):void
-	{
+        if (!flags.update(autoRepeatFlag, value))
+            return;
+
+        checkAutoRepeatTimerConditions( isDown() );
+    }
+
+    private function checkAutoRepeatTimerConditions(isButtonDown:Boolean):void
+    {
+        var needsTimer:Boolean = autoRepeat && isButtonDown;
+        var hasTimer:Boolean = autoRepeatTimer != null;
+
+        if (needsTimer == hasTimer)
+            return;
+
+        if (needsTimer)
+            startTimer();
+        else
+            stopTimer();
+    }
+
+    private function startTimer():void
+    {
+        autoRepeatTimer = new Timer(1);
+        autoRepeatTimer.delay = getStyle("repeatDelay");
+        autoRepeatTimer.addEventListener(TimerEvent.TIMER, autoRepeat_timerDelayHandler);
+        autoRepeatTimer.start();
+    }
+
+    private function stopTimer():void
+    {
+        autoRepeatTimer.stop();
+        autoRepeatTimer = null;
+    }
+
+    private function autoRepeat_timerDelayHandler(event:TimerEvent):void
+    {
         autoRepeatTimer.reset();
-	    autoRepeatTimer.removeEventListener( TimerEvent.TIMER, autoRepeat_timerDelayHandler);
-
-	    autoRepeatTimer.delay = getStyle("repeatInterval");
-	    autoRepeatTimer.addEventListener( TimerEvent.TIMER, autoRepeat_timerHandler);
-	    autoRepeatTimer.start();
-	}
-
-	private function autoRepeat_timerHandler(event:TimerEvent):void
-	{
-		dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
-	}
+        autoRepeatTimer.removeEventListener( TimerEvent.TIMER, autoRepeat_timerDelayHandler);
+
+        autoRepeatTimer.delay = getStyle("repeatInterval");
+        autoRepeatTimer.addEventListener( TimerEvent.TIMER, autoRepeat_timerHandler);
+        autoRepeatTimer.start();
+    }
+
+    private function autoRepeat_timerHandler(event:TimerEvent):void
+    {
+        dispatchEvent(new FlexEvent(FlexEvent.BUTTON_DOWN));
+    }
 }

 }


improved appearance of WMS map credit info and added session state settings

--- WeaveUISpark/src/weave/visualization/plotters/WMSPlotter.as
+++ WeaveUISpark/src/weave/visualization/plotters/WMSPlotter.as
@@ -32,6 +32,7 @@

 	import org.openscales.proj4as.ProjConstants;

+	import weave.Weave;
 	import weave.api.core.IDisposableObject;
 	import weave.api.core.ILinkableObjectWithBusyStatus;
 	import weave.api.data.IProjectionManager;
@@ -73,13 +74,6 @@

 		public function WMSPlotter()
 		{
-			_textField.autoSize = "left";
-			_textField.textColor = 0xFFFFFF;
-			_textField.thickness = 2;
-			_textField.background = true;
-			_textField.backgroundColor = 0x000000;
-			_textField.alpha = 0.2;
-
 			//setting default WMS Map to Blue Marble
 			setProvider(WMSProviders.OPEN_STREET_MAP);
 		}
@@ -382,7 +376,9 @@
 		}

 		private const bt:BitmapText = new BitmapText();
+		private const ct:ColorTransform = new ColorTransform();
 		private const rect:Rectangle = new Rectangle();
+		private const tempBounds:Bounds2D = new Bounds2D();
 		private function debugTileBounds(tileBounds:IBounds2D, dataBounds:IBounds2D, screenBounds:IBounds2D, destination:BitmapData, url:String, drawRect:Boolean):void
 		{
 			_tempScreenBounds.copyFrom(tileBounds);
@@ -403,16 +399,42 @@
 			bt.draw(destination);
 		}

-		private const _textField:TextField = new TextField(); // reusable object
+		public const creditInfoTextColor:LinkableNumber = registerLinkableChild(this, new LinkableNumber(0x000000));
+		public const creditInfoBackgroundColor:LinkableNumber = registerLinkableChild(this, new LinkableNumber(0xFFFFFF));
+		public const creditInfoAlpha:LinkableNumber = registerLinkableChild(this, new LinkableNumber(0.5, isFinite));
+
 		private function drawCreditText(destination:BitmapData):void
 		{
 			var _providerCredit:String = _service.getCreditInfo();
 			if (_providerCredit)
 			{
-				_textField.text = _providerCredit;
-				_tempMatrix.identity();
-				_tempMatrix.translate(0, destination.height - _textField.height);
-				destination.draw(_textField, _tempMatrix);
+				var textColor:Number = creditInfoTextColor.value;
+				if (!isFinite(textColor))
+					return;
+
+				bt.textFormat.color = textColor;
+				bt.textFormat.font = Weave.properties.visTextFormat.font.value;
+				bt.horizontalAlign = BitmapText.HORIZONTAL_ALIGN_LEFT;
+				bt.verticalAlign = BitmapText.VERTICAL_ALIGN_BOTTOM;
+				bt.x = 0;
+				bt.y = destination.height;
+				bt.text = _providerCredit;
+
+				var backgroundColor:Number = creditInfoBackgroundColor.value;
+				if (isFinite(backgroundColor))
+				{
+					bt.getUnrotatedBounds(tempBounds);
+					tempBounds.getRectangle(rect);
+					tempShape.graphics.clear();
+					tempShape.graphics.lineStyle(0, 0, 0);
+					tempShape.graphics.beginFill(backgroundColor, creditInfoAlpha.value);
+					tempShape.graphics.drawRect(rect.x, rect.y, rect.width, rect.height);
+					tempShape.graphics.endFill();
+					destination.draw(tempShape);
+				}
+
+				ct.alphaMultiplier = creditInfoAlpha.value;
+				bt.draw(destination, null, ct);
 			}
 		}


refactor v2

refactor v2

--- com/segonquart/Entrar.as
+++ com/segonquart/Entrar.as
@@ -53,8 +53,9 @@
 		v2.tintTo ("#95C60D", 100, "easeOutSine");
 		marcMenu_mc.fadeIn ();
 		titol_mcM.fadeOut () + 10000;
+		removeEventListener (this, "onPress");
 	}
-	function timeToEnter (m:MovieClip)
+      private function timeToEnter (m:MovieClip)
 	{
 		var entrar:Number = getTimer () + 1500;
 		m.onRelease = function ()
@@ -65,7 +66,7 @@
 			}
 			else
 			{
-				delete this.onEnterFrame;
+				this.onEnterFrame = null;
 			}
 		};
 	}


remove unique id chars from tag names in xml compare so embedded assets match

--- mustella/as3/src/mustella/CompareBitmap.as
+++ mustella/as3/src/mustella/CompareBitmap.as
@@ -508,10 +508,8 @@
 		var t:String = xmlreader.data;
 		s = s.replace(/\r/g, "");
 		t = t.replace(/\r/g, "");
-		if (s !== t)
-		{
-			differ(s, t);
-
+		if (s !== t && differ(s, t))
+		{
 			testResult.doFail ("compare returned" + compareVal, absolutePathResult(url) + ".bad.png");

 			if (useRemoteDiffer)
@@ -1295,8 +1293,10 @@
 		return xml;
 	}

-	private function differ(s:String, t:String):void
-	{
+	private function differ(s:String, t:String):Boolean
+	{
+		var retval:Boolean = false;
+
 		var sl:Array = s.split("\n");
 		var tl:Array = t.split("\n");
 		trace(sl.length, tl.length);
@@ -1307,20 +1307,58 @@
 			var b:String = (i < tl.length) ? tl[i] : "";
 			if (a != b)
 			{
-				var c:String = "";
-				var d:String = "";
-				trace(i, "cur: ", a);
-				trace(i, "xml: ", b);
-				var m:int = Math.max(a.length, b.length);
-				for (var j:int = 0; j < m; j++)
+				a = trimTag(a);
+				b = trimTag(b);
+				if (a != b)
 				{
-					c += a.charCodeAt(j) + " ";
-					d += b.charCodeAt(j) + " ";
+					retval = true;
+					var c:String = "";
+					var d:String = "";
+					trace(i, "cur: ", a);
+					trace(i, "xml: ", b);
+					var m:int = Math.max(a.length, b.length);
+					for (var j:int = 0; j < m; j++)
+					{
+						c += a.charCodeAt(j) + " ";
+						d += b.charCodeAt(j) + " ";
+					}
+					trace(i, "cur: ", c);
+					trace(i, "xml: ", d);
 				}
-				trace(i, "cur: ", c);
-				trace(i, "xml: ", d);
-			}
-		}
+			}
+		}
+		return retval;
+	}
+
+	// attempt to strip off random unique name chars for embedded assets
+	private function trimTag(a:String):String
+	{
+		var c:int;
+		var d:int;
+
+		d = a.indexOf("<");
+		if (d != -1)
+		{
+			c = a.indexOf(" ", d);
+			if (c == -1 && a.length > d + 2 && a.charAt(d + 1) == '/')
+				c = a.indexOf(">"); // closing tag
+			if (c != -1)
+			{
+				var rest:String = a.substring(c);
+				for (var i:int = c - 1;i > 0; i--)
+				{
+					var ch:String = a.charAt(i);
+					if ((ch >= '0' && ch <= '9') || ch == '_')
+					{
+						// assume it is a random char
+					}
+					else
+						break;
+				}
+				return a.substring(0, i + 1) + rest;
+			}
+		}
+		return a;
 	}
 }