Transferred from the Adobe Open Source Subversion Repository

Revision: 6257
Author:   smgilson@adobe.com
Date:     2009-04-24T21:28:52.430843Z

Log Message:
-----------
ASDoc edits for 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/easing/EaseInOutBase.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/animation/IAnimationTarget.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/IEaser.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/animation/RepeatBehavior.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/AnimateTransformScale.as</path>
<path kind="file" action="M">/flex/sdk/trunk/frameworks/projects/flex4/src/spark/effects/easing/EasingFraction.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/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/effects/easing/Sine.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/interpolation/ArrayInterpolator.as</path>

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

--- frameworks/projects/spark/src/spark/effects/animation/IAnimationTarget.as
+++ frameworks/projects/spark/src/spark/effects/animation/IAnimationTarget.as
@@ -11,12 +11,13 @@
 package spark.effects.animation
 {
 /**
- * This interface is implemented by classes that want to be called
- * with the various events happening in an Animation instance.
- * It is more typical to use th event listening mechanism on Animation,
- * but an IAnimationTarget implementation approach can provide a lower
- * overhead and higher performance means of getting update events
- * in some situations.
+ *  The IAnimationTarget interface is implemented by classes that support
+ *  the events for an Animation instance.
+ *  It is more typical to use the event listening mechanism on the Animation class,
+ *  but an IAnimationTarget implementation approach can provide a lower
+ *  overhead and higher performance in some situations for handling update events.
+ *
+ *  @see spark.effects.animation.Animation
  *
  *  @langversion 3.0
  *  @playerversion Flash 10
@@ -26,9 +27,11 @@
 public interface IAnimationTarget
 {
     /**
-     * This function is called when an Animation instance starts. If there
-     * is a startDelay on the Animation, this function is called
-     * after that delay, when the animation actually begins playing.
+     *  Called when an Animation instance starts. If there
+     *  is a startDelay on the Animation, this function is called
+     *  after that delay.
+     *
+     *  @param animation The Animation object.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -38,7 +41,9 @@
     function animationStart(animation:Animation):void;

     /**
-     * This function is called when an Animation instance ends.
+     *  Called when an Animation instance ends.
+     *
+     *  @param animation The Animation object.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -48,9 +53,11 @@
     function animationEnd(animation:Animation):void;

     /**
-     * This function is called when an Animation instance repeats. The
-     * Animation in question must have a repeatCount equal to 0 (infinitely
-     * repeating) or greater than 1.
+     *  Called when an Animation instance repeats.
+     *  The Animation instance must have a repeatCount equal to 0
+     *  (infinitely repeating) or a value greater than 1.
+     *
+     *  @param animation The Animation object.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10
@@ -60,14 +67,16 @@
     function animationRepeat(animation:Animation):void;

     /**
-     * This function is called during every update of an Animation instance.
-     * If an implementation class is listening to an Animation specifically to
-     * be able to do something after the Animation values are calculated for
-     * a given time, this is the function in which those values should be used.
-     * The other functions in this interface are more informational, just to tell
-     * the listeners when the Animation is starting, stopping, or repeating; this
-     * function is called when values have been calculated and something can be
-     * done with them.
+     *  Called during every update of an Animation instance.
+     *  If an implementation class is listening to an Animation specifically to
+     *  be able to do something after the Animation values are calculated for
+     *  a given time, this is the function in which those values should be used.
+     *  The other functions in this interface are more informational, just to tell
+     *  the listeners when the Animation is starting, stopping, or repeating.
+     *  This function is called when values have been calculated and something can be
+     *  done with them.
+     *
+     *  @param animation The Animation object.
      *
      *  @langversion 3.0
      *  @playerversion Flash 10


Transferred from the Adobe Open Source Subversion Repository

Revision: 3693
Author:   jszeto@adobe.com
Date:     2008-10-16T20:28:19.813330Z

Log Message:
-----------
Fix getBitmapData when graphic elements are sharing display objects

MXMLG-245 NPE in GraphicElement.getBitmapData()

Moved matrix logic inside of display object null check

Bug: MXMLG-245
QA: Yes
Doc: No
Review: Gordon

Modified Paths:
--------------
/flex/sdk/trunk/frameworks/projects/flex4/src/mx/graphics/graphicsClasses/GraphicElement.as

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

--- frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
+++ frameworks/projects/spark/src/spark/primitives/supportClasses/GraphicElement.as
@@ -2191,13 +2191,14 @@
         // display objects across multiple graphic elements.
         var bitmapData:BitmapData = new BitmapData(actualSize.x, actualSize.y, transparent, fillColor);

-        var m:Matrix = displayObject.transform.matrix;
+        if (displayObject && nextSiblingNeedsDisplayObject)
+        {
+        	var m:Matrix = displayObject.transform.matrix;

-		if (m)
-        	m.translate(-actualPosition.x, -actualPosition.y);
-
-        if (displayObject && nextSiblingNeedsDisplayObject)
+			if (m)
+        		m.translate(-actualPosition.x, -actualPosition.y);
             bitmapData.draw(displayObject, m);
+        }
         else
         {
             var oldDisplayObject:DisplayObject = displayObject;


Refactor Injector#injectInto to fix bug in Reflector#getClass passing Proxy.

Signed-off-by: Till Schneidereit <feeaf94ce47b255f6cb8c38100dc87ac3794b0b3@gmail.com>

error: pathspec 'test/org/swiftsuspenders/GetConstructorTests.as' did not match any file(s) known to git


Bugfix for wrong configuration in the integrated XML injection mappings of SwiftSuspendersInjector

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/eric-stanley/robotlegs-framework.git/'


Now you can have a simple Object hash that understands Hashable keys.
(Because it just uses a Map of your choosing under the hood.)
There is really no new functionality here, but it is neat, except for the one
stupid thing: keys get converted to Strings when iterating with a 'for' loop.

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

error: pathspec 'src/as/com/threerings/util/MapProxyObject.as' did not match any file(s) known to git

--- src/as/com/threerings/util/MapProxyObject.as
+++ src/as/com/threerings/util/MapProxyObject.as
@@ -0,0 +1,130 @@
+//
+// $Id: HashMap.as 4848 2007-10-18 23:55:26Z ray $
+//
+// Narya library - tools for developing networked games
+// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
+// http://www.threerings.net/code/narya/
+//
+// This library is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package com.threerings.util {
+
+import flash.utils.Proxy;
+import flash.utils.flash_proxy;
+
+use namespace flash_proxy;
+
+/**
+ * Makes a Map behave like an object. Iterations are done in the order of the keys
+ * returned by the Map's keys() function.
+ * Warning: "for" loops convert all keys to Strings, due to limitations with Proxy.
+ */
+public class MapProxyObject extends Proxy
+{
+    /**
+     * Construct a MapProxyObject backed by the specified Map.
+     */
+    public function MapProxyObject (source :Map)
+    {
+        _map = source;
+    }
+
+    // from Object (but does not require 'override')
+    public function hasOwnProperty (name :String) :Boolean
+    {
+        return _map.containsKey(name);
+    }
+
+    // from Object (but does not require 'override')
+    public function propertyIsEnumerable (name :String) :Boolean
+    {
+        return _map.containsKey(name);
+    }
+
+    // from Object (but does not require 'override')
+    public function setPropertyIsEnumerable (name :String, isEnum :Boolean = true) :void
+    {
+        // no-op
+        // (Alternatively, we could keep a dictionary of keys that we ignore for enumeration...)
+    }
+
+    /**
+     * Handle value = proxy[key].
+     */
+    override flash_proxy function getProperty (key :*) :*
+    {
+        return _map.get(key);
+    }
+
+    /**
+     * Handle proxy[key] = value.
+     */
+    override flash_proxy function setProperty (key :*, value :*) :void
+    {
+        _map.put(key, value);
+    }
+
+    /**
+     * Handle delete proxy[key].
+     */
+    override flash_proxy function deleteProperty (key :*) :Boolean
+    {
+        return (_map.remove(key) !== undefined);
+    }
+
+    /**
+     * Used when iterating with a "for" loop. Note well that keys are turned into
+     * Strings. This is a major failing.
+     */
+    override flash_proxy function nextName (index :int) :String
+    {
+        return StringUtil.toString(_itrKeys[index - 1]);
+    }
+
+    /**
+     * Used when iterating with a "for each" loop.
+     */
+    override flash_proxy function nextValue (index :int) :*
+    {
+        return _map.get(_itrKeys[index - 1]);
+    }
+
+    /**
+     * Iteration support.
+     */
+    override flash_proxy function nextNameIndex (index :int) :int
+    {
+        // on the first call, set up a list to be iterated
+        if (index == 0) {
+            _itrKeys = _map.keys();
+        }
+
+        // return a 1-based index to indicate that there is a property
+        if (index < _itrKeys.length) {
+            return index + 1;
+
+        } else {
+            _itrKeys = null; // we're done, clear the list
+            return 0;
+        }
+    }
+
+    /** The map we use for storage. */
+    protected var _map :Map;
+
+    /** A temporary ordering for iteration. */
+    protected var _itrKeys :Array;
+}
+}


Adds TODO

Adds TODO


Added logger and warnings to PlotUtil class.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rlowke/lowkemedia.git/'


See previous commit message

See previous commit message

error: pathspec 'as3/test/asunit4/support/InjectionVerification.as' did not match any file(s) known to git

--- as3/test/asunit4/support/InjectionVerification.as
+++ as3/test/asunit4/support/InjectionVerification.as
@@ -0,0 +1,41 @@
+package asunit4.support {
+
+    import asunit.asserts.*;
+    import asunit4.async.Async;
+    import asunit4.async.IAsync;
+
+    import flash.display.Sprite;
+
+    public class InjectionVerification {
+
+        [Inject]
+        public var iAsync:IAsync;
+
+        [Inject]
+        public var async:Async;
+
+        [Inject]
+        public var context:Sprite;
+
+        [Test]
+        public function verifyDisplayObjectInjection():void {
+            assertNotNull("DisplayObject should exiset", context);
+        }
+
+        [Test]
+        public function verifyDisplayObjectAttachedToStage():void {
+            assertNotNull("DisplayObjects hould be attached", context.stage);
+        }
+
+        [Test]
+        public function verifyAsyncInjection():void {
+            assertNotNull(async);
+        }
+
+        [Test]
+        public function verifyIAsyncInjection():void {
+            assertNotNull(iAsync);
+        }
+    }
+}
+


init commit

init commit

fatal: unable to access 'https://github.com/delfiramirez/web-talking-wear.git/': The requested URL returned error: 403


added RenderData

added RenderData

error: pathspec 'src/as3isolib/data/RenderData.as' did not match any file(s) known to git

--- src/as3isolib/data/RenderData.as
+++ src/as3isolib/data/RenderData.as
@@ -0,0 +1,57 @@
+/*
+
+as3isolib - An open-source ActionScript 3.0 Isometric Library developed to assist
+in creating isometrically projected content (such as games and graphics)
+targeted for the Flash player platform
+
+http://code.google.com/p/as3isolib/
+
+Copyright (c) 2006 - 2008 J.W.Opitz, All Rights Reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+*/
+package as3isolib.data
+{
+	import flash.display.BitmapData;
+
+	/**
+	 * A data object containing the bitmapData of a rendered IIsoDisplayObject and the relative x & y coordinates.
+	 * This data object is useful for blitting engines.
+	 */
+	public class RenderData
+	{
+		/**
+		 * A bitmapData object containing the rendered data of the IIsoDisplayObject
+		 */
+		public var bitmapData:BitmapData;
+
+		/**
+		 * The x location in screen coordintates where this bitmapData should be placed.
+		 * This value corresponds to the left-most boundaries of this object.
+		 */
+		public var x:Number;
+
+		/**
+		 * The y location in screen coordintates where this bitmapData should be placed.
+		 * This value corresponds to the top-most boundaries of this object.
+		 */
+		public var y:Number;
+	}
+}


formatting, adding stage getter

formatting, adding stage getter

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Initial import of IPlotterWithGeometries interface.

Change-Id: I2c6ab9ed9ccb4c6252ee1ee59733862a0162a188

error: pathspec 'WeaveAPI/src/weave/api/ui/IPlotterWithGeometries.as' did not match any file(s) known to git

--- WeaveAPI/src/weave/api/ui/IPlotterWithGeometries.as
+++ WeaveAPI/src/weave/api/ui/IPlotterWithGeometries.as
@@ -0,0 +1,62 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is the Weave API.
+ *
+ * The Initial Developer of the Original Code is the Institute for Visualization
+ * and Perception Research at the University of Massachusetts Lowell.
+ * Portions created by the Initial Developer are Copyright (C) 2008-2011
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+package weave.api.ui
+{
+	import weave.api.data.IQualifiedKey;
+	import weave.api.primitives.IBounds2D;
+
+	/**
+	 * This interface defines a plotter whose records are geometric objects with
+	 * special probing and selection. A plotter which implements this interface is
+	 * subject to polygon containment algorithms during probing and selection.
+	 *
+	 * @author kmonico
+	 */
+	public interface IPlotterWithGeometries extends IPlotter
+	{
+		/**
+		 * This function provides a mapping from a record key to an Array of IGeometry objects
+		 * in data coordinates.
+		 *
+		 * @param recordKey An IQualifiedKey for which to get its geometries.
+		 * @param minImportance The minimum importance of the geometry objects.
+		 * @param bounds The visible bounds.
+		 * @return An Array of IGeometry objects, in data coordinates.
+		 */
+		function getGeometriesFromRecordKey(recordKey:IQualifiedKey, minImportance:Number = 0, bounds:IBounds2D = null):Array;
+	}
+}


Grr. This should actually fix it.

Grr. This should actually fix it.


Reverted white's changes re: the stage height/width..

--- AS3/int/com/touchlib/TUIO.as
+++ AS3/int/com/touchlib/TUIO.as
@@ -36,7 +36,10 @@
 		static var xmlPlaybackURL:String = "";
 		static var xmlPlaybackLoader:URLLoader;
 		static var playbackXML:XML;
-
+
+		static var stagewidth:int;
+		static var stageheight:int;
+
 		static var bInitialized = false;

@@ -47,7 +50,10 @@
 			debugMode = dbug;

 			bInitialized = true;
-
+			stagewidth = s.stage.stageWidth;
+			stageheight = s.stage.stageHeight;
+			//stagewidth = 1024;
+			//stageheight = 786;
 			thestage = s;
 			objectArray = new Array();
 			idArray = new Array();
@@ -91,7 +97,7 @@

 				var buttonSprite = new Sprite();
 				buttonSprite.graphics.beginFill(0xFFFFFF,1.0);
-				buttonSprite.graphics.drawRoundRect(10, -35, 50, 60,10);
+				buttonSprite.graphics.drawRoundRect(0, -10, 50, 60,10);
 				buttonSprite.addEventListener(MouseEvent.CLICK, toggleDebug, false, 0, true);

 				var WrapperObject:Wrapper = new Wrapper(buttonSprite);
@@ -118,6 +124,13 @@

 		}

+		private static function setDimensions(wd:int = 800, ht:int = 600)
+		{
+			stagewidth = wd;
+			stageheight = ht;
+		}
+
+

 		private static function xmlPlaybackLoaded(evt:Event) {
@@ -211,8 +224,8 @@
 						{
 							var sID = node.ARGUMENT[1].@VALUE;
 							var id = node.ARGUMENT[2].@VALUE;
-							var x = Number(node.ARGUMENT[3].@VALUE) * thestage.stageWidth;
-							var y = Number(node.ARGUMENT[4].@VALUE) * thestage.stageHeight;
+							var x = Number(node.ARGUMENT[3].@VALUE) * stagewidth;
+							var y = Number(node.ARGUMENT[4].@VALUE) * stageheight;
 							var a = Number(node.ARGUMENT[5].@VALUE);
 							var X = Number(node.ARGUMENT[6].@VALUE);
 							var Y = Number(node.ARGUMENT[7].@VALUE);
@@ -274,8 +287,8 @@
 						if(type == "set")
 						{
 							var id = node.ARGUMENT[1].@VALUE;
-							var x = Number(node.ARGUMENT[2].@VALUE) * thestage.stageWidth;
-							var y = Number(node.ARGUMENT[3].@VALUE) * thestage.stageHeight;
+							var x = Number(node.ARGUMENT[2].@VALUE) * stagewidth;
+							var y = Number(node.ARGUMENT[3].@VALUE) * stageheight;
 							var X = Number(node.ARGUMENT[4].@VALUE);
 							var Y = Number(node.ARGUMENT[5].@VALUE);
 							var m = node.ARGUMENT[6].@VALUE;
@@ -312,7 +325,7 @@

 								tuioobj.setObjOver(dobj);
 								tuioobj.notifyMoved();
-							}
+							}

 							try
 							{
@@ -415,4 +428,4 @@
 //			thestage.tfDebug.appendText("securityError: " + event + "\n");
         }
 	}
-}
+}


add missing ShaderCompilerError class

add missing ShaderCompilerError class

error: pathspec 'src/aerys/minko/render/shader/compiler/ShaderCompilerError.as' did not match any file(s) known to git

--- src/aerys/minko/render/shader/compiler/ShaderCompilerError.as
+++ src/aerys/minko/render/shader/compiler/ShaderCompilerError.as
@@ -0,0 +1,31 @@
+package aerys.minko.render.shader.compiler
+{
+    public final class ShaderCompilerError extends Error
+    {
+        public static const TOO_MANY_VERTEX_OPERATIONS            : uint  = 1 << 0;
+        public static const TOO_MANY_VERTEX_CONSTANTS             : uint  = 1 << 1;
+        public static const TOO_MANY_VERTEX_TEMPORARIES           : uint  = 1 << 2;
+        public static const TOO_MANY_VERTEX_ATTRIBUTES            : uint  = 1 << 3;
+
+        public static const TOO_MANY_VARYINGS                     : uint  = 1 << 4;
+
+        public static const TOO_MANY_FRAGMENT_OPERATIONS          : uint  = 1 << 5;
+        public static const TOO_MANY_FRAGMENT_CONSTANTS           : uint  = 1 << 6;
+        public static const TOO_MANY_FRAGMENT_TEMPORARIES         : uint  = 1 << 7;
+
+        public static const TOO_MANY_FRAGMENT_SAMPLERS    : uint  = 1 << 8;
+
+        public static const OUT_OF_REGISTERS                      : uint  =
+              TOO_MANY_VERTEX_CONSTANTS
+            | TOO_MANY_VERTEX_TEMPORARIES
+            | TOO_MANY_VERTEX_ATTRIBUTES
+            | TOO_MANY_FRAGMENT_CONSTANTS
+            | TOO_MANY_FRAGMENT_TEMPORARIES
+            | TOO_MANY_FRAGMENT_SAMPLERS;
+
+        public function ShaderCompilerError(id : uint = 0)
+        {
+            super(message, id);
+        }
+    }
+}


Another SimpleButton derivative for skinning with a bitmap.

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

error: pathspec 'src/as/com/threerings/flash/SimpleSkinButton.as' did not match any file(s) known to git

--- src/as/com/threerings/flash/SimpleSkinButton.as
+++ src/as/com/threerings/flash/SimpleSkinButton.as
@@ -0,0 +1,76 @@
+//
+// $Id$
+
+package com.threerings.flash {
+
+import flash.display.Bitmap;
+import flash.display.BitmapData;
+import flash.display.Shape;
+import flash.display.SimpleButton;
+import flash.display.Sprite;
+
+import flash.text.TextField;
+import flash.text.TextFormat;
+
+/**
+ * A simple skin that shifts the text in the down state.
+ */
+public class SimpleSkinButton extends SimpleButton
+{
+    /**
+     * Create a SimpleSkinButton.
+     * @param skin a BitmapData, Bitmap, or class that will turn into either.
+     * @param text the text to place on the button
+     * @param textFieldProps initProps for the TextField
+     * @param textFormatProps initProps for the TextFormat
+     * @param outline if a uint, the color of the outline to put over the skin.
+     */
+    public function SimpleSkinButton (
+        skin :*, text :String, textFieldProps :Object = null, textFormatProps :Object = null,
+        padding :int = 10, height :Number = NaN, xshift :int = 0, yshift :int = 1,
+        outline :Object = null)
+    {
+        var bmp :BitmapData = ImageUtil.toBitmapData(skin);
+        if (bmp == null) {
+            throw new Error("Skin must be a Bitmap, BitmapData, or Class");
+        }
+
+        upState = createState(bmp, text, textFieldProps, textFormatProps,
+            padding, height, 0, 0, outline);
+        overState = upState;
+        hitTestState = overState;
+        downState = createState(bmp, text, textFieldProps, textFormatProps,
+            padding, height, xshift, yshift, outline);
+    }
+
+    protected function createState (
+        bmp :BitmapData, text :String, textFieldProps :Object, textFormatProps :Object,
+        padding :int, height :Number, xshift :int, yshift :int, outline :Object) :Sprite
+    {
+        var state :Sprite = new Sprite();
+        var field :TextField = TextFieldUtil.createField(text, textFieldProps, textFormatProps);
+
+        if (isNaN(height)) {
+            height = field.height;
+        }
+
+        var skin :Bitmap = new Bitmap(bmp);
+        skin.width = field.width + (padding * 2);
+        skin.height = height;
+        state.addChild(skin);
+
+        field.x = padding + xshift;
+        field.y = (height - field.height) / 2 + yshift;
+        state.addChild(field);
+
+        if (outline != null) {
+            var border :Shape = new Shape();
+            border.graphics.lineStyle(1, uint(outline));
+            border.graphics.drawRect(0, 0, skin.width - 1, skin.height - 1);
+            state.addChild(border);
+        }
+
+        return state;
+    }
+}
+}


Add Animation namespace and modification for timelines

A New namespace to access confidential information inside timelines
M Each timeline has two new getter, need namespace minko_animation to use them

error: pathspec 'src/aerys/minko/ns/minko_animation.as' did not match any file(s) known to git

--- src/aerys/minko/ns/minko_animation.as
+++ src/aerys/minko/ns/minko_animation.as
@@ -0,0 +1,5 @@
+// ActionScript file
+package aerys.minko.ns
+{
+	public namespace minko_animation;
+}


better warning for StageSync

better warning for StageSync


Issue 76; Support both x and y parameters for Gaussian Blurs. Flash BlurFilter were also tweaked to improve the simulation of Gaussian blurs.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/leymannx/svgweb.git/'


adding tests code blocks

adding tests code blocks


6520 addressing example code

6520 addressing example code

error: pathspec '6502/easy6502/10.as' did not match any file(s) known to git


Added a new type of object- AugBubble. Allows for an name, description, icon, media (the bubble itself), and alignment media (a still shot that the iphone camera should line up with to get correct orientation).

error: pathspec 'flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as' did not match any file(s) known to git

--- flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as
+++ flexEditor/src/org/arisgames/editor/view/ObjectEditorAugBubbleView.as
@@ -0,0 +1,155 @@
+package org.arisgames.editor.view
+{
+	import flash.events.MouseEvent;
+
+	import mx.containers.HBox;
+	import mx.containers.Panel;
+	import mx.controls.Alert;
+	import mx.controls.Button;
+	import mx.controls.CheckBox;
+	import mx.controls.NumericStepper;
+	import mx.controls.TextArea;
+	import mx.controls.TextInput;
+	import mx.events.DynamicEvent;
+	import mx.events.FlexEvent;
+	import mx.rpc.Responder;
+	import mx.validators.Validator;
+
+	import org.arisgames.editor.components.ItemEditorMediaDisplayMX;
+	import org.arisgames.editor.data.businessobjects.ObjectPaletteItemBO;
+	import org.arisgames.editor.models.GameModel;
+	import org.arisgames.editor.services.AppServices;
+	import org.arisgames.editor.util.AppConstants;
+	import org.arisgames.editor.util.AppDynamicEventManager;
+
+	public class ObjectEditorAugBubbleView extends Panel
+	{
+		// Data Object
+		private var objectPaletteItem:ObjectPaletteItemBO;
+
+		// GUI
+		[Bindable] public var theName:TextInput;
+		[Bindable] public var description:TextArea;
+		[Bindable] public var cancelButton:Button;
+		[Bindable] public var saveButton:Button;
+		[Bindable] public var hbox:HBox;
+		[Bindable] public var mediaDisplay:ItemEditorMediaDisplayMX;
+
+		[Bindable] public var v1:Validator;
+		[Bindable] public var v2:Validator;
+
+		/**
+		 * Constructor
+		 */
+		public function ObjectEditorAugBubbleView()
+		{
+			super();
+			this.addEventListener(FlexEvent.CREATION_COMPLETE, handleInit)
+		}
+
+		private function handleInit(event:FlexEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: handleInit");
+			saveButton.addEventListener(MouseEvent.CLICK, handleSaveButton);
+		}
+
+		public function getObjectPaletteItem():ObjectPaletteItemBO
+		{
+			return objectPaletteItem;
+		}
+
+		public function setObjectPaletteItem(opi:ObjectPaletteItemBO):void
+		{
+			trace("ObjectEditorAugBubbleView: Setting objectPaletteItem with name = '" + opi.name);
+			objectPaletteItem = opi;
+			mediaDisplay.setObjectPaletteItem(opi);
+			this.pushDataIntoGUI();
+		}
+
+		private function pushDataIntoGUI():void
+		{
+			var obj:Object = objectPaletteItem;
+			theName.text = objectPaletteItem.augBubble.name;
+			description.text = objectPaletteItem.augBubble.desc;
+		}
+
+		private function isFormValid():Boolean
+		{
+			return (Validator.validateAll([v1, v2]).length == 0)
+		}
+
+		private function handleCancelButton(evt:MouseEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: Cancel button clicked...");
+			var de:DynamicEvent = new DynamicEvent(AppConstants.DYNAMICEVENT_CLOSEOBJECTPALETTEITEMEDITOR);
+			AppDynamicEventManager.getInstance().dispatchEvent(de);
+		}
+
+		private function handleSaveButton(evt:MouseEvent):void
+		{
+			trace("ObjectEditorAugBubbleView: Save button clicked...");
+
+			if (!isFormValid())
+			{
+				trace("ItemEditorItemView: Form is not valid, stop save processing.");
+				return;
+			}
+
+			// Save Item Data
+			objectPaletteItem.augBubble.name = theName.text;
+			objectPaletteItem.augBubble.desc = description.text;
+
+			AppServices.getInstance().saveAugBubble(GameModel.getInstance().game.gameId, objectPaletteItem.augBubble, new Responder(handleSaveAugBubble, handleFault));
+
+			// Save ObjectPaletteItem
+			objectPaletteItem.name = objectPaletteItem.augBubble.name;
+			AppServices.getInstance().saveContent(GameModel.getInstance().game.gameId, objectPaletteItem, new Responder(handleSaveContent, handleFault))
+
+			// Close down the panel
+			var de:DynamicEvent = new DynamicEvent(AppConstants.DYNAMICEVENT_CLOSEOBJECTPALETTEITEMEDITOR);
+			AppDynamicEventManager.getInstance().dispatchEvent(de);
+
+		}
+
+		private function handleSaveAugBubble(obj:Object):void
+		{
+			trace("ObjectEditorAugBubbleView: In handleSaveAugBubble() Result called with obj = " + obj + "; Result = " + obj.result);
+			if (obj.result.returnCode != 0)
+			{
+				trace("ObjectEditorAugBubbleView: Bad save web page attempt... let's see what happened.  Error = '" + obj.result.returnCodeDescription + "'");
+				var msg:String = obj.result.returnCodeDescription;
+				Alert.show("Error Was: " + msg, "Error While Saving Web Page");
+			}
+			else
+			{
+				trace("ObjectEditorAugBubbleView:  Save web page was successful, wait on saveContent now to close the editor and update the object palette.");
+			}
+			trace("ObjectEditorAugBubbleView: Finished with handleSaveAugBubble().");
+		}
+
+		private function handleSaveContent(obj:Object):void
+		{
+			trace("ObjectEditorAugBubbleView: In handleSaveContent() Result called with obj = " + obj + "; Result = " + obj.result);
+			if (obj.result.returnCode != 0)
+			{
+				trace("ObjectEditorAugBubbleView: Bad save item content attempt... let's see what happened.  Error = '" + obj.result.returnCodeDescription + "'");
+				var msg:String = obj.result.returnCodeDescription;
+				Alert.show("Error Was: " + msg, "Error While Saving Item");
+			}
+			else
+			{
+				trace("ObjectEditorAugBubbleView: Save item content was successful, now update the object palette.");
+
+				var uop:DynamicEvent = new DynamicEvent(AppConstants.APPLICATIONDYNAMICEVENT_REDRAWOBJECTPALETTE);
+				AppDynamicEventManager.getInstance().dispatchEvent(uop);
+			}
+			trace("ItemEditorItemView: Finished with handleSaveContent().");
+		}
+
+		public function handleFault(obj:Object):void
+		{
+			trace("Fault called: " + obj.message);
+			Alert.show("Error occurred: " + obj.message, "Problems Saving AugBubble");
+		}
+	}
+}


246 EventMetadata takes a subclass of Event and dumps all its string constants in the form of [Event()] metadata declarations. Yay.

error: pathspec 'raw/src/org/yellcorp/tools/EventMetadata.as' did not match any file(s) known to git

--- raw/src/org/yellcorp/tools/EventMetadata.as
+++ raw/src/org/yellcorp/tools/EventMetadata.as
@@ -0,0 +1,87 @@
+package org.yellcorp.tools
+{
+import org.yellcorp.format.template.Template;
+import org.yellcorp.iterators.map.MapIterator;
+
+import flash.utils.describeType;
+import flash.utils.getDefinitionByName;
+
+
+public class EventMetadata
+{
+    private var _eventClass:Class;
+    private var _eventClassName:String;
+    private var _superClassName:String;
+    private var type:XML;
+
+    private static var declarationFormatter:Template =
+        new Template('[Event(name="{stringValue}", type="{className}")]');
+
+    public function EventMetadata(eventClass:Class)
+    {
+        _eventClass = eventClass;
+        type = describeType(eventClass);
+        _eventClassName = type.factory.@type[0];
+        _superClassName = type.factory.extendsClass.@type[0];
+    }
+
+    public function get className():String
+    {
+        return _eventClassName;
+    }
+
+    public function get superClassName():String
+    {
+        return _superClassName;
+    }
+
+    public function get eventStrings():Object
+    {
+        var strings:Object = { };
+        var stringNode:XML;
+        var stringName:String;
+
+        for each (stringNode in type.constant.(@type=="String"))
+        {
+            stringName = stringNode.@name;
+            strings[stringName] = _eventClass[stringName];
+        }
+        return strings;
+    }
+
+    public function get parent():EventMetadata
+    {
+        var superClass:Class;
+        if (_superClassName)
+        {
+            superClass = getDefinitionByName(_superClassName) as Class;
+            if (superClass)
+            {
+                return new EventMetadata(superClass);
+            }
+        }
+        return null;
+    }
+
+    public static function generate(eventClass:Class, stopAtNative:Boolean = true):Array
+    {
+        var decls:Array = [];
+        var metadata:EventMetadata = new EventMetadata(eventClass);
+        var formatValues:Object = { };
+
+        while (metadata && !(stopAtNative && /^flash\./.test(metadata.className)))
+        {
+            formatValues.className = metadata.className.replace("::", ".");
+
+            for (var i:MapIterator = new MapIterator(metadata.eventStrings);
+                 i.valid; i.next())
+            {
+                formatValues.stringValue = i.value;
+                decls.push(declarationFormatter.fill(formatValues));
+            }
+            metadata = metadata.parent;
+        }
+        return decls;
+    }
+}
+}


doc improve

doc improve


reachableStates

reachableStates

fatal: unable to access 'https://github.com/phylake/stratum.git/': The requested URL returned error: 403


Initial implementation of AMF3 decoder. Compiles, but completely untested.

error: pathspec 'tamarin-central/thane/AMF3Decoder.as' did not match any file(s) known to git

--- tamarin-central/thane/AMF3Decoder.as
+++ tamarin-central/thane/AMF3Decoder.as
@@ -0,0 +1,251 @@
+package {
+
+import avmplus.*;
+import flash.utils.ByteArray;
+import flash.utils.Dictionary;
+
+/**
+ * Partial AMF3 decoder, based on
+ *      http://download.macromedia.com/pub/labs/amf/amf3_spec_121207.pdf
+ */
+public class AMF3Decoder
+{
+    public static function decode (bytes :ByteArray) :*
+    {
+        _ctx = new Context(bytes);
+        return decodeValue();
+    }
+
+    private static function decodeValue () :*
+    {
+        var marker :int = _ctx.bytes.readByte();
+        switch(marker) {
+        default:
+            throw new Error("Unexpected marker in AMF3: " + marker);
+
+        case AMF3.MARK_XML:
+        case AMF3.MARK_XML_DOC:
+            throw new Error("XML deserialization not supported");
+
+        case AMF3.MARK_DATE:
+            // TODO: this is just lazy, it's super trivial
+            throw new Error("Date deserialization not supported");
+
+        case AMF3.MARK_UNDEFINED:
+            return undefined;
+
+        case AMF3.MARK_NULL:
+            return null;
+
+        case AMF3.MARK_FALSE:
+            return false;
+
+        case AMF3.MARK_TRUE:
+            return true;
+
+        case AMF3.MARK_INTEGER:
+            return decodeInteger();
+
+        case AMF3.MARK_DOUBLE:
+            return _ctx.bytes.readDouble();
+
+        case AMF3.MARK_STRING:
+            return decodeString();
+
+        case AMF3.MARK_ARRAY:
+            return decodeArray();
+
+        case AMF3.MARK_OBJECT:
+            return decodeObject();
+
+        case AMF3.MARK_BYTE_ARRAY:
+//            return decodeByteArray();
+
+        }
+    }
+
+    private static function decodeInteger () :int
+    {
+        var b :uint = _ctx.bytes.readByte();
+        var n :uint = (b & 0x7f);
+        if ((b & 0x80) != 0) {
+            b = _ctx.bytes.readByte();
+            n = (n << 7) | (b & 0x7f);
+
+            if ((b & 0x80) != 0) {
+                b = _ctx.bytes.readByte();
+                n = (n << 7) | (b & 0x7f);
+
+                if ((b & 0x80) != 0) {
+                    b = _ctx.bytes.readByte();
+                    n = (n << 8) | b;
+
+                    if (n >= (1 << 28)) {
+                        // adjust for the fact that the 29th bit was the sign bit
+                        return (1 << 29) - n;
+                    }
+                    return n;
+                }
+            }
+        }
+        return n;
+    }
+
+    private static function decodeString () :String
+    {
+        var code :uint = decodeInteger();
+
+        // is it a reference?
+        if ((code & 0x01) == 0) {
+            return _ctx.sRef[code >> 1];
+        }
+
+        // if not, read N bytes
+        var str :String = _ctx.bytes.readUTFBytes(code >> 1);
+        _ctx.sRef.table[str] = _ctx.sRef.ix ++;
+        return str;
+    }
+
+    private static function decodeArray () :Array
+    {
+        var code :uint = decodeInteger();
+
+        // is it a reference?
+        if ((code & 0x01) == 0) {
+            return _ctx.oRef[code >> 1];
+        }
+
+        // if not, create our array & note its reference
+        var result :Array = [ ];
+        _ctx.oRef.table[result] = _ctx.oRef.ix ++;
+
+        // then first read associative pairs
+        var key :String;
+        while ((key = decodeString()).length > 0) {
+            result[key] = decodeValue();
+        }
+
+        // finally read N dense values
+        var N :uint = code >> 1;
+        for (var ii :int = 0; ii < N; ii ++) {
+            result[ii] = decodeValue();
+        }
+        return result;
+    }
+
+    private static function decodeObject ():Object
+    {
+        var code :uint = decodeInteger();
+
+        // is it an instance reference?
+        if ((code & 0x01) == 0) {
+            return _ctx.oRef[code >> 1];
+        }
+
+        var traits :Traits;
+        // is it a trait reference?
+        if ((code & 0x02) == 0) {
+            traits = _ctx.tRef[code >> 2];
+
+        } else if ((code & 0x04) == 0) {
+            // it's a new trait, read class name & N sealed variable names
+            var alias :String = decodeString();
+            var className = (alias.length > 0) ? AMF3.getClassNameByAlias(alias) : "";
+            var N :uint = code >> 4;
+            var vars :Array = new Array(N);
+            for (var ii :int = 0; ii < N; ii ++) {
+                vars[ii] = decodeString();
+            }
+            traits = new Traits(className, (code & 0x08) != 0, vars);
+            _ctx.tRef.table[traits] = _ctx.tRef.ix ++;
+
+        } else {
+            throw new Error("IExternalizable serialization not supported");
+        }
+
+        // instantiate the object
+        var obj :Object;
+        if (traits.className != null) {
+            obj = Domain.currentDomain.getClass(traits.className);
+        } else {
+            obj = { };
+        }
+
+        // register the reference
+        _ctx.oRef.table[obj] = _ctx.oRef.ix ++;
+
+        // read the sealed values
+        for (var ii :int = 0; ii < traits.vars.length; ii ++) {
+            obj[vars[ii]] = decodeValue();
+        }
+
+        // if this object was marked dynamic, read key/value pairs until ""
+        if (traits.isDynamic) {
+            var key :String;
+            while ((key = decodeString()).length > 0) {
+                obj[key] = decodeValue();
+            }
+        }
+        return obj;
+    }
+
+    private static function decodeByteArray () :ByteArray
+    {
+        var code :uint = decodeInteger();
+        // is it an instance reference?
+        if ((code & 0x01) == 0) {
+            return _ctx.oRef[code >> 1];
+        }
+
+        // if not, instantiate
+        var bytes :ByteArray = new ByteArray();
+
+        // register
+        _ctx.oRef.table[bytes] = _ctx.oRef.ix ++;
+
+        // and read the bytes
+        _ctx.bytes.readBytes(bytes, 0, code >> 1);
+        return bytes;
+    }
+
+    private static var _ctx :Context;
+}
+}
+
+
+import flash.utils.ByteArray;
+import flash.utils.Dictionary;
+
+class Context
+{
+    public var bytes :ByteArray;
+
+    public var oRef :References = new References();
+    public var sRef :References = new References();
+    public var tRef :References = new References();
+
+    public function Context (bytes :ByteArray)
+    {
+        this.bytes = bytes;
+    }
+}
+
+class References
+{
+    public var table :Dictionary = new Dictionary();
+    public var ix :uint = 0;
+}
+
+class Traits
+{
+    public var className :String;
+    public var isDynamic :Boolean;
+    public var vars :Array;
+
+    public function Traits (className :String, isDynamic :Boolean, vars :Array)
+    {
+        this.className = className;
+        this.isDynamic = isDynamic;
+        this.vars = vars;
+    }
+}


whitespace

whitespace

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/OnCircle/vpaid-wrapper.git/'


Create new test class: CopyingOfPropertyLevelCopyableClassTest.

error: pathspec 'dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableClassTest.as' did not match any file(s) known to git

--- dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableClassTest.as
+++ dolly-framework/src/test/actionscript/dolly/CopyingOfPropertyLevelCopyableClassTest.as
@@ -0,0 +1,67 @@
+package dolly {
+import dolly.core.dolly_internal;
+import dolly.data.PropertyLevelCopyableClass;
+
+import org.as3commons.reflect.Field;
+import org.as3commons.reflect.Type;
+import org.flexunit.asserts.assertEquals;
+import org.flexunit.asserts.assertFalse;
+import org.flexunit.asserts.assertNotNull;
+
+use namespace dolly_internal;
+
+public class CopyingOfPropertyLevelCopyableClassTest {
+
+	private var propertyLevelCopyableClass:PropertyLevelCopyableClass;
+	private var propertyLevelCopyableClassType:Type;
+
+	[Before]
+	public function before():void {
+		propertyLevelCopyableClass = new PropertyLevelCopyableClass();
+		propertyLevelCopyableClass.property1 = "property1 value";
+		propertyLevelCopyableClass.property2 = "property2 value";
+		propertyLevelCopyableClass.writableField1 = "writableField1 value";
+
+		propertyLevelCopyableClassType = Type.forInstance(propertyLevelCopyableClass);
+	}
+
+	[After]
+	public function after():void {
+		propertyLevelCopyableClass = null;
+		propertyLevelCopyableClassType = null;
+	}
+
+	[Test]
+	public function findingAllCopyableFieldsForType():void {
+		const copyableFields:Vector.<Field> = Copier.findCopyableFieldsForType(propertyLevelCopyableClassType);
+		assertNotNull(copyableFields);
+		assertEquals(2, copyableFields.length);
+		assertNotNull(copyableFields[0]);
+		assertNotNull(copyableFields[1]);
+	}
+
+	[Test]
+	public function copyingByCopier():void {
+		const copyInstance:PropertyLevelCopyableClass = Copier.copy(propertyLevelCopyableClass);
+		assertNotNull(copyInstance);
+		assertNotNull(copyInstance.property1);
+		assertEquals(copyInstance.property1, propertyLevelCopyableClass.property1);
+		assertNotNull(copyInstance.property2);
+		assertFalse(copyInstance.property2 == propertyLevelCopyableClass.property2);
+		assertNotNull(copyInstance.writableField1);
+		assertEquals(copyInstance.writableField1, propertyLevelCopyableClass.writableField1);
+	}
+
+	[Test]
+	public function copyingByCopyFunction():void {
+		const copyInstance:PropertyLevelCopyableClass = copy(propertyLevelCopyableClass);
+		assertNotNull(copyInstance);
+		assertNotNull(copyInstance.property1);
+		assertEquals(copyInstance.property1, propertyLevelCopyableClass.property1);
+		assertNotNull(copyInstance.property2);
+		assertFalse(copyInstance.property2 == propertyLevelCopyableClass.property2);
+		assertNotNull(copyInstance.writableField1);
+		assertEquals(copyInstance.writableField1, propertyLevelCopyableClass.writableField1);
+	}
+}
+}


Added a safe navigateToURL method for sending the browser to some page.
If the user embeds the flash client on their own page, if someone then
clicks something to visit a msoy page, we will be unable to load that
page in that same tab/window. Instead, we'll be forced by flash security
restrictions to open in a blank window.
Allow for either method, falling back to a blank window if the other
method fails.

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

error: pathspec 'src/as/com/threerings/util/NetUtil.as' did not match any file(s) known to git

--- src/as/com/threerings/util/NetUtil.as
+++ src/as/com/threerings/util/NetUtil.as
@@ -0,0 +1,36 @@
+package com.threerings.util {
+
+import flash.net.URLRequest;
+//import flash.net.navigateToURL; // function import
+
+public class NetUtil
+{
+    /**
+     * Convenience method to load a web page in the browser window without
+     * having to worry about SecurityErrors in various conditions.
+     */
+    public static function navigateToURL (
+            url :String, newWindow :Boolean = false) :void
+    {
+        var ureq :URLRequest = new URLRequest(url);
+        if (!newWindow) {
+            try {
+                flash.net.navigateToURL(ureq, "_self");
+                return;
+            } catch (err :SecurityError) {
+                // ignore; fall back to using a blank window, below...
+            }
+        }
+
+        // open in a blank window
+        try {
+            flash.net.navigateToURL(ureq);
+        } catch (err :SecurityError) {
+            Log.getLog(NetUtil).warning(
+                "Unable to navigate to URL [e=" + err + "].");
+        }
+    }
+
+
+}
+}


Bug 415080: Add Testcase (r=brbaker)

Bug 415080: Add Testcase (r=brbaker)

error: pathspec 'test/acceptance/regress/bug_415080.as' did not match any file(s) known to git

--- test/acceptance/regress/bug_415080.as
+++ test/acceptance/regress/bug_415080.as
@@ -0,0 +1,69 @@
+/* ***** BEGIN LICENSE BLOCK *****
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
+ *
+ * The contents of this file are subject to the Mozilla Public License Version
+ * 1.1 (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.mozilla.org/MPL/
+ *
+ * Software distributed under the License is distributed on an "AS IS" basis,
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+ * for the specific language governing rights and limitations under the
+ * License.
+ *
+ * The Original Code is [Open Source Virtual Machine.].
+ *
+ * The Initial Developer of the Original Code is
+ * Adobe System Incorporated.
+ * Portions created by the Initial Developer are Copyright (C) 2010
+ * the Initial Developer. All Rights Reserved.
+ *
+ * Contributor(s):
+ *   Adobe AS3 Team
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+ * in which case the provisions of the GPL or the LGPL are applicable instead
+ * of those above. If you wish to allow use of your version of this file only
+ * under the terms of either the GPL or the LGPL, and not to allow others to
+ * use your version of this file under the terms of the MPL, indicate your
+ * decision by deleting the provisions above and replace them with the notice
+ * and other provisions required by the GPL or the LGPL. If you do not delete
+ * the provisions above, a recipient may use your version of this file under
+ * the terms of any one of the MPL, the GPL or the LGPL.
+ *
+ * ***** END LICENSE BLOCK ***** */
+
+var SECTION = "Regression Tests";       // provide a document reference (ie, Actionscript section)
+var VERSION = "AS3";        // Version of ECMAScript or ActionScript
+var TITLE   = "Bug 415080";       // Provide ECMA section title or a description
+
+
+startTest();                // leave this alone
+
+class Bug415080 {
+
+    public function Bug415080() {
+
+    }
+
+    public function _badFunction(a : String = 'b') : Boolean {
+        switch (true) {
+            case true :
+                a.indexOf('e');
+                if(true == true) {
+                    return true;
+                }
+        }
+        return false;
+    }
+
+}
+
+var t = new Bug415080();
+
+
+AddTestCase('No verifier error when running _badFunction', true, t._badFunction());
+
+test();


Create boot.as

Create boot.as

error: pathspec 'examples/web/app/classes/boot.as' did not match any file(s) known to git

--- examples/web/app/classes/boot.as
+++ examples/web/app/classes/boot.as
@@ -0,0 +1,48 @@
+package {
+    import flash.display.Sprite;
+
+    [SWF(backgroundColor='#000000', frameRate='32', width='720', height='480')]
+    public final class boot extends Sprite {
+
+        public function boot() {
+            super();
+        }
+
+        protected function initialize():void {
+            // N/A yet.
+        }
+
+        protected function finalize():void {
+            // N/A yet.
+        }
+
+        public function arrange():void {
+            // N/A yet.
+        }
+
+        private function removeLoader():void {
+            // N/A yet.
+        }
+
+        private function ready():void {
+            // N/A yet.
+        }
+
+        private function progress(event:*):void {
+            // N/A yet.
+        }
+
+        private function complete(event:*):void {
+            // N/A yet.
+        }
+
+        private function setup():void {
+            // N/A yet.
+        }
+
+        private function run():void {
+            removeLoader();
+            arrange();
+        }
+    }
+}


replacing "location:String" property by "request:Request" property


Fix my PagedArray fix

Fix my PagedArray fix

Ah, the classic off-by-one :) Also replaced the loop with native
method

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/zorbfish/jam.git/'


renaming parent to up / improvind documentation

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rafaelcordoba/cocktail-demo.git/'


Flexmojos 4.0 coverage

Flexmojos 4.0 coverage

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/edward-yakop/flexmojos.git/'


Adding a list of Oids.

Adding a list of Oids.

error: pathspec 'org/postgresql/febe/Oid.as' did not match any file(s) known to git

--- org/postgresql/febe/Oid.as
+++ org/postgresql/febe/Oid.as
@@ -0,0 +1,30 @@
+package org.postgresql.febe {
+    public class Oid {
+
+        public static const UNSPECIFIED:int = 0;
+        public static const INT2:int = 21;
+        public static const INT4:int = 23;
+        public static const INT8:int = 20;
+        public static const TEXT:int = 25;
+        public static const NUMERIC:int = 1700;
+        public static const FLOAT4:int = 700;
+        public static const FLOAT8:int = 701;
+        public static const BOOL:int = 16;
+        public static const DATE:int = 1082;
+        public static const TIME:int = 1083;
+        public static const TIMETZ:int = 1266;
+        public static const TIMESTAMP:int = 1114;
+        public static const TIMESTAMPTZ:int = 1184;
+        public static const BYTEA:int = 17;
+        public static const VARCHAR:int = 1043;
+        public static const OID:int = 26;
+        public static const BPCHAR:int = 1042;
+        public static const MONEY:int = 790;
+        public static const NAME:int = 19;
+        public static const BIT:int = 1560;
+        public static const VOID:int = 2278;
+        public static const INTERVAL:int = 1186;
+        public static const CHAR:int = 18; // (single char)
+        public static const VARBIT:int = 1562;
+    }
+}


MessageListener adapter.

MessageListener adapter.

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

error: pathspec 'src/as/com/threerings/presents/dobj/MessageAdapter.as' did not match any file(s) known to git

--- src/as/com/threerings/presents/dobj/MessageAdapter.as
+++ src/as/com/threerings/presents/dobj/MessageAdapter.as
@@ -0,0 +1,19 @@
+package com.threerings.presents.dobj {
+
+public class MessageAdapter
+    implements MessageListener
+{
+    public function MessageAdapter (received :Function)
+    {
+        _received = received;
+    }
+
+    // documentation inherited from interface MessageListener
+    public function messageReceived (event :MessageEvent) :void
+    {
+        _received(event);
+    }
+
+    protected var _received :Function;
+}
+}


manually added OVVRenderMeter, couldn't import from iframe branch for some reason

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/tpeace/set_openvv.git/'


adding _totalWin property

adding _totalWin property

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jkanchelov/VideoPoker.git/'


newly ported, untested (but compilable) SafeSubscriber

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

error: pathspec 'src/as/com/threerings/presents/util/SafeSubscriber.as' did not match any file(s) known to git

--- src/as/com/threerings/presents/util/SafeSubscriber.as
+++ src/as/com/threerings/presents/util/SafeSubscriber.as
@@ -0,0 +1,224 @@
+//
+// $Id: SafeSubscriber.java 4602 2007-02-24 00:39:27Z mdb $
+//
+// Narya library - tools for developing networked games
+// Copyright (C) 2002-2007 Three Rings Design, Inc., All Rights Reserved
+// http://www.threerings.net/code/narya/
+//
+// This library is free software; you can redistribute it and/or modify it
+// under the terms of the GNU Lesser General Public License as published
+// by the Free Software Foundation; either version 2.1 of the License, or
+// (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+package com.threerings.presents.util {
+
+import com.threerings.presents.dobj.DObject;
+import com.threerings.presents.dobj.DObjectManager;
+import com.threerings.presents.dobj.ObjectAccessException;
+import com.threerings.presents.dobj.Subscriber;
+
+/**
+ * A class that safely handles the asynchronous subscription to a
+ * distributed object when it is not know if the subscription will
+ * complete before the subscriber decides they no longer wish to be
+ * subscribed.
+ */
+public class SafeSubscriber implements Subscriber
+{
+    private static const log :log = log.getlog(SafeSubscriber);
+    /**
+     * Creates a safe subscriber for the specified distributed object
+     * which will interact with the specified subscriber.
+     */
+    public function SafeSubscriber (oid :int, subscriber :Subscriber)
+    {
+        // make sure they're not fucking us around
+        if (oid <= 0) {
+            throw new ArgumentError(
+                "Invalid oid provided to safesub [oid=" + oid + "]");
+        }
+        if (subscriber == null) {
+            throw new ArgumentError(
+                "Null subscriber provided to safesub [oid=" + oid + "]");
+        }
+
+        _oid = oid;
+        _subscriber = subscriber;
+    }
+
+    /**
+     * Returns true if we are currently subscribed to our object (or in
+     * the process of obtaining a subscription).
+     */
+    public function isActive () :Boolean
+    {
+        return _active;
+    }
+
+    /**
+     * Initiates the subscription process.
+     */
+    public function subscribe (omgr :DObjectManager) :void
+    {
+        if (_active) {
+            log.warning("Active safesub asked to resubscribe " + this + ".");
+            return;
+        }
+
+        // note that we are now again in the "wishing to be subscribed" state
+        _active = true;
+
+        // make sure we dont have an object reference (which should be
+        // logically impossible)
+        if (_object != null) {
+            log.warning("Incroyable! A safesub has an object and was " +
+                        "non-active!? " + this + ".");
+            // make do in the face of insanity
+            _subscriber.objectAvailable(_object);
+            return;
+        }
+
+        if (_pending) {
+            // we were previously asked to subscribe, then they asked to
+            // unsubscribe and now they've asked to subscribe again, all
+            // before the original subscription even completed; we need do
+            // nothing here except as the original subscription request
+            // will eventually come through and all will be well
+            return;
+        }
+
+        // we're not pending and we just became active, that means we need
+        // to request to subscribe to our object
+        _pending = true;
+        omgr.subscribeToObject(_oid, this);
+    }
+
+    /**
+     * Terminates the object subscription. If the initial subscription has
+     * not yet completed, the desire to terminate will be noted and the
+     * subscription will be terminated as soon as it completes.
+     */
+    public function unsubscribe (omgr :DObjectManager) :void
+    {
+        if (!_active) {
+            // we may be non-active and have no object which could mean
+            // that subscription failed; in which case we don't want to
+            // complain about anything, just quietly ignore the
+            // unsubscribe request
+            if (_object == null && !_pending) {
+                return;
+            }
+            log.warning("Inactive safesub asked to unsubscribe " + this + ".");
+            Thread.dumpStack();
+        }
+
+        // note that we no longer desire to be subscribed
+        _active = false;
+
+        if (_pending) {
+            // make sure we don't have an object reference
+            if (_object != null) {
+                log.warning("Incroyable! A safesub has an object and is " +
+                            "pending!? " + this + ".");
+                Thread.dumpStack();
+            } else {
+                // nothing to do but wait for the subscription to complete
+                // at which point we'll pitch the object post-haste
+                return;
+            }
+        }
+
+        // make sure we have our object
+        if (_object == null) {
+            log.warning("Zut alors! A safesub _was_ active and not " +
+                        "pending yet has no object!? " + this + ".");
+            Thread.dumpStack();
+            // nothing to do since we're apparently already unsubscribed
+            return;
+        }
+
+        // finally effect our unsubscription
+        _object = null;
+        omgr.unsubscribeFromObject(_oid, this);
+    }
+
+    // documentation inherited from interface
+    public function objectAvailable (object :DObject) :void
+    {
+        // make sure life is not too cruel
+        if (_object != null) {
+            log.warning("Madre de dios! Our object came available but " +
+                        "we've already got one!? " + this);
+            // go ahead and pitch the old one, God knows what's going on
+            _object = null;
+        }
+        if (!_pending) {
+            log.warning("J.C. on a pogo stick! Our object came available " +
+                        "but we're not pending!? " + this);
+            // go with our badselves, it's the only way
+        }
+
+        // we're no longer pending
+        _pending = false;
+
+        // if we are no longer active, we don't want this damned thing
+        if (!_active) {
+            var omgr :DObjectManager = object.getManager();
+            // if the object's manager is null, that means the object is
+            // already destroyed and we need not trouble ourselves with
+            // unsubscription as it has already been pitched to the dogs
+            if (omgr != null) {
+                omgr.unsubscribeFromObject(_oid, this);
+            }
+            return;
+        }
+
+        // otherwise the air is fresh and clean and we can do our job
+        _object = object;
+        _subscriber.objectAvailable(object);
+    }
+
+    // documentation inherited from interface
+    public function requestFailed (oid :int, cause :ObjectAccessError) :void
+    {
+        // do the right thing with our pending state
+        if (!_pending) {
+            log.warning("Criminy creole! Our subscribe failed but we're " +
+                        "not pending!? " + this);
+            // go with our badselves, it's the only way
+        }
+        _pending = false;
+
+        // if we're active, let our subscriber know that the shit hit the fan
+        if (_active) {
+            // deactivate ourselves as we never got our object (and thus
+            // the real subscriber need not call unsubscribe())
+            _active = false;
+            _subscriber.requestFailed(oid, cause);
+        }
+    }
+
+    /**
+     * Returns a string representation of this instance.
+     */
+    public function toString () :void
+    {
+        return "[oid=" + _oid + ", active=" + _active + ", pending=" + _pending + ", ]";
+    }
+
+    protected var _oid :int
+    protected var _subscriber :Subscriber;
+    protected var _object :DObject;;
+    protected var _active :Boolean;
+    protected var _pending :Boolean;
+}
+}


Increase unmeasurable event threshold to 1 sec (5 intervals)

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/7thsky/openvv.git/'


cleaning up

cleaning up


Fiducial with widgets demo app class without TUI

error: pathspec 'fbApplicationNoTUI.as' did not match any file(s) known to git

--- fbApplicationNoTUI.as
+++ fbApplicationNoTUI.as
@@ -0,0 +1,463 @@
+package touchAll.demos.tronFiducialsDemo
+{
+	import flash.ui.*;
+	import flash.display.*;
+	//import flash.filters.*;
+	//import flash.events.*;
+	import flash.events.Event;
+	//import flash.events.TouchEvent;
+	import flash.events.MouseEvent;
+	import flash.events.KeyboardEvent;
+	//import flash.events.TransformGestureEvent;
+
+	import org.tuio.*;
+	import org.tuio.connectors.*;
+	import org.tuio.debug.*;
+	import org.tuio.fiducial.*;
+	import org.tuio.gestures.*;
+	import org.tuio.mouse.*;
+	import org.tuio.windows7.*;
+
+	import touchAll.piano.Piano;
+	import touchAll.keyboard.CustomKeyboard;
+	import touchAll.pong.cl.kirill.PongGame;
+
+	/**
+	 * @author Gonçalo Amador
+	 */
+	[SWF(width = "1280", height = "720", frameRate = "60", backgroundColor = "#ffffff")]
+	//[SWF(width = "1280", height = "720", frameRate = "60", backgroundColor = "#000000")]
+	public class ExampleFiducialsDemo extends MovieClip
+	{
+		/* global variables */
+		private var _stage:Stage;
+		private var _width:int = 1280;
+		private var _height:int = 720;
+		private var _color:uint = 0x000000;
+		private var _tm:TuioManager;
+		private var _gm:GestureManager;
+		private var _packets_count:uint = 0;
+		private var _log:String = "";
+		private var _mouseCursor:Sprite;
+		private var _background:Sprite = new Sprite;
+
+		private var _keyboard:CustomKeyboard;
+		private var _pongGame:PongGame;
+		private var _piano:Piano;
+		private var _textColor:uint = 0x8B8B8B;
+		private var _buttonColor:uint = 0x000000;
+		private var _buttonTextColor:uint = 0xFFFFFF;
+		private var _buttonOnColor:uint = 0xBB0000;
+		private var _buttonOffColor:uint = 0x330000;
+		private var _borderColor:uint = 0x000000;
+		private var _white_keys_color:uint = 0xFEFEFE;
+
+		private var _debug:Boolean = true;
+		private var _LCconnector:Boolean = false;
+		private var _UDPconnector:Boolean = true;
+		private var _TCPconnector:Boolean = false;
+		private var _host:String = "127.0.0.1";
+		private var _port:int = 3333;
+		private var _fiducialHandler:Boolean = true;
+		private var _tuioManager:Boolean = true;
+		private var _gestureManager:Boolean = true;
+		private var _mouseToTouch:Boolean = false;
+		private var _tc:TuioClient;
+
+		public function ExampleFiducialsDemo():void
+		{
+			if (stage) init();
+			else addEventListener(Event.ADDED_TO_STAGE, init);
+		}
+
+		private function init(e:Event = null):void
+		{
+			removeEventListener(Event.ADDED_TO_STAGE, init);
+
+			_stage = stage;
+
+			/* LOAD STAGE CONTENT */
+			backgroundLoader();
+			//backgroundEventListenersLoader();
+
+			/* stage set up */
+			stageLoader();
+			stageEventListenersLoader();
+
+			/* tuio set up */
+			tuioLoader();
+		}
+
+		/* BACKGROUND FUNCTIONS */
+		/**
+		 * load default stage background
+		 */
+		public function backgroundLoader():void {
+			/*
+			 * Set blend mode "ALPHA" and
+			 * fill background at the starting position (0,0), with rgb color 0xFFFFFF and alpha blending 1
+			 */
+			_background.blendMode = BlendMode.ALPHA;
+			_background.graphics.beginFill(0xFFFFFF,1);
+			_background.graphics.drawRect(0,0,_stage.stageWidth,_stage.stageHeight);
+			_background.graphics.endFill();
+
+			/* set activate doubleClick mouse checks */
+			trace("set activate doubleClick mouse checks.");
+			_background.doubleClickEnabled = true;
+
+			/* add the background to the stage */
+			trace("add the background to the stage.");
+			_stage.addChild(_background);
+		}
+
+
+		public function backgroundEventListenersLoader():void {
+			trace("backgroundEventListenersLoader.");
+		}
+
+		/**
+		 * stage set up
+		 */
+		public function stageLoader():void {
+			/* STAGE SET UP */
+			trace("STAGE SET UP.");
+			_stage.stageWidth = _width;
+			_stage.stageHeight = _height;
+
+			/* AIR stage settings */
+			trace("AIR stage settings.");
+			//_stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
+			_stage.scaleMode = StageScaleMode.NO_SCALE;
+			_stage.align = StageAlign.TOP_LEFT;
+
+			/* set activate doubleClick mouse checks */
+			trace("set activate doubleClick mouse checks.");
+			_stage.doubleClickEnabled = true;
+
+			/* load an circle to track mouse cursor */
+			trace("load an circle to track mouse cursor.");
+			if (_debug) {
+				addMouseCursor();
+			}
+		}
+
+		/**
+		 * stage event listeners set up
+		 */
+		public function stageEventListenersLoader():void {
+			/* STAGE EVENT LISTENERS */
+			/* add stage keyboard event listeners */
+			trace("add stage keyboard event listeners.");
+			if (_tuioManager) {
+				_stage.addEventListener(KeyboardEvent.KEY_DOWN, showTuioNetworkPacketsLog);
+			}
+
+			/* add stage mouse event listeners */
+			trace("add stage mouse event listeners.");
+			if (_debug) {
+				_stage.addEventListener(MouseEvent.MOUSE_MOVE, followMouse);
+				_stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
+				_stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
+			}
+
+			/* add stage Fiducial (object) event listeners */
+			trace("add stage fiducial event listeners.");
+			_stage.addEventListener(FiducialEvent.ADD, fiducialADD);
+			_stage.addEventListener(FiducialEvent.MOVE, fiducialUPDATE);
+			_stage.addEventListener(FiducialEvent.REMOVED, fiducialREMOVE);
+		}
+
+		/* FIDUCIAL FUNCTIONS */
+		/**
+		 * handle fiducial (Object) add events
+		 */
+		public function fiducialADD(e:FiducialEvent):void {
+			// debug mode console message if FiducialEvent.ADD event captured
+			trace("Fiducial #" + e.fiducialId + " fiducial added.");
+
+			if (e.fiducialId == 0)
+			{
+				/* alternative 1: load keyboard class */
+				_keyboard = new CustomKeyboard(e.x, e.y, 718, 200, e.x, e.y + 220, _buttonTextColor, _buttonColor, _borderColor);
+				//_keyboard.filters = [new GlowFilter(0x0055ff, .75, 100, 100, 2, 2, false, false)];
+
+				_stage.addChild(_keyboard);
+
+				/* alternative 2: load the content of *.swf file */
+				//var _objectLoader:Loader = new Loader;
+				//_objectLoader.load(new URLRequest("CustomKeyboard.swf"));
+				//_stage.addChild(_objectLoader);
+			}
+
+			if (e.fiducialId == 1)
+			{
+				_pongGame = new PongGame(_stage, _borderColor);
+				_pongGame.x = e.x;
+				_pongGame.y = e.y;
+				_stage.addChild(_pongGame);
+			}
+
+			if (e.fiducialId == 2)
+			{
+				_piano = new Piano(_textColor, _buttonTextColor, _buttonOnColor, _buttonOffColor, _white_keys_color);
+				//_piano = new Piano();
+				_piano.x = e.x;
+				_piano.y = e.y;
+				_piano.rotation = 90;
+				_piano.scaleX = 2;
+				_piano.scaleY = 2;
+				_stage.addChild(_piano);
+			}
+		}
+
+		/**
+		 * handle fiducial (Object) remove events
+		 */
+		public function fiducialREMOVE(e:FiducialEvent):void {
+			trace("Fiducial #" + e.fiducialId + " fiducial removed.");
+
+			if (e.fiducialId == 0)
+			{
+				/* alternative 1: remove keyboard class from stage */
+				_stage.removeChild(_keyboard);
+
+				/* alternative 2: remove loaded *.swf file from stage */
+				//_stage.removeChild(_objectLoader);
+			}
+
+			if (e.fiducialId == 1)
+			{
+				_pongGame.stopGame();
+				_stage.removeChild(_pongGame);
+			}
+
+			if (e.fiducialId == 2)
+			{
+				_stage.removeChild(_piano);
+			}
+		}
+
+		/**
+		 * handle fiducial (Object) move events
+		 */
+		public function fiducialUPDATE(e:FiducialEvent):void {
+			trace("Fiducial #" + e.fiducialId + " fiducial move.");
+
+			if (e.fiducialId == 0) {
+				_keyboard.update(e.x, e.y, e.x, e.y + 220);
+			}
+
+			if (e.fiducialId == 1) {
+				_pongGame.x = e.x;
+				_pongGame.y = e.y;
+			}
+
+			if (e.fiducialId == 2)
+			{
+				_piano.x = e.x;
+				_piano.y = e.y;
+			}
+		}
+
+		/**
+		 * tuio set up
+		 */
+		public function tuioLoader():void {
+			//var _tc:TuioClient;
+
+			/* tuio client setup (a LC/UDP/TCP socket that connects to the server '_host' using port '_port') creation */
+			if (_LCconnector) {
+				trace("tuioClient LC connector.")
+				_tc = new TuioClient(new LCConnector());
+			}
+
+			if (_TCPconnector) {
+				trace("tuioClient TCP connector.")
+				_tc = new TuioClient(new TCPConnector(_host, _port));
+			}
+
+			if (_UDPconnector) {
+				trace("tuioClient UDP connector.")
+				_tc = new TuioClient(new UDPConnector(_host, _port));
+			}
+
+			/* optional: activate tuio fiducial capture events */
+			if (_fiducialHandler) {
+				trace("fiducial Handler on.")
+				var fiducialDispatcher:TuioFiducialDispatcher = TuioFiducialDispatcher.init(_stage);
+				_tc.addListener(fiducialDispatcher);
+			}
+
+			/* optional: activate tuio debug mode to display touches */
+			if (_debug) {
+				trace("tuioDebug on.")
+				_tc.addListener(TuioDebug.init(_stage));
+			}
+
+			/* tuioManager setup (a container which processes the Tuio tracking data received by the given TuioClient) creation */
+			//if (_tuioManager) {
+			if (_tuioManager) {
+				trace("tuioManager on.")
+				_tm = TuioManager.init(_stage, _tc);
+				//_tm.touchTargetDiscoveryMode = TuioManager.TOUCH_TARGET_DISCOVERY_NONE
+
+				/* add tuioManager tuio event listeners */
+				_tm.addEventListener(TuioEvent.ADD, packetsCount);
+				_tm.addEventListener(TuioEvent.REMOVE, packetsCount);
+				_tm.addEventListener(TuioEvent.UPDATE, packetsCount);
+			}
+
+			/* optional: treat Gestures */
+			if (_gestureManager) {
+				trace("gestureManager on.")
+				_gm = GestureManager.init(_stage, _tc);
+				//_gm.touchTargetDiscoveryMode = GestureManager.TOUCH_TARGET_DISCOVERY_NONE;
+
+				GestureManager.addGesture(new DragGesture());
+				GestureManager.addGesture(new ZoomGesture());
+				GestureManager.addGesture(new RotateGesture());
+
+				//GestureManager.addGesture(new ScrollGesture());
+				GestureManager.addGesture(new PressTapGesture());
+				GestureManager.addGesture(new OneDownOneMoveGesture());
+			}
+
+			/* optional: treat MouseEvents also as TouchEvents */
+			if (_mouseToTouch) {
+				var mouseToTouch:MouseToTouchDispatcher = new MouseToTouchDispatcher(_stage);
+			}
+
+			/* optional: convert the native TouchEvents into tuio TouchEvents */
+			//var winTouch:Windows7TouchToTuioDispatcher = new Windows7TouchToTuioDispatcher(_stage,false,false);
+
+			/* optional: dispatch the events by using the TuioManager */
+			//var winTouch:Windows7TouchToTuioDispatcher = new Windows7TouchToTuioDispatcher(_stage,true,false);
+		}
+
+		/**
+		 * Show total tuio events captured log
+		 */
+		private function packetsCount(e:TuioEvent):void {
+			var date:Date = new Date();
+			_packets_count++;
+
+			_log += _packets_count + " Packet captured TuioEvent at " + date.fullYear;
+
+			if ((date.month + 1) < 10) {
+				_log += "-0" + (date.month + 1);
+			}
+			else {
+				_log += "-" + (date.month + 1);
+			}
+
+			if (date.date < 10) {
+				_log += "-0" + date.date;
+			}
+			else {
+				_log += "-" + date.date;
+			}
+
+			if (date.hours < 10) {
+				_log += " 0" + date.hours;
+			}
+			else {
+				_log += " " + date.hours;
+			}
+
+			if (date.minutes < 10) {
+				_log += ":0" + date.minutes;
+			}
+			else {
+				_log += ":" + date.minutes;
+			}
+
+			if (date.seconds < 10) {
+				_log += ":0" + date.seconds;
+			}
+			else {
+				_log += ":" + date.seconds;
+			}
+
+			if (date.milliseconds < 10) {
+				_log += ".00" + date.milliseconds;
+			} else if (date.milliseconds < 100) {
+				_log += ".0" + date.milliseconds;
+			}
+			else {
+				_log += "." + date.milliseconds;
+			}
+
+			_log += "\n";
+		}
+
+		/**
+		 * handle stage "F1" keyboard events
+		 */
+		private function showTuioNetworkPacketsLog(e:KeyboardEvent):void {
+			if (e.keyCode == Keyboard.F1) {
+				trace("touch hold.");
+				trace(_log);
+				trace("Packets captured " + _packets_count + "\n");
+			}
+		}
+
+		/* MOUSE CURSOR FUNCTIONS */
+		/**
+		 * display a circle where mouse cursor is
+		 */
+		private function addMouseCursor():void {
+			/* Create a Sprite instance called _mouseCursor */
+			_mouseCursor = new Sprite;
+
+			/*
+			 * Set blend mode "DARKEN" and
+			 * fill a circle at the starting position (0,0) of radius 5, with rgb color '_color' and alpha blending 1 or
+			 * draw a circle with line thickness 1.1, with rgb color '_color' and alpha blending 1.
+			 */
+			//_mouseCursor.blendMode = BlendMode.DARKEN;
+			//_mouseCursor.graphics.beginFill(0x770000, 1);
+			_mouseCursor.graphics.lineStyle(1.1, _color, 1, false, LineScaleMode.NONE);
+			_mouseCursor.graphics.drawCircle(0, 0, 20);
+			//_mouseCursor.graphics.endFill();
+
+			/* set circle center at mouse coursor position */
+			_mouseCursor.x = _mouseCursor.mouseX;
+			_mouseCursor.y = _mouseCursor.mouseY;
+
+			/* set circle visibility default value */
+			_mouseCursor.visible = false;
+
+			/* add the circle to the stage */
+			_stage.addChild(_mouseCursor);
+		}
+
+		/**
+		 * handle mouse movement events for the circle
+		 */
+		private function followMouse(e:MouseEvent):void {
+			if (_mouseCursor != null) {
+				_mouseCursor.x = _stage.mouseX;
+				_mouseCursor.y = _stage.mouseY;
+			}
+		}
+
+		/**
+		 * handle mouse down events for circle
+		 */
+		private function mouseDown(e:MouseEvent):void {
+			if (_mouseCursor != null) {
+				_mouseCursor.visible = true;
+			}
+		}
+
+		/**
+		 * handle mouse up events for circle
+		 */
+		private function mouseUp(e:MouseEvent):void {
+			if (_mouseCursor != null) {
+				_mouseCursor.visible = false;
+			}
+		}
+	}
+}


Handles some boilerplate functionality.

Handles some boilerplate functionality.

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

fatal: unable to access 'https://github.com/threerings/nenya.git/': The requested URL returned error: 403


adding compact unit tests to run on CLI

adding compact unit tests to run on CLI

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/jisobkim/gaforflash.git/'


Source for YouTube shim

Source for YouTube shim

error: pathspec 'examples/yt-shim/src/YoutubeShim.as' did not match any file(s) known to git

--- examples/yt-shim/src/YoutubeShim.as
+++ examples/yt-shim/src/YoutubeShim.as
@@ -0,0 +1,99 @@
+package {
+
+import flash.display.Sprite;
+    import flash.media.Video;
+    import flash.net.NetConnection;
+    import flash.net.NetStream;
+    import flash.net.URLVariables;
+
+public class YoutubeShim extends Sprite {
+    public function YoutubeShim() {
+        const formats : Array = loaderInfo.parameters.fmt_list.split(',');
+        const defs : Array = loaderInfo.parameters.
+                url_encoded_fmt_stream_map.split(',');
+        const streams : Array = [];
+        const mp4s : Array = [];
+        var usedStream : Object;
+        for (var i : int = 0; i < defs.length; i++) {
+            var format : Array = formats[i].split('/');
+            var stream : Object = merge(new URLVariables(defs[i]), {});
+            streams[i] = stream;
+            var urlParts : Array = stream.url.split('?');
+            merge(new URLVariables(urlParts[1]), stream);
+            stream.url = urlParts[0];
+            stream.signature = stream.sig;
+
+            // Check for min player version for this format (9 == mp4)
+            if (format[2] == '9' && stream.type.indexOf('video/mp4') !== -1) {
+                var size : Array = format[1].split('x');
+                stream.width = size[0];
+                stream.height = size[1];
+                mp4s.push(stream);
+                // Choose the first stream that's less than fullHD
+                if (!usedStream) {
+                    usedStream = stream;
+                }
+            }
+        }
+
+        if (!usedStream) {
+            throw new Error('No usable stream found');
+        }
+
+        const video : Video = new Video(usedStream.width, usedStream.height);
+        video.width = stage.stageWidth;
+        video.height = stage.stageHeight;
+        addChild(video);
+        const nc : NetConnection = new NetConnection();
+        nc.connect(null);
+        const ns : NetStream = new NetStream(nc);
+        ns.client = {};
+        ns.client.onMetaData = onMetaData;
+        ns.client.onCuePoint = onCuePoint;
+        video.attachNetStream(ns);
+
+        function arg(key : String, encode : Boolean = false) : String {
+            var content = usedStream[key];
+            if (encode)
+                content = escape(content);
+            return key + '=' + content;
+        }
+
+        var url : String = usedStream.url + '?'
+          + 'algorithm=throttle-factor&burst=40&factor=1.25&gcr=us&keepalive=yes&'
+          + [arg('cp'),
+             arg('expire'),
+             arg('fexp', true),
+             arg('id'),
+             arg('ip'),
+             arg('ipbits'),
+             arg('itag'),
+             arg('key'),
+             arg('ms'),
+             arg('mt'),
+             arg('mv'),
+             arg('newshard'),
+             arg('ratebypass'),
+             arg('signature'),
+             arg('source'),
+             arg('sparams', true),
+             arg('sver'),
+             arg('upn')].join('&');
+        ns.play(url);
+    }
+
+    private function merge(obj : Object, into : Object) : Object {
+        for (var k : String in obj)
+            into[k] = obj[k];
+        return into;
+    }
+
+    private function onMetaData(item : Object) : void {
+
+    }
+
+    private function onCuePoint(item : Object) : void {
+
+    }
+}
+}


First pass on clock face

First pass on clock face

error: pathspec 'src/Displays/Clock.as' did not match any file(s) known to git

--- src/Displays/Clock.as
+++ src/Displays/Clock.as
@@ -0,0 +1,109 @@
+package Displays {
+	import flash.geom.Point;
+	import flash.geom.Rectangle;
+	import org.flixel.*;
+	import flash.display.Bitmap;
+	import flash.display.Shape;
+	/**
+	 * ...
+	 * @author Nicholas "PleasingFungus" Feinberg
+	 */
+	public class Clock extends FlxSprite {
+
+		private var _fraction:Number;
+		public function Clock(X:int, Y:int, Fraction:Number) {
+			super(X, Y);
+			_fraction = Fraction;
+			init();
+		}
+
+		private function init():void {
+			var existed:Boolean = FlxG.checkBitmapCache("Clock-" + fraction);
+			makeGraphic(RADIUS * 2, RADIUS * 2, mostlyOn ? COLOR_ON : COLOR_OFF, true, "Clock-" + fraction);
+			if (existed)
+				return;
+
+			drawTri();
+			drawRects();
+
+			var outline:FlxSprite = new FlxSprite( -1, -1, _outline);
+			outline.color = 0x202020;
+			stamp(outline);
+		}
+
+		private function drawTri():void {
+			var absAngle:Number = Math.PI * 2 * (1 - fraction);
+			var segment:int = fraction * 4;
+			if (segment == fraction * 4)
+				return;
+
+			var relAngle:Number;
+			if (mostlyOff)
+				relAngle = (Math.PI / 2) * (4 - segment) - absAngle; //360 or 270 degrees
+			else
+				relAngle = absAngle - (Math.PI / 2) * (3 - segment); //0 or 90 degrees
+
+			var edgeLength:Number = RADIUS / Math.cos(relAngle / 2);
+			C.log(fraction, segment, absAngle * 180 / Math.PI, relAngle * 180 / Math.PI);
+
+			var triangleShape:Shape = new Shape();
+			var p:Point;
+			triangleShape.graphics.lineStyle(1, minorColor());
+			triangleShape.graphics.beginFill(minorColor());
+			triangleShape.graphics.moveTo(RADIUS, RADIUS);
+			switch (segment) {
+				case 0: triangleShape.graphics.lineTo(RADIUS, RADIUS - edgeLength); break; //top
+				case 1: triangleShape.graphics.lineTo(RADIUS - edgeLength, RADIUS); break; //left
+
+				case 2: triangleShape.graphics.lineTo(RADIUS + edgeLength, RADIUS); break; //right
+				case 3: triangleShape.graphics.lineTo(RADIUS, RADIUS - edgeLength); break; //top
+			}
+			triangleShape.graphics.lineTo(Math.cos(absAngle - Math.PI / 2) * edgeLength + RADIUS,
+										  Math.sin(absAngle - Math.PI / 2) * edgeLength + RADIUS);
+			triangleShape.graphics.lineTo(RADIUS, RADIUS);
+			pixels.draw(triangleShape);
+		}
+
+		protected function drawRects():void {
+			if (fraction < 0.25 || fraction > 0.75)
+				return;
+			if (mostlyOff)
+				pixels.fillRect(new Rectangle(0, 0, RADIUS, RADIUS), COLOR_ON);
+			else if (mostlyOn)
+				pixels.fillRect(new Rectangle(RADIUS, 0, RADIUS, RADIUS), COLOR_OFF);
+			else
+				pixels.fillRect(new Rectangle(0, 0, RADIUS, RADIUS * 2), COLOR_ON);
+		}
+
+		public function set fraction(Fraction:Number):void {
+			if (_fraction != Fraction) {
+				_fraction = Fraction;
+				init();
+			}
+		}
+
+		public function get fraction():Number {
+			return _fraction;
+		}
+
+		protected function get mostlyOn():Boolean {
+			return _fraction > 0.5;
+		}
+
+		protected function get mostlyOff():Boolean {
+			return _fraction < 0.5;
+		}
+
+		protected function minorColor():uint {
+			return mostlyOn ? COLOR_OFF : COLOR_ON;
+		}
+
+		private const RADIUS:int = 16;
+		private const COLOR_ON:uint = 0xfff0ea67;
+		private const COLOR_OFF:uint = 0xff5482c4;
+
+		[Embed(source = "../../lib/art/outline.png")] private const _outline:Class;
+
+	}
+
+}


Добавлена функция отложенного вызова

Добавлена функция отложенного вызова

error: pathspec 'src/main/org/shypl/common/util/callDelayed.as' did not match any file(s) known to git

--- src/main/org/shypl/common/util/callDelayed.as
+++ src/main/org/shypl/common/util/callDelayed.as
@@ -0,0 +1,12 @@
+package org.shypl.common.util {
+	import flash.utils.setTimeout;
+
+	public function callDelayed(closure:Function, ...args):void {
+		if (args.length === 0) {
+			setTimeout(closure, 1)
+		}
+		else {
+			setTimeout.apply(null, [closure, 1].concat(args));
+		}
+	}
+}


fixing TextSlave to compile current version


pieces now spin with the board to always face the right way.

remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/en/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/rlowke/lowkemedia.git/'


adding method "toString" to Bullet class


Multimedia demo app class without TUI

Multimedia demo app class without TUI

error: pathspec 'mtApplicationNoTUI.as' did not match any file(s) known to git

--- mtApplicationNoTUI.as
+++ mtApplicationNoTUI.as
@@ -0,0 +1,291 @@
+package touchAll.demos.multimediaTouchDemo
+{
+	import flash.ui.*;
+	import flash.display.*;
+	import flash.events.Event;
+	//import flash.events.TouchEvent;
+	import flash.events.MouseEvent;
+	import flash.events.KeyboardEvent;
+
+	import touchAll.ITouchAll;
+	import touchAll.multimedia.Multimedia;
+
+	import org.tuio.*;
+	import org.tuio.connectors.*;
+	import org.tuio.debug.*;
+	import org.tuio.gestures.*;
+
+	/**
+	 * @author Gonçalo Amador
+	 */
+	[SWF(width="1280", height="720", frameRate="60", backgroundColor="#ffffff")]
+	public class MultimediaNoTouchAllDemo extends MovieClip implements ITouchAll
+	{
+		/* global variables */
+		private var background:Sprite = new Sprite;
+		private var packets_count:uint = 0;
+		private var log:String = "";
+		private var mouseCursor:Sprite;
+
+		private var tc:TuioClient;
+		private var tm:TuioManager;
+		private var gm:GestureManager;
+
+		private var multimedia:Multimedia = new Multimedia(stage);
+
+		public function MultimediaNoTouchAllDemo():void
+		{
+			if (stage) init();
+			else addEventListener(Event.ADDED_TO_STAGE, init);
+		}
+
+		private function init(e:Event = null):void
+		{
+			removeEventListener(Event.ADDED_TO_STAGE, init);
+
+			/* LOAD STAGE CONTENT */
+			backgroundLoader();
+			multimedia.setBackground(background);
+			multimedia.backgroundMultimediaEventListenersLoader();
+
+			/* load images */
+			multimedia.addImage("resources/summer.jpg");
+			multimedia.addImage("resources/palacio.jpg");
+			multimedia.addImage("resources/lake.jpg");
+			multimedia.addImage("resources/forest.jpg");
+			//multimedia.addImage("file:///G:/touch/Source%20Code/TouchProject/bin/resources/forest.jpg");
+
+			/* load an SWF */
+			//multimedia.addSWF("resources/test.swf");
+
+			/* load an MP4 and FLV */
+			multimedia.addVideo("resources/South Park Mac vs. PC.mp4");
+			multimedia.addVideo("resources/South Park Mac vs. PC vs. Linux.flv");
+
+			/* stage set up */
+			stageLoader();
+			stageEventListenersLoader();
+
+			/* tuio set up */
+			tuioLoader();
+		}
+
+		/* BACKGROUND FUNCTIONS */
+		/**
+		 * load default stage background
+		 */
+		public function backgroundLoader():void {
+			/*
+			 * Set blend mode "ALPHA" and
+			 * fill background at the starting position (0,0), with rgb color 0xFFFFFF and alpha blending 1
+			 */
+			background.blendMode = BlendMode.ALPHA;
+			background.graphics.beginFill(0xFFFFFF,1);
+			background.graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
+			background.graphics.endFill();
+
+			/* set activate doubleClick mouse checks */
+			trace("set activate doubleClick mouse checks.");
+			background.doubleClickEnabled = true;
+
+			/* add the background to the stage */
+			trace("add the background to the stage.");
+			stage.addChild(background);
+		}
+
+		/**
+		 * stage set up
+		 */
+		public function stageLoader():void {
+			/* STAGE SET UP */
+			trace("STAGE SET UP.");
+			stage.stageWidth = 1280;
+			stage.stageHeight = 720;
+
+			/* AIR stage settings */
+			trace("AIR stage settings.");
+			//stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
+			stage.scaleMode = StageScaleMode.NO_SCALE;
+			stage.align = StageAlign.TOP_LEFT;
+
+			/* set activate doubleClick mouse checks */
+			trace("set activate doubleClick mouse checks.");
+			stage.doubleClickEnabled = true;
+
+			/* load an circle to track mouse cursor */
+			trace("load an circle to track mouse cursor.");
+			addMouseCursor();
+		}
+
+		/**
+		 * stage event listeners set up
+		 */
+		public function stageEventListenersLoader():void {
+			/* STAGE EVENT LISTENERS */
+			/* add stage keyboard event listeners */
+			trace("add stage keyboard event listeners.");
+			stage.addEventListener(KeyboardEvent.KEY_DOWN, showTuioNetworkPacketsLog);
+
+			/* add stage mouse event listeners */
+			trace("add stage mouse event listeners.");
+			stage.addEventListener(MouseEvent.MOUSE_MOVE, followMouse);
+			stage.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
+			stage.addEventListener(MouseEvent.MOUSE_UP, mouseUp);
+		}
+
+		/**
+		 * Show total tuio events captured log
+		 */
+		private function packetsCount(e:TuioEvent):void {
+			var date:Date = new Date();
+			packets_count++;
+
+			log += packets_count + " Packet captured TuioEvent at " + date.fullYear;
+
+			if ((date.month + 1) < 10) {
+				log += "-0" + (date.month + 1);
+			}
+			else {
+				log += "-" + (date.month + 1);
+			}
+
+			if (date.date < 10) {
+				log += "-0" + date.date;
+			}
+			else {
+				log += "-" + date.date;
+			}
+
+			if (date.hours < 10) {
+				log += " 0" + date.hours;
+			}
+			else {
+				log += " " + date.hours;
+			}
+
+			if (date.minutes < 10) {
+				log += ":0" + date.minutes;
+			}
+			else {
+				log += ":" + date.minutes;
+			}
+
+			if (date.seconds < 10) {
+				log += ":0" + date.seconds;
+			}
+			else {
+				log += ":" + date.seconds;
+			}
+
+			if (date.milliseconds < 10) {
+				log += ".00" + date.milliseconds;
+			} else if (date.milliseconds < 100) {
+				log += ".0" + date.milliseconds;
+			}
+			else {
+				log += "." + date.milliseconds;
+			}
+
+			log += "\n";
+		}
+
+		/**
+		 * handle stage "F1" keyboard events
+		 */
+		private function showTuioNetworkPacketsLog(e:KeyboardEvent):void {
+			if (e.keyCode == Keyboard.F1) {
+				trace("touch hold.");
+				trace(log);
+				trace("Packets captured " + packets_count + "\n");
+			}
+		}
+
+		/**
+		 * display a circle where mouse cursor is
+		 */
+		private function addMouseCursor():void {
+			/* Create a Sprite instance called mouseCursor */
+			mouseCursor = new Sprite;
+
+			/*
+			 * Set blend mode "DARKEN" and
+			 * fill a circle at the starting position (0,0) of radius 5, with rgb color '_color' and alpha blending 1 or
+			 * draw a circle with line thickness 1.1, with rgb color '_color' and alpha blending 1.
+			 */
+			//mouseCursor.blendMode = BlendMode.DARKEN;
+			//mouseCursor.graphics.beginFill(0x770000, 1);
+			mouseCursor.graphics.lineStyle(1.1, 0x000000, 1, false, LineScaleMode.NONE);
+			mouseCursor.graphics.drawCircle(0, 0, 20);
+			//mouseCursor.graphics.endFill();
+
+			/* set circle center at mouse coursor position */
+			mouseCursor.x = mouseCursor.mouseX;
+			mouseCursor.y = mouseCursor.mouseY;
+
+			/* set circle visibility default value */
+			mouseCursor.visible = false;
+
+			/* add the circle to the stage */
+			stage.addChild(mouseCursor);
+		}
+
+		/**
+		 * handle mouse movement events for the circle
+		 */
+		private function followMouse(e:MouseEvent):void {
+			if (mouseCursor != null) {
+				mouseCursor.x = stage.mouseX;
+				mouseCursor.y = stage.mouseY;
+			}
+		}
+
+		/**
+		 * handle mouse down events for circle
+		 */
+		private function mouseDown(e:MouseEvent):void {
+			if (mouseCursor != null) {
+				mouseCursor.visible = true;
+			}
+		}
+
+		/**
+		 * handle mouse up events for circle
+		 */
+		private function mouseUp(e:MouseEvent):void {
+			if (mouseCursor != null) {
+				mouseCursor.visible = false;
+			}
+		}
+
+		/**
+		 * tuio set up
+		 */
+		public function tuioLoader():void {
+			var tc:TuioClient;
+
+			trace("tuioClient UDP connector.")
+			tc = new TuioClient(new UDPConnector("127.0.0.1", 3333));
+
+			trace("tuioDebug on.")
+			tc.addListener(TuioDebug.init(stage));
+
+			/* tuioManager setup (a container which processes the Tuio tracking data received by the given TuioClient) creation */
+			trace("tuioManager on.")
+			tm = TuioManager.init(stage, tc);
+
+			/* add tuioManager tuio event listeners */
+			tm.addEventListener(TuioEvent.ADD, packetsCount);
+			tm.addEventListener(TuioEvent.REMOVE, packetsCount);
+			tm.addEventListener(TuioEvent.UPDATE, packetsCount);
+
+			trace("gestureManager on.")
+			gm = GestureManager.init(stage, tc);
+
+			GestureManager.addGesture(new DragGesture());
+			GestureManager.addGesture(new ZoomGesture());
+			GestureManager.addGesture(new RotateGesture());
+			GestureManager.addGesture(new PressTapGesture());
+			GestureManager.addGesture(new OneDownOneMoveGesture());
+		}
+	}
+}