stick DataGridColumn from FlexJSUI into FlexJSJX in order to fix the build

error: pathspec 'frameworks/as/projects/FlexJSJX/src/org/apache/flex/html/staticControls/supportClasses/DataGridColumn.as' did not match any file(s) known to git

--- frameworks/as/projects/FlexJSJX/src/org/apache/flex/html/staticControls/supportClasses/DataGridColumn.as
+++ frameworks/as/projects/FlexJSJX/src/org/apache/flex/html/staticControls/supportClasses/DataGridColumn.as
@@ -0,0 +1,69 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.staticControls.supportClasses
+{
+	import mx.core.IFactory;
+
+	public class DataGridColumn
+	{
+		public function DataGridColumn()
+		{
+		}
+
+		private var _itemRenderer:IFactory;
+		public function get itemRenderer():IFactory
+		{
+			return _itemRenderer;
+		}
+		public function set itemRenderer(value:IFactory):void
+		{
+			_itemRenderer = value;
+		}
+
+		private var _columnWidth:Number = 100;
+		public function get columnWidth():Number
+		{
+			return _columnWidth;
+		}
+		public function set columnWidth(value:Number):void
+		{
+			_columnWidth = value;
+		}
+
+		private var _label:String;
+		public function get label():String
+		{
+			return _label;
+		}
+		public function set label(value:String):void
+		{
+			_label = value;
+		}
+
+		private var _dataField:String;
+		public function get dataField():String
+		{
+			return _dataField;
+		}
+		public function set dataField(value:String):void
+		{
+			_dataField = value;
+		}
+	}
+}


qnd: add error event text to the KalturaError

git-svn-id: 8a2ccb88241e16c78017770bc38d91d6d5396a5a@90711 6b8eccd3-e8c5-4e7d-8186-e12b5326b719

--- generator/sources/as3/com/kaltura/delegates/WebDelegateBase.as
+++ generator/sources/as3/com/kaltura/delegates/WebDelegateBase.as
@@ -394,6 +394,7 @@
 		 */
 		protected function createKalturaError(event:ErrorEvent, loaderData:*):KalturaError {
 			var ke:KalturaError = new KalturaError();
+			ke.errorMsg = event.text;
 			return ke;
 		}


Added the invalidate() method to the mediator map interface

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/'


Add IConstraints.

Add IConstraints.

error: pathspec 'src/com/esri/builder/model/IConstraints.as' did not match any file(s) known to git

--- src/com/esri/builder/model/IConstraints.as
+++ src/com/esri/builder/model/IConstraints.as
@@ -0,0 +1,33 @@
+////////////////////////////////////////////////////////////////////////////////
+// Copyright (c) 2008-2013 Esri. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//    http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+////////////////////////////////////////////////////////////////////////////////
+package com.esri.builder.model
+{
+
+public interface IConstraints
+{
+    function get left():String;
+    function set left(value:String):void;
+
+    function get top():String;
+    function set top(value:String):void;
+
+    function get right():String;
+    function set right(value:String):void;
+
+    function get bottom():String;
+    function set bottom(value:String):void;
+}
+}


Added SIMD Macro.

Added SIMD Macro.

error: pathspec 'apparat-ersatz/src/main/as3/apparat/math/SIMD.as' did not match any file(s) known to git

--- apparat-ersatz/src/main/as3/apparat/math/SIMD.as
+++ apparat-ersatz/src/main/as3/apparat/math/SIMD.as
@@ -0,0 +1,843 @@
+package apparat.math {
+  import apparat.asm.*
+  import apparat.inline.Macro
+
+  /**
+   * The SIMD macro is a collection of single instructions
+   * for multiple data.
+   *
+   *
All instructions are performed four times with respect
+   * to the size of the datatype. Methods prefixed with d
+   * are double based (8b) and methods prefixed with f
+   * are float based (4b).

+   *
+   *
To illustrate this, here is an example of dmov
+   * using the Memory class:

+   *
+   *

+   * Memory.writeDouble(Memory.readDouble(source), target)
+   * Memory.writeDouble(Memory.readDouble(source + 8), target + 8)
+   * Memory.writeDouble(Memory.readDouble(source + 16), target + 16)
+   * Memory.writeDouble(Memory.readDouble(source + 24), target + 24)
+   *

+   *
+   *
This code is implemented in SIMD as well with some special
+   * optimizations applied. Although SIMD is a macro it will never
+   * modify any incoming parameters besides in the *get
+   * instructions.
+   * You also do not have to fear register pressure since all
+   * instructions are implemented without adding any extra registers.

+   *
+   * @see apparat.memory.Memory
+   */
+  public class SIMD extends Macro {
+    //////////////////////////////////////////////////
+    // DOUBLE
+    //////////////////////////////////////////////////
+
+    /**
+     * Performs the operation target = source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function dmov(target:  int, source: int): void {
+      __asm(
+        GetLocal(source),
+        GetDouble,
+        GetLocal(target),
+        SetDouble,
+
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        SetDouble,
+
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        SetDouble,
+
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = value.
+     *
+     * @param target Target address in domain memory.
+     * @param value The value to set.
+     */
+    public static function dset(target: int, value: Number): void {
+      __asm(
+        GetLocal(value),
+        GetLocal(target),
+        SetDouble,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        SetDouble,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        SetDouble,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = target + source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function dadd(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        GetDouble,
+        Add,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        Add,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        Add,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        Add,
+        Swap,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = target - source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function dsub(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        GetDouble,
+        Subtract,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        Subtract,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        Subtract,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        Subtract,
+        Swap,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = target * source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function dmul(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        GetDouble,
+        Multiply,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        Multiply,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        Multiply,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        Multiply,
+        Swap,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = target / source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function ddiv(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        GetDouble,
+        Divide,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        Divide,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        Divide,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        Divide,
+        Swap,
+        SetDouble
+      )
+    }
+
+    /**
+     * Performs the operation target = target % source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function dmod(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        GetDouble,
+        Modulo,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        Modulo,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        Modulo,
+        Swap,
+        SetDouble,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetDouble,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        Modulo,
+        Swap,
+        SetDouble
+      )
+    }
+
+    /**
+     * Assigns the double values at target address to the given result registers.
+     *
+     * @param source The source address in domain memory.
+     * @param r0 The register which will receive the first value.
+     * @param r1 The register which will receive the second value.
+     * @param r2 The register which will receive the third value.
+     * @param r3 The register which will receive the fourth value.
+     */
+    public static function dget(source: int,
+                                r0: Number, r1: Number, r2: Number, r3: Number): void {
+      __asm(
+        GetLocal(source),
+        GetDouble,
+        SetLocal(r0),
+
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetDouble,
+        SetLocal(r1),
+
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetDouble,
+        SetLocal(r2),
+
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetDouble,
+        SetLocal(r3)
+      )
+    }
+
+    //////////////////////////////////////////////////
+    // FLOAT
+    //////////////////////////////////////////////////
+
+    /**
+     * Performs the operation target = source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fmov(target:  int, source: int): void {
+      __asm(
+        GetLocal(source),
+        GetFloat,
+        GetLocal(target),
+        SetFloat,
+
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        SetFloat,
+
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        SetFloat,
+
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = value.
+     *
+     * @param target Target address in domain memory.
+     * @param value The value to set.
+     */
+    public static function fset(target: int, value: Number): void {
+      __asm(
+        GetLocal(value),
+        GetLocal(target),
+        SetFloat,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        SetFloat,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        SetFloat,
+
+        GetLocal(value),
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = target + source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fadd(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        GetFloat,
+        Add,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        Add,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        Add,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        Add,
+        Swap,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = target - source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fsub(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        GetFloat,
+        Subtract,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        Subtract,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        Subtract,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        Subtract,
+        Swap,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = target * source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fmul(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        GetFloat,
+        Multiply,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        Multiply,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        Multiply,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        Multiply,
+        Swap,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = target / source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fdiv(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        GetFloat,
+        Divide,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        Divide,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        Divide,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        Divide,
+        Swap,
+        SetFloat
+      )
+    }
+
+    /**
+     * Performs the operation target = target % source.
+     *
+     * @param target Target address in domain memory.
+     * @param source Source address in domain memory.
+     */
+    public static function fmod(target: int, source: int): void {
+      __asm(
+        GetLocal(target),
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        GetFloat,
+        Modulo,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x08),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        Modulo,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x10),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        Modulo,
+        Swap,
+        SetFloat,
+
+        GetLocal(target),
+        PushByte(0x18),
+        AddInt,
+        Dup,
+        GetFloat,
+        GetLocal(source),
+        PushByte(0x18),
+        AddInt,
+        GetFloat,
+        Modulo,
+        Swap,
+        SetFloat
+      )
+    }
+
+    /**
+     * Assigns the double values at target address to the given result registers.
+     *
+     * @param source The source address in domain memory.
+     * @param r0 The register which will receive the first value.
+     * @param r1 The register which will receive the second value.
+     * @param r2 The register which will receive the third value.
+     * @param r3 The register which will receive the fourth value.
+     */
+    public static function fget(source: int,
+                                r0: Number, r1: Number, r2: Number, r3: Number): void {
+      __asm(
+        GetLocal(source),
+        GetFloat,
+        SetLocal(r0),
+
+        GetLocal(source),
+        PushByte(0x08),
+        AddInt,
+        GetFloat,
+        SetLocal(r1),
+
+        GetLocal(source),
+        PushByte(0x10),
+        AddInt,
+        GetFloat,
+        SetLocal(r2),
+
+        GetLocal(source),
+        PushByte(0x18),
+
+        AddInt,
+        GetFloat,
+        SetLocal(r3)
+      )
+    }
+  }
+}


Refactored some stuff out of MsoySprite into a generic container that
can load and display images, swfs, video, etc...

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

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

--- src/as/com/threerings/util/MediaContainer.as
+++ src/as/com/threerings/util/MediaContainer.as
@@ -0,0 +1,446 @@
+package com.threerings.util {
+
+import flash.display.DisplayObject;
+import flash.display.Loader;
+import flash.display.LoaderInfo;
+import flash.display.Shape;
+
+import flash.errors.IOError;
+
+import flash.events.Event;
+import flash.events.EventDispatcher;
+import flash.events.IEventDispatcher;
+import flash.events.IOErrorEvent;
+import flash.events.MouseEvent;
+import flash.events.NetStatusEvent;
+import flash.events.ProgressEvent;
+import flash.events.SecurityErrorEvent;
+import flash.events.StatusEvent;
+import flash.events.TextEvent;
+
+import flash.geom.Point;
+
+import flash.media.Video;
+
+import flash.system.ApplicationDomain;
+import flash.system.LoaderContext;
+import flash.system.SecurityDomain;
+
+import flash.net.URLRequest;
+
+import mx.core.UIComponent;
+
+import mx.containers.Box;
+import mx.controls.VideoDisplay;
+
+import mx.events.VideoEvent;
+
+import com.threerings.util.StringUtil;
+
+import com.threerings.media.image.ImageUtil;
+
+/**
+ * A wrapper class for all media that will be placed on the screen.
+ * Subject to change.
+ */
+public class MediaContainer extends Box
+{
+    /** A log instance that can be shared by sprites. */
+    protected static const log :Log = Log.getLog(MediaContainer);
+
+    /**
+     * Constructor.
+     */
+    public function MediaContainer (url :String = null)
+    {
+        if (url != null) {
+            setMedia(url);
+        }
+
+        mouseEnabled = false;
+        mouseChildren = true;
+    }
+
+    /**
+     * Configure the media to display.
+     */
+    public function setMedia (url :String) :void
+    {
+        // shutdown any previous media
+        if (_media != null) {
+            shutdown(false);
+        }
+
+        // set up the new media
+        if (StringUtil.endsWith(url.toLowerCase(), ".flv")) {
+            setupVideo(url);
+
+        } else {
+            setupSwfOrImage(url);
+        }
+    }
+
+    /**
+     * Configure this sprite to show a video.
+     */
+    protected function setupVideo (url :String) :void
+    {
+        var vid :VideoDisplay = new VideoDisplay();
+        vid.autoPlay = false;
+        _media = vid;
+        addChild(vid);
+        vid.addEventListener(ProgressEvent.PROGRESS, loadVideoProgress);
+        vid.addEventListener(VideoEvent.READY, loadVideoReady);
+        vid.addEventListener(VideoEvent.REWIND, videoDidRewind);
+
+        // start it loading
+        vid.source = url;
+        vid.load();
+    }
+
+    /**
+     * Configure this sprite to show an image or flash movie.
+     */
+    protected function setupSwfOrImage (url :String) :void
+    {
+        // create our loader and set up some event listeners
+        var loader :Loader = new Loader();
+        _media = loader;
+        var info :LoaderInfo = loader.contentLoaderInfo;
+        info.addEventListener(Event.COMPLETE, loadingComplete);
+        info.addEventListener(IOErrorEvent.IO_ERROR, loadError);
+        info.addEventListener(ProgressEvent.PROGRESS, loadProgress);
+
+        // create a mask to prevent the media from drawing out of bounds
+        if (maxContentWidth < int.MAX_VALUE  &&
+                maxContentHeight < int.MAX_VALUE) {
+            var mask :Shape = new Shape();
+            mask.graphics.beginFill(0xFFFFFF);
+            mask.graphics.drawRect(0, 0, maxContentWidth, maxContentHeight);
+            mask.graphics.endFill();
+            // the mask must be added to the display list (which is wacky)
+            rawChildren.addChild(mask);
+            loader.mask = mask;
+        }
+
+        // start it loading, add it as a child
+        loader.load(new URLRequest(url), getContext(url));
+        rawChildren.addChild(loader);
+
+        try {
+            updateContentDimensions(info.width, info.height);
+        } catch (err :Error) {
+            // an error is thrown trying to access these props before they're
+            // ready
+        }
+    }
+
+    /**
+     * Display a 'broken image' to indicate there were troubles with
+     * loading the media.
+     */
+    protected function setupBrokenImage (w :int = -1, h :int = -1) :void
+    {
+        if (w == -1) {
+            w = 100;
+        }
+        if (h == -1) {
+            h = 100;
+        }
+        _media = ImageUtil.createErrorImage(w, h);
+        rawChildren.addChild(_media);
+    }
+
+    /**
+     * Get the application domain being used by this media, or null if
+     * none or not applicable.
+     */
+    public function getApplicationDomain () :ApplicationDomain
+    {
+        return (_media is Loader)
+            ? (_media as Loader).contentLoaderInfo.applicationDomain
+            : null;
+    }
+
+    /**
+     * Unload the media we're displaying, clean up any resources.
+     *
+     * @param completely if true, we're going away and should stop
+     * everything. Otherwise, we're just loading up new media.
+     */
+    public function shutdown (completely :Boolean = true) :void
+    {
+        try {
+            if (_media is Loader) {
+                var loader :Loader = (_media as Loader);
+                // remove any listeners
+                removeListeners(loader.contentLoaderInfo);
+
+                // dispose of media
+                try {
+                    loader.close();
+                } catch (ioe :IOError) {
+                    // ignore
+                }
+                loader.unload();
+
+                // remove from hierarchy
+                if (loader.mask != null) {
+                    rawChildren.removeChild(loader.mask);
+                }
+                rawChildren.removeChild(loader);
+
+            } else if (_media is VideoDisplay) {
+                var vid :VideoDisplay = (_media as VideoDisplay);
+                // remove any listeners
+                vid.removeEventListener(ProgressEvent.PROGRESS,
+                    loadVideoProgress);
+                vid.removeEventListener(VideoEvent.READY, loadVideoReady);
+                vid.removeEventListener(VideoEvent.REWIND, videoDidRewind);
+
+                // dispose of media
+                vid.pause();
+                try {
+                    vid.close();
+                } catch (ioe :IOError) {
+                    // ignore
+                }
+                vid.stop();
+
+                // remove from hierarchy
+                removeChild(vid);
+
+            } else if (_media != null) {
+                if (_media is UIComponent) {
+                    removeChild(_media);
+                } else {
+                    rawChildren.removeChild(_media);
+                }
+            }
+        } catch (ioe :IOError) {
+            log.warning("Error shutting down media: " + ioe);
+            log.logStackTrace(ioe);
+        }
+
+        // clean everything up
+        _w = 0;
+        _h = 0;
+        _media = null;
+    }
+
+    /**
+     * Get the width of the content, bounded by the maximum.
+     */
+    public function get contentWidth () :int
+    {
+        return Math.min(Math.abs(_w * getMediaScaleX()), maxContentWidth);
+    }
+
+    /**
+     * Get the height of the content, bounded by the maximum.
+     */
+    public function get contentHeight () :int
+    {
+        return Math.min(Math.abs(_h * getMediaScaleY()), maxContentHeight);
+    }
+
+    /**
+     * Get the maximum allowable width for our content.
+     */
+    public function get maxContentWidth () :int
+    {
+        return int.MAX_VALUE;
+    }
+
+    /**
+     * Get the maximum allowable height for our content.
+     */
+    public function get maxContentHeight () :int
+    {
+        return int.MAX_VALUE;
+    }
+
+    /**
+     * Get the X scaling factor to use on the actual media.
+     */
+    public function getMediaScaleX () :Number
+    {
+        return 1;
+    }
+
+    /**
+     * Get the Y scaling factor to use on the actual media.
+     */
+    public function getMediaScaleY () :Number
+    {
+        return 1;
+    }
+
+    /**
+     * Return the LoaderContext that should be used to load the media
+     * at the specified url.
+     */
+    protected function getContext (url :String) :LoaderContext
+    {
+        /* Super unrestrictive */
+//        return null;
+
+        /* a little unrestrictive */
+//        return new LoaderContext(false,
+//            ApplicationDomain.currentDomain,
+//            null);
+
+        /* more restrictive */
+        return new LoaderContext(false,
+            new ApplicationDomain(ApplicationDomain.currentDomain),
+            null);
+
+        /*
+        var loadCtx :LoaderContext = (_loadCtx.get(url) as LoaderContext);
+        if (loadCtx == null) {
+            trace("Creating new loadctx for " + url);
+            loadCtx = new LoaderContext(
+                false,
+                //new ApplicationDomain(ApplicationDomain.currentDomain),
+                ApplicationDomain.currentDomain,
+                null
+                );
+            _loadCtx.put(url, loadCtx);
+        }
+        return loadCtx;
+        */
+    }
+
+    /**
+     * Remove our listeners from the LoaderInfo object.
+     */
+    protected function removeListeners (info :LoaderInfo) :void
+    {
+        info.removeEventListener(Event.COMPLETE, loadingComplete);
+        info.removeEventListener(IOErrorEvent.IO_ERROR, loadError);
+        info.removeEventListener(ProgressEvent.PROGRESS, loadProgress);
+    }
+
+    /**
+     * A callback to receive IO_ERROR events.
+     */
+    protected function loadError (event :IOErrorEvent) :void
+    {
+        var info :LoaderInfo = (event.target as LoaderInfo);
+        removeListeners(info);
+
+        var loader :Loader = (_media as Loader);
+        rawChildren.removeChild(loader);
+        if (loader.mask != null) {
+            rawChildren.removeChild(loader.mask);
+        }
+
+        setupBrokenImage(-1, -1);
+    }
+
+    /**
+     * A callback to receive PROGRESS events.
+     */
+    protected function loadProgress (event :ProgressEvent) :void
+    {
+        updateLoadingProgress(event.bytesLoaded, event.bytesTotal);
+        var info :LoaderInfo = (event.target as LoaderInfo);
+        try {
+            updateContentDimensions(info.width, info.height);
+        } catch (err :Error) {
+            // an error is thrown trying to access these props before they're
+            // ready
+        }
+    }
+
+    /**
+     * A callback to receive PROGRESS events on the video.
+     */
+    protected function loadVideoProgress (event :ProgressEvent) :void
+    {
+        var vid :VideoDisplay = (event.currentTarget as VideoDisplay);
+        updateContentDimensions(vid.videoWidth, vid.videoHeight);
+
+        updateLoadingProgress(vid.bytesLoaded, vid.bytesTotal);
+    }
+
+    /**
+     * A callback to receive READY events for video.
+     */
+    protected function loadVideoReady (event :VideoEvent) :void
+    {
+        var vid :VideoDisplay = (event.currentTarget as VideoDisplay);
+        updateContentDimensions(vid.videoWidth, vid.videoHeight);
+        updateLoadingProgress(1, 1);
+
+        vid.play();
+
+        // remove the two listeners
+        vid.removeEventListener(ProgressEvent.PROGRESS, loadVideoProgress);
+        vid.removeEventListener(VideoEvent.READY, loadVideoReady);
+    }
+
+    /**
+     * Callback function to receive COMPLETE events for swfs or images.
+     */
+    protected function loadingComplete (event :Event) :void
+    {
+        var info :LoaderInfo = (event.target as LoaderInfo);
+        removeListeners(info);
+
+        updateContentDimensions(info.width, info.height);
+        updateLoadingProgress(1, 1);
+    }
+
+    /**
+     * Called when the video auto-rewinds.
+     */
+    protected function videoDidRewind (event :VideoEvent) :void
+    {
+        (_media as VideoDisplay).play();
+    }
+
+    /**
+     * Called during loading as we figure out how big the content we're
+     * loading is.
+     */
+    protected function updateContentDimensions (ww :int, hh :int) :void
+    {
+        width = ww;
+        height = hh;
+
+        // update our saved size, and possibly notify our container
+        if (_w != ww || _h != hh) {
+            _w = ww;
+            _h = hh;
+            contentDimensionsUpdated();
+        }
+    }
+
+    /**
+     * Called when we know the true size of the content.
+     */
+    protected function contentDimensionsUpdated () :void
+    {
+        // nada, by default
+    }
+
+    /**
+     * Update the graphics to indicate how much is loaded.
+     */
+    protected function updateLoadingProgress (
+            soFar :Number, total :Number) :void
+    {
+        // nada, by default
+    }
+
+    /** The unscaled width of our content. */
+    protected var _w :int;
+
+    /** The unscaled height of our content. */
+    protected var _h :int;
+
+    /** Either a Loader or a VideoDisplay. */
+    protected var _media :DisplayObject;
+}
+}


Create FMSConnection.as

Create FMSConnection.as

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

--- examples/web/app/classes/server/FMSConnection.as
+++ examples/web/app/classes/server/FMSConnection.as
@@ -0,0 +1,39 @@
+package server {
+    import flash.net.NetConnection;
+    import flash.net.Responder;
+
+    public final class FMSConnection extends NetConnection {
+
+        public function FMSConnection(command:String = null, ...rest) {
+            command && this.connect.apply(null, [command].concat(rest));
+        }
+
+        public function dispose():void {
+            this.close();
+        }
+
+        override public function connect(command:String, ...rest):void {
+            try {
+                super.connect.apply(null, [command].concat(rest));
+            } catch (error:Error) {
+                trace(this.toString(), 'Can\'t connect...the connection name is already being used by another SWF.');
+            }
+        }
+
+        override public function close():void {
+            try {
+                super.close();
+            } catch (error:Error) {
+                trace(this.toString(), error.message);
+            }
+        }
+
+        override public function call(command:String, responder:Responder, ...rest):void {
+            super.call.apply(null, [command, responder].concat(rest));
+        }
+
+        override public function toString():String {
+            return '[FMSConnection]';
+        }
+    }
+}


Small copyright update

Small copyright update

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/'


Reduce test running time.

Reduce test running time.

--- src/avm2/tests/regress/correctness/arrays.as
+++ src/avm2/tests/regress/correctness/arrays.as
@@ -1,4 +1,4 @@
-const count = 1024;
+const count = 16;

 function foo() {
   var a = [];


- feature: added GeomUtil with support for encoding and decoding CSS matrices

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

error: pathspec 'src/reprise/utils/GeomUtil.as' did not match any file(s) known to git

--- src/reprise/utils/GeomUtil.as
+++ src/reprise/utils/GeomUtil.as
@@ -0,0 +1,48 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Fork unstable media GmbH
+//  Copyright 2006-2008 Fork unstable media GmbH
+//  All Rights Reserved.
+//
+//  NOTICE: Fork unstable media permits you to use, modify, and distribute this
+//  file in accordance with the terms of the license agreement accompanying it.
+//
+////////////////////////////////////////////////////////////////////////////////
+
+package reprise.utils
+{
+	import flash.geom.Matrix;
+
+	public class GeomUtil
+	{
+		/***************************************************************************
+		*							private properties							   *
+		***************************************************************************/
+		private static const MATRIX_MAPPINGS : Array = ['a', 'c', 'b', 'd', 'tx', 'ty'];
+
+
+		/***************************************************************************
+		*							public methods								   *
+		***************************************************************************/
+		public function GeomUtil()
+		{
+			throw new Error("You don't instantiate the GeomUtil!");
+		}
+
+		public static function matrixToCSSMatrixString(matrix : Matrix) : String
+		{
+			return 'matrix(' + matrix.a + ', ' + matrix.c + ', ' + matrix.b + ', ' +
+				matrix.d + ', ' + matrix.tx + ', ' + matrix.ty + ')';
+		}
+		public static function CSSMatrixParametersToMatrix(matrixParameters : Array) : Matrix
+		{
+			var mappings : Array = MATRIX_MAPPINGS;
+			var matrix : Matrix = new Matrix();
+			for (var i : int = matrixParameters.length; i--;)
+			{
+				matrix[mappings[i]] = parseFloat(matrixParameters[i]);
+			}
+			return matrix;
+		}
+	}
+}


adding set/unset triggers

adding set/unset triggers

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/'


Leave interval check running for log events

--- src/org/openvv/OVVAsset.as
+++ src/org/openvv/OVVAsset.as
@@ -591,10 +591,10 @@
 					}
 					break;
 				case VPAIDEvent.AdPaused:
-					isPaused = true;
+					_isPaused = true;
 					break;
 				case VPAIDEvent.AdPlaying:
-					isPaused = false;
+					_isPaused = false;
 					break;
 				default:
 					// do nothing
@@ -650,7 +650,6 @@
 		private function raiseImpressionUnmeasurable(ovvData:*):void
 		{
 			dispatchEvent(new OVVEvent(OVVEvent.OVVImpressionUnmeasurable, ovvData));
-			_intervalTimer.removeEventListener(TimerEvent.TIMER, onIntervalCheck);
 			_impressionUnmeasurableEventRaised = true;
 		}


created KeyboardCodes. Most of these constants are mysteriously missing from flash.ui.Keyboard, where they're supposed to be.

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

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

--- src/as/com/threerings/util/KeyboardCodes.as
+++ src/as/com/threerings/util/KeyboardCodes.as
@@ -0,0 +1,138 @@
+//
+// $Id$
+//
+// 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 {
+
+/**
+ * Keycode constants.
+ *
+ * (The Flex documentation incorrectly indicates that flash.ui.Keyboard has all these
+ * constants defined.)
+ */
+public class KeyboardCodes
+{
+    public static const A :uint = 65;
+    public static const B :uint = 66;
+    public static const C :uint = 67;
+    public static const D :uint = 68;
+    public static const E :uint = 69;
+    public static const F :uint = 70;
+    public static const G :uint = 71;
+    public static const H :uint = 72;
+    public static const I :uint = 73;
+    public static const J :uint = 74;
+    public static const K :uint = 75;
+    public static const L :uint = 76;
+    public static const M :uint = 77;
+    public static const N :uint = 78;
+    public static const O :uint = 79;
+    public static const P :uint = 80;
+    public static const Q :uint = 81;
+    public static const R :uint = 82;
+    public static const S :uint = 83;
+    public static const T :uint = 84;
+    public static const U :uint = 85;
+    public static const V :uint = 86;
+    public static const W :uint = 87;
+    public static const X :uint = 88;
+    public static const Y :uint = 89;
+    public static const Z :uint = 90;
+
+    public static const NUMBER_0 :uint = 48;
+    public static const NUMBER_1 :uint = 49;
+    public static const NUMBER_2 :uint = 50;
+    public static const NUMBER_3 :uint = 51;
+    public static const NUMBER_4 :uint = 52;
+    public static const NUMBER_5 :uint = 53;
+    public static const NUMBER_6 :uint = 54;
+    public static const NUMBER_7 :uint = 55;
+    public static const NUMBER_8 :uint = 56;
+    public static const NUMBER_9 :uint = 57;
+
+    public static const NUMPAD_0 :uint = 96;
+    public static const NUMPAD_1 :uint = 97;
+    public static const NUMPAD_2 :uint = 98;
+    public static const NUMPAD_3 :uint = 99;
+    public static const NUMPAD_4 :uint = 100;
+    public static const NUMPAD_5 :uint = 101;
+    public static const NUMPAD_6 :uint = 102;
+    public static const NUMPAD_7 :uint = 103;
+    public static const NUMPAD_8 :uint = 104;
+    public static const NUMPAD_9 :uint = 105;
+
+    public static const NUMPAD_ADD :uint = 107;
+    public static const NUMPAD_DECIMAL :uint = 110;
+    public static const NUMPAD_DIVIDE :uint = 111;
+    public static const NUMPAD_ENTER :uint = 108;
+    public static const NUMPAD_MULTIPLY :uint = 106;
+    public static const NUMPAD_SUBTRACT :uint = 109;
+
+    public static const F1 :uint = 112;
+    public static const F2 :uint = 113;
+    public static const F3 :uint = 114;
+    public static const F4 :uint = 115;
+    public static const F5 :uint = 116;
+    public static const F6 :uint = 117;
+    public static const F7 :uint = 118;
+    public static const F8 :uint = 119;
+    public static const F9 :uint = 120;
+    public static const F10 :uint = 121;
+    public static const F11 :uint = 122;
+    public static const F12 :uint = 123;
+    public static const F13 :uint = 124;
+    public static const F14 :uint = 125;
+    public static const F15 :uint = 126;
+
+    public static const LEFT :uint = 37;
+    public static const UP :uint = 38;
+    public static const RIGHT :uint = 39;
+    public static const DOWN :uint = 40;
+
+    public static const ALTERNATE :uint = 18;
+    public static const BACKQUOTE :uint = 192;
+    public static const BACKSLASH :uint = 220;
+    public static const BACKSPACE :uint = 8;
+    public static const CAPS_LOCK :uint = 20;
+    public static const COMMA :uint = 188;
+    public static const COMMAND :uint = 15;
+    public static const CONTROL :uint = 17;
+    public static const DELETE :uint = 46;
+    public static const END :uint = 35;
+    public static const ENTER :uint = 13;
+    public static const EQUAL :uint = 187;
+    public static const ESCAPE :uint = 27;
+    public static const HOME :uint = 36;
+    public static const INSERT :uint = 45;
+    public static const LEFTBRACKET :uint = 219;
+    public static const MINUS :uint = 189;
+    public static const PAGE_DOWN :uint = 34;
+    public static const PAGE_UP :uint = 33;
+    public static const PERIOD :uint = 190;
+    public static const QUOTE :uint = 222;
+    public static const RIGHTBRACKET :uint = 221;
+    public static const SEMICOLON :uint = 186;
+    public static const SHIFT :uint = 16;
+    public static const SLASH :uint = 191;
+    public static const SPACE :uint = 32;
+    public static const TAB :uint = 9;
+}
+
+}


Update static/vendors/ace-builds/demo/kitchen-sink/docs/actionscript.as

Signed-off-by: Bernard Ojengwa <fccb4cc00c1ba7e51bf5c2b5f77130b9fe8d917e@gmail.com>

error: pathspec 'static/vendors/ace-builds/demo/kitchen-sink/docs/actionscript.as' did not match any file(s) known to git

--- static/vendors/ace-builds/demo/kitchen-sink/docs/actionscript.as
+++ static/vendors/ace-builds/demo/kitchen-sink/docs/actionscript.as
@@ -0,0 +1,51 @@
+package code
+{
+    /*****************************************
+	 * based on textmate actionscript bundle
+	 ****************************************/
+
+	import fl.events.SliderEvent;
+
+	public class Foo extends MovieClip
+	{
+		//*************************
+		// Properties:
+
+		public var activeSwatch:MovieClip;
+
+		// Color offsets
+		public var c1:Number = 0;	// R
+
+		//*************************
+		// Constructor:
+
+		public function Foo()
+		{
+			// Respond to mouse events
+			swatch1_btn.addEventListener(MouseEvent.CLICK,swatchHandler,false,0,false);
+			previewBox_btn.addEventListener(MouseEvent.MOUSE_DOWN,dragPressHandler);
+
+			// Respond to drag events
+			red_slider.addEventListener(SliderEvent.THUMB_DRAG,sliderHandler);
+
+			// Draw a frame later
+			addEventListener(Event.ENTER_FRAME,draw);
+		}
+
+		protected function clickHandler(event:MouseEvent):void
+		{
+			car.transform.colorTransform = new ColorTransform(0,0,0,1,c1,c2,c3);
+		}
+
+		protected function changeRGBHandler(event:Event):void
+		{
+			c1 = Number(c1_txt.text);
+
+			if(!(c1>=0)){
+				c1 = 0;
+			}
+
+			updateSliders();
+		}
+	}
+}


Added Xor operator

Added Xor operator

git-svn-id: 6aa7ccb0a2048310a30f08a72aaff4ca39d980ed@82 91848ab2-c4ae-4e4f-8e6a-6a52ea0dccc3

error: pathspec 'flare.query/flare/query/Xor.as' did not match any file(s) known to git

--- flare.query/flare/query/Xor.as
+++ flare.query/flare/query/Xor.as
@@ -0,0 +1,56 @@
+package flare.query
+{
+	/**
+	 * Expression operator that computes the exclusive or ("xor") of
+	 * sub-expression clauses.
+	 */
+	public class Xor extends CompositeExpression
+	{
+		/**
+		 * Creates a new Xor operator.
+		 * @param clauses the sub-expression clauses
+		 */
+		public function Xor(...clauses) {
+			super(clauses);
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		public override function clone():Expression
+		{
+			return cloneHelper(new Xor());
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		public override function eval(o:Object=null):Object
+		{
+			return predicate(o);
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		public override function predicate(o:Object):Boolean
+		{
+			if (_children.length == 0) return false;
+
+			var b:Boolean = _children[0].predicate(o);
+			for (var i:int=1; i<_children.length; ++i) {
+				b = (b != Expression(_children[i]).predicate(o));
+			}
+			return b;
+		}
+
+		/**
+		 * @inheritDoc
+		 */
+		public override function toString():String
+		{
+			return _children.length==0 ? "FALSE" : super.getString("XOR");
+		}
+
+	} // end of class Xor
+}


Partial implementation of FilterUtil.

Partial implementation of FilterUtil.

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

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

--- src/as/com/threerings/flash/FilterUtil.as
+++ src/as/com/threerings/flash/FilterUtil.as
@@ -0,0 +1,132 @@
+package com.threerings.flash {
+
+import flash.display.DisplayObject;
+
+import flash.filters.BevelFilter;
+import flash.filters.BitmapFilter;
+import flash.filters.BlurFilter;
+import flash.filters.ColorMatrixFilter;
+import flash.filters.ConvolutionFilter;
+import flash.filters.DisplacementMapFilter;
+import flash.filters.DropShadowFilter;
+import flash.filters.GlowFilter;
+import flash.filters.GradientBevelFilter;
+import flash.filters.GradientGlowFilter;
+
+import com.threerings.util.ClassUtil;
+
+/**
+ * Useful utility methods that wouldn't be needed if the flash API were not so retarded.
+ */
+public class FilterUtil
+{
+    /**
+     * Add the specified filter to the DisplayObject.
+     */
+    public static function addFilter (disp :DisplayObject, filter :BitmapFilter) :void
+    {
+        checkArgs(disp, filter);
+        var filts :Array = disp.filters;
+        if (filts == null) {
+            filts = [];
+        }
+        filts.push(filter);
+        disp.filters = filts;
+    }
+
+    /**
+     * Remove the specified filter from the DisplayObject.
+     * Note that the filter set in the DisplayObject is a clone, so the values
+     * of the specified filter are used to find a match.
+     */
+    public static function removeFilter (disp :DisplayObject, filter :BitmapFilter) :void
+    {
+        checkArgs(disp, filter);
+        var filts :Array = disp.filters;
+        if (filts != null) {
+            for (var ii :int = filts.length - 1; ii >= 0; ii--) {
+                var oldFilter :BitmapFilter = (filts[ii] as BitmapFilter);
+                if (equals(oldFilter, filter)) {
+                    filts.splice(ii, 1);
+                    if (filts.length == 0) {
+                        filts = null;
+                    }
+                    disp.filters = filts;
+                    return; // SUCCESS
+                }
+            }
+        }
+    }
+
+    /**
+     * Are the two filters equals?
+     */
+    public static function equals (f1 :BitmapFilter, f2 :BitmapFilter) :Boolean
+    {
+        if (f1 === f2) { // catch same instance, or both null
+            return true;
+
+        } else if (f1 == null || f2 == null) { // otherwise nulls are no good
+            return false;
+        }
+
+        var c1 :Class = ClassUtil.getClass(f1);
+        if (c1 !== ClassUtil.getClass(f2)) {
+            return false;
+        }
+
+        // when we have two filters of the same class, figure it out by hand...
+        switch (c1) {
+        case BevelFilter:
+            // TODO
+            return false;
+
+        case BlurFilter:
+            // TODO
+            return false;
+
+        case ColorMatrixFilter:
+            // TODO
+            return false;
+
+        case ConvolutionFilter:
+            // TODO
+            return false;
+
+        case DisplacementMapFilter:
+            // TODO
+            return false;
+
+        case DropShadowFilter:
+            // TODO
+            return false;
+
+        case GlowFilter:
+            var gf1 :GlowFilter = (f1 as GlowFilter);
+            var gf2 :GlowFilter = (f2 as GlowFilter);
+            return (gf1.alpha == gf2.alpha) && (gf1.blurX == gf2.blurX) &&
+                (gf1.blurY == gf2.blurY) && (gf1.color == gf2.color) && (gf1.inner == gf2.inner) &&
+                (gf1.knockout == gf2.knockout) && (gf1.quality == gf2.quality) &&
+                (gf1.strength == gf2.strength);
+
+        case GradientBevelFilter:
+            // TODO
+            return false;
+
+        case GradientGlowFilter:
+            // TODO
+            return false;
+
+        default:
+            throw new ArgumentError("OMG! Unknown filter type: " + c1);
+        }
+    }
+
+    protected static function checkArgs (disp :DisplayObject, filter :BitmapFilter) :void
+    {
+        if (disp == null || filter == null) {
+            throw new ArgumentError("args may not be null");
+        }
+    }
+}
+}


Adding as3 wrapper for c interface.

Adding as3 wrapper for c interface.

error: pathspec 'src/org/ilbc/codec/ILBCCodec.as' did not match any file(s) known to git

--- src/org/ilbc/codec/ILBCCodec.as
+++ src/org/ilbc/codec/ILBCCodec.as
@@ -0,0 +1,91 @@
+package org.ilbc.codec {
+
+	import cmodule.iLBC.CLibInit;
+	import flash.utils.getTimer;
+	import flash.utils.ByteArray;
+
+	/**
+	 * Wrapper class for the C iLBC codec.
+	 *
+	 * @see http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:AS3_API
+	 * @see http://labs.adobe.com/wiki/index.php/Alchemy:Documentation:Developing_with_Alchemy:C_API
+	 *
+	 * @see http://ccgi.codegadget.plus.com/blog/2010/04/03/alchemy-c-library-1/ (good Alchemy write up / 101)
+	 *
+	 * @author Wijnand Warren
+	 */
+	public class ILBCCodec {
+
+		public var encodedData:ByteArray;
+		public var decodedData:ByteArray;
+
+		private var ilbcCoder:Object;
+		private var initTime:uint;
+
+		/**
+		 * CONSTRUCTOR
+		 */
+		public function ILBCCodec() {
+			init();
+		}
+
+		/**
+		 * Initializes this class.
+		 */
+		private function init():void {
+		}
+
+		/**
+		 *
+		 */
+		private function start() : void {
+			initTime = getTimer();
+
+			//timer = new Timer(30);
+			//timer.addEventListener(TimerEvent.TIMER, update);
+
+			ilbcCoder = (new cmodule.iLBC.CLibInit).init();
+			//ilbcCoder.init(this, decodedData, encodedData);
+		}
+
+		// ------------------------
+		// PUBLIC METHODS
+		// ------------------------
+
+		/**
+		 * Encodes an (specs??) audio stream to iLBC.
+		 */
+		public function encode(data:ByteArray):ByteArray {
+			trace("ILBCCodec.encode(data):", data.length);
+
+			encodedData = new ByteArray();
+			decodedData = data;
+
+			start();
+
+			ilbcCoder.encode(this, decodedData, encodedData);
+			encodedData.position = 0;
+			trace(" - encodedData.length:", encodedData.length);
+			return encodedData;
+		}
+
+		/**
+		 * Decodes an iLBC encoded audio stream to (specs??).
+		 */
+		public function decode(data:ByteArray):ByteArray {
+			trace("ILBCCodec.decode(data):", data.length);
+
+			encodedData = data;
+			decodedData = new ByteArray();
+
+			start();
+
+			ilbcCoder.decode(this, encodedData, decodedData);
+			decodedData.position = 0;
+			trace(" - decodedData.length:", decodedData.length);
+			return decodedData;
+		}
+
+	}
+
+}


fixes #71

fixes #71

fatal: unable to access 'https://github.com/eric-stanley/robotlegs-framework.git/': The requested URL returned error: 403


Production settings defaults.

Production settings defaults.

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/pubnub/flash.git/'


+ 增加 ImageUtil

+ 增加 ImageUtil

error: pathspec 'ageb/src/ageb/utils/ImageUtil.as' did not match any file(s) known to git

--- ageb/src/ageb/utils/ImageUtil.as
+++ ageb/src/ageb/utils/ImageUtil.as
@@ -0,0 +1,68 @@
+package ageb.utils
+{
+	import flash.filesystem.File;
+	import flash.filesystem.FileMode;
+	import flash.filesystem.FileStream;
+	import flash.geom.Point;
+
+	/**
+	 * 图像小工具
+	 * @author zhanghaocong
+	 *
+	 */
+	public class ImageUtil
+	{
+		/**
+		 * constructor
+		 *
+		 */
+		public function ImageUtil()
+		{
+		}
+
+		/**
+		 * 假设 f 是 png 文件，这里可以返回 png 的大小
+		 * @param f
+		 * @return 一个 Point，x 代表宽，y 代表高度
+		 *
+		 */
+		public static function getImageSize(f:File):Point
+		{
+			var result:Point;
+			// 本次验证 PNG 大小，至少需要读取 24 字节
+			// ( 8 字节 PNG 头) + (4 字节 IHDR 长度) + (4 字节 CHUNK 类型) + (4 字节图片宽) + (4 字节图片高)
+			const VALID_SIZE:uint = 24;
+			// PNG 头
+			const PNG_HEADER:Vector.<uint> = new <uint>[ 0x89504E47, 0x0D0A1A0A ];
+			// IHDR 的 chunk 类型
+			const IHDR_TYPE:uint = 0x49484452;
+			var fs:FileStream = new FileStream();
+			fs.open(f, FileMode.READ);
+
+			if (fs.bytesAvailable >= VALID_SIZE)
+			{
+				// 验证 PNG 头
+				if (fs.readUnsignedInt() == PNG_HEADER[0])
+				{
+					// 验证 PNG 头
+					if (fs.readUnsignedInt() == PNG_HEADER[1])
+					{
+						// 跳过 IHDR 长度，我们不使用
+						fs.position += 4;
+
+						// 验证 IHDR_TYPE
+						if (fs.readUnsignedInt() == IHDR_TYPE)
+						{
+							result = new Point();
+							// 宽高
+							result.x = fs.readUnsignedInt();
+							result.y = fs.readUnsignedInt();
+						}
+					}
+				}
+			}
+			fs.close();
+			return result;
+		}
+	}
+}


Fixed broken log statement

Fixed broken log statement


Added object deserializator

Added object deserializator

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

--- src/Modi/ObjectDeserializator.as
+++ src/Modi/ObjectDeserializator.as
@@ -0,0 +1,19 @@
+/**
+ * Created with IntelliJ IDEA.
+ * User: Tomislav
+ * Date: 7.3.13.
+ * Time: 15:14
+ * To change this template use File | Settings | File Templates.
+ */
+package Modi
+{
+    public class ObjectDeserializator extends CommonDeserializator
+    {
+        override public function deserializeData(data:*):void
+        {
+            _data = data;
+            _stack.push( { data:_data, context:SERIALIZATOR_STATE_OBJECT } );
+            _ready = true;
+        }
+    }
+}


Name changed from ComponentWire to ComponentWireOld.  Will be depricated once replacement is made

error: pathspec 'activities/module-2/series-measuring/ComponentWireOld.as' did not match any file(s) known to git

--- activities/module-2/series-measuring/ComponentWireOld.as
+++ activities/module-2/series-measuring/ComponentWireOld.as
@@ -0,0 +1,100 @@
+package
+{
+	import flash.display.MovieClip;
+	import flash.display.Shape;
+	import flash.display.Graphics;
+	import flash.display.DisplayObject;
+	import flash.display.CapsStyle;
+	import flash.display.Sprite;
+
+
+	public class ComponentWireOld extends MovieClip{
+
+		private var _x1:Number;
+		private var _y1:Number;
+		private var _x2:Number;
+		private var _y2:Number;
+		private var _insulation_x1:Number;
+		private var _insulation_y1:Number;
+		private var _insulation_x2:Number;
+		private var _insulation_y2:Number;
+
+		private var _breadboard:MovieClip;
+		private var _leadLength:Number;
+		private var _leadColor1:uint;
+		private var _leadColor2:uint;
+		private var _insulationColor:uint;
+		private var _wire:Shape;
+		private var _insulation:Shape;
+
+		public function ComponentWireOld(breadboard:MovieClip) {
+			trace('ENTER ComponentWireOld');
+
+			super();
+			_wire = new Shape();
+			_insulation = new Shape();
+
+			_leadLength = 30; //5//length of exposed metal ends of wire in pixels
+			_leadColor1 = 0xA0A0A0; // the lead's outer color - the lead is two-toned
+			_leadColor2 = 0xE5E5E5; // the lead's inner color
+			_breadboard = breadboard;
+			_breadboard.getComponentLayer().addChild(this);
+			this.addChild(_wire);
+			this.addChild(_insulation);
+		}
+
+		public function dimension(x1:Number,y1:Number,x2:Number,y2:Number):void {
+			_insulationColor = uint('0x006600');//default color - green
+			if(x1<=x2) {
+				_x1 = x1;
+				_y1 = y1;
+				_x2 = x2;
+				_y2 = y2;
+			} else {
+				_x1 = x2;
+				_y1 = y2;
+				_x2 = x1;
+				_y2 = y1;
+			}
+
+			var angle:Number = Math.atan( (_y2-_y1) / (_x2-_x1) );  // angle of the line's slope in radians
+			var insulationOffset_x:Number = _leadLength * Math.cos(angle);
+			var insulationOffset_y:Number = _leadLength * Math.sin(angle);
+
+			_insulation_x1 = _x1 + insulationOffset_x;
+			_insulation_y1 = _y1 + insulationOffset_y;
+			_insulation_x2 = _x2 - insulationOffset_x;
+			_insulation_y2 = _y2 - insulationOffset_y;
+
+			drawLines();
+		}
+
+		public function setColor(insulationColor:String):void {
+			_insulationColor = uint(insulationColor);//set color
+			drawLines();
+		}
+
+		private function drawLines():void {
+			this.removeChild(_wire);
+			this.removeChild(_insulation);
+			_wire = new Shape();
+			_insulation = new Shape();
+			this.addChild(_wire);
+			this.addChild(_insulation);
+
+			_wire.graphics.lineStyle(8, _leadColor1, 1);
+			_wire.graphics.moveTo(_x1,_y1);
+			_wire.graphics.lineTo(_x2,_y2);
+			_wire.graphics.lineStyle(2, _leadColor2, 1);
+			_wire.graphics.moveTo(_x1,_y1);
+			_wire.graphics.lineTo(_x2,_y2);
+
+			_insulation.graphics.lineStyle(8, _insulationColor, 1.0,false, "normal", CapsStyle.NONE, null, 0); //CapsStyle.ROUND, and CapsStyle.SQUARE
+			_insulation.graphics.moveTo(_insulation_x1,_insulation_y1);
+			_insulation.graphics.lineTo(_insulation_x2,_insulation_y2);
+			//lineStyle(thickness:Number = NaN, color:uint = 0, alpha:Number = 1.0, pixelHinting:Boolean = false, scaleMode:String = "normal", caps:String = null, joints:String = null, miterLimit:Number = 3)
+
+		}
+
+}
+}


Looser type on adRef

Looser type on adRef

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/'


ViewInjectionMap WIP, minimum implementation taking shape

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/'


add a scrolling container view

add a scrolling container view

error: pathspec 'frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ScrollingContainerView.as' did not match any file(s) known to git

--- frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ScrollingContainerView.as
+++ frameworks/as/projects/FlexJSUI/src/org/apache/flex/html/beads/ScrollingContainerView.as
@@ -0,0 +1,315 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  Licensed to the Apache Software Foundation (ASF) under one or more
+//  contributor license agreements.  See the NOTICE file distributed with
+//  this work for additional information regarding copyright ownership.
+//  The ASF licenses this file to You under the Apache License, Version 2.0
+//  (the "License"); you may not use this file except in compliance with
+//  the License.  You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+//  Unless required by applicable law or agreed to in writing, software
+//  distributed under the License is distributed on an "AS IS" BASIS,
+//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+//  See the License for the specific language governing permissions and
+//  limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.flex.html.beads
+{
+	import flash.display.DisplayObject;
+	import flash.display.DisplayObjectContainer;
+
+	import org.apache.flex.core.BeadViewBase;
+	import org.apache.flex.core.IBead;
+	import org.apache.flex.core.IBeadView;
+	import org.apache.flex.core.ILayoutParent;
+	import org.apache.flex.core.IStrand;
+    import org.apache.flex.core.IParent;
+	import org.apache.flex.core.UIBase;
+	import org.apache.flex.core.ValuesManager;
+	import org.apache.flex.html.Container;
+	import org.apache.flex.html.supportClasses.Border;
+	import org.apache.flex.html.supportClasses.ContainerContentArea;
+	import org.apache.flex.html.supportClasses.ScrollBar;
+    import org.apache.flex.html.beads.models.ScrollBarModel;
+
+    /**
+     *  The ContainerView class is the default view for
+     *  the org.apache.flex.html.Container class.
+     *  It lets you use some CSS styles to manage the border, background
+     *  and padding around the content area.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+	public class ScrollingContainerView extends BeadViewBase implements IBeadView, ILayoutParent
+	{
+        /**
+         *  Constructor.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function ScrollingContainerView()
+		{
+		}
+
+        /**
+         *  The actual parent that parents the children.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		protected var actualParent:DisplayObjectContainer;
+
+        /**
+         *  @copy org.apache.flex.core.IBead#strand
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		override public function set strand(value:IStrand):void
+		{
+			super.strand = value;
+
+			var padding:Object = determinePadding();
+
+			if (contentAreaNeeded())
+			{
+				actualParent = new ContainerContentArea();
+				DisplayObjectContainer(value).addChild(actualParent);
+				Container(value).setActualParent(actualParent);
+				actualParent.x = padding.paddingLeft;
+				actualParent.y = padding.paddingTop;
+			}
+			else
+			{
+				actualParent = value as UIBase;
+			}
+
+			var backgroundColor:Object = ValuesManager.valuesImpl.getValue(value, "background-color");
+			var backgroundImage:Object = ValuesManager.valuesImpl.getValue(value, "background-image");
+			if (backgroundColor != null || backgroundImage != null)
+			{
+				if (value.getBeadByType(IBackgroundBead) == null)
+					value.addBead(new (ValuesManager.valuesImpl.getValue(value, "iBackgroundBead")) as IBead);
+			}
+
+			var borderStyle:String;
+			var borderStyles:Object = ValuesManager.valuesImpl.getValue(value, "border");
+			if (borderStyles is Array)
+			{
+				borderStyle = borderStyles[1];
+			}
+			if (borderStyle == null)
+			{
+				borderStyle = ValuesManager.valuesImpl.getValue(value, "border-style") as String;
+			}
+			if (borderStyle != null && borderStyle != "none")
+			{
+				if (value.getBeadByType(IBorderBead) == null)
+					value.addBead(new (ValuesManager.valuesImpl.getValue(value, "iBorderBead")) as IBead);
+			}
+		}
+
+		/**
+		 *  Determines the top and left padding values, if any, as set by
+		 *  padding style values. This includes "padding" for all padding values
+		 *  as well as "padding-left" and "padding-top".
+		 *
+		 *  Returns an object with paddingLeft and paddingTop properties.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		protected function determinePadding():Object
+		{
+			var paddingLeft:Object;
+			var paddingTop:Object;
+			var padding:Object = ValuesManager.valuesImpl.getValue(_strand, "padding");
+			if (padding is Array)
+			{
+				if (padding.length == 1)
+					paddingLeft = paddingTop = padding[0];
+				else if (padding.length <= 3)
+				{
+					paddingLeft = padding[1];
+					paddingTop = padding[0];
+				}
+				else if (padding.length == 4)
+				{
+					paddingLeft = padding[3];
+					paddingTop = padding[0];
+				}
+			}
+			else if (padding == null)
+			{
+				paddingLeft = ValuesManager.valuesImpl.getValue(_strand, "padding-left");
+				paddingTop = ValuesManager.valuesImpl.getValue(_strand, "padding-top");
+			}
+			else
+			{
+				paddingLeft = paddingTop = padding;
+			}
+			var pl:Number = Number(paddingLeft);
+			var pt:Number = Number(paddingTop);
+
+			return {paddingLeft:pl, paddingTop:pt};
+		}
+
+		/**
+		 *  Returns true if container to create a separate ContainerContentArea.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion FlexJS 0.0
+		 */
+		protected function contentAreaNeeded():Boolean
+		{
+			var padding:Object = determinePadding();
+
+			return (!isNaN(padding.paddingLeft) && padding.paddingLeft > 0 ||
+				    !isNaN(padding.paddingTop) && padding.paddingTop > 0);
+		}
+
+        /**
+         *  The parent of the children.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function get contentView():DisplayObjectContainer
+		{
+			return actualParent;
+		}
+
+        /**
+         *  The border.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function get border():Border
+		{
+			return null;
+		}
+
+        /**
+         *  The host component, which can resize to different slots.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function get resizableView():DisplayObject
+		{
+			return _strand as DisplayObject;
+		}
+
+        private var _vScrollBar:ScrollBar;
+
+        /**
+         *  The vertical ScrollBar, if it exists.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function get vScrollBar():ScrollBar
+		{
+            if (!_vScrollBar)
+                _vScrollBar = createScrollBar();
+            return _vScrollBar;
+		}
+
+        /**
+         *  The horizontal ScrollBar, if it exists.
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+		public function get hScrollBar():ScrollBar
+		{
+			return null;
+		}
+
+        /**
+         * @private
+         */
+        private function createScrollBar():ScrollBar
+        {
+            var vsb:ScrollBar;
+            vsb = new ScrollBar();
+            var vsbm:ScrollBarModel = new ScrollBarModel();
+            vsbm.maximum = 100;
+            vsbm.minimum = 0;
+            vsbm.pageSize = 10;
+            vsbm.pageStepSize = 10;
+            vsbm.snapInterval = 1;
+            vsbm.stepSize = 1;
+            vsbm.value = 0;
+            vsb.model = vsbm;
+            vsb.width = 16;
+            IParent(_strand).addElement(vsb);
+            return vsb;
+        }
+
+        /**
+         *  The position of the vertical scrollbar
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get verticalScrollPosition():Number
+        {
+            return ScrollBarModel(vScrollBar.model).value;
+        }
+
+        /**
+         *  @private
+         */
+        public function set verticalScrollPosition(value:Number):void
+        {
+            ScrollBarModel(vScrollBar.model).value = value;
+        }
+
+        /**
+         *  The maximum position of the vertical scrollbar
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function get maxVerticalScrollPosition():Number
+        {
+            return ScrollBarModel(vScrollBar.model).maximum -
+                ScrollBarModel(vScrollBar.model).pageSize;
+        }
+
+
+    }
+}


Adding an actionscript helper class

Adding an actionscript helper class

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

--- helpers/Croppa.as
+++ helpers/Croppa.as
@@ -0,0 +1,34 @@
+package com.bkwld {
+
+	/**
+	 * An ActionScript port of https://raw.github.com/BKWLD/croppa/master/public/js/croppa.js
+	 */
+	public class Croppa {
+
+		/**
+		 * Build a croppa formatted URL
+		 * @param  src     Absolute path to the source image
+		 * @param  width   Width to crop to.  Set to -1, 0, or NaN to make it wildcarded
+		 * @param  height  Width to crop to.  Set to -1, 0, or NaN to make it wildcarded
+		 * @param  options Addtional Croppa options, passed as key/value pairs.  Like ['resize']
+		 * @return A Croppa-friendly URL
+		 */
+		static public function url(src:String, width:Number = NaN, height:Object = NaN, options:Object = null):String {
+
+			// Produce the croppa syntax
+			var suffix:String = '-';
+			if (width > 0 && (!height || height <= 0)) suffix += String(width)+'x_';
+			else if ((!width || width <= 0) && height > 0) suffix += '_x'+String(height);
+			else if (width > 0 && height > 0) suffix += String(width)+'x'+String(height);
+			else suffix += '_x_';
+
+			// Disable options for now
+			if (options) throw new Error('Croppa.url options not supported yet');
+
+			// Break the path apart and put back together again
+			return src.replace(/^(.+)(\.[a-z]+)$/i, "$1"+suffix+"$2");
+
+		}
+
+	}
+}


First pass at new core class: Application

error: pathspec 'src/org/openPyro/core/Application.as' did not match any file(s) known to git

--- src/org/openPyro/core/Application.as
+++ src/org/openPyro/core/Application.as
@@ -0,0 +1,74 @@
+package org.openPyro.core
+{
+	import flash.events.Event;
+
+	/**
+	 * Application is the top level Sprite that constitutes the main
+	 * canvas of the OpenPyro application.
+	 *
+	 * [Todo] The Application sprite is responsible for preloaders,
+	 * for the application, setup logging and any kind of manager.
+	 */
+	public class Application extends UIContainer
+	{
+
+		protected var _applicationWidth:uint = 0;
+		protected var _applicationHeight:uint = 0;
+
+		public function Application(applicationWidth:uint = 0, applicationHeight:uint=0)
+		{
+			_applicationWidth = applicationWidth;
+			_applicationHeight = applicationHeight;
+
+			if(!this.stage){
+				this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
+			}
+			else{
+				onAddedToStage();
+			}
+		}
+
+		protected function onAddedToStage(event:Event=null):void{
+			stage.scaleMode = "noScale";
+			stage.align = "TL";
+			this.removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
+			if(stage.stageWidth == 0 || stage.stageHeight == 0){
+				this.stage.addEventListener(Event.ENTER_FRAME, onEnterFrame);
+			}
+			else{
+				appInit();
+			}
+		}
+
+		private function onEnterFrame(event:Event):void{
+			if(stage.stageWidth == 0 || stage.stageHeight == 0) return;
+			this.stage.removeEventListener(Event.ENTER_FRAME, onEnterFrame);
+			appInit();
+		}
+
+		/**
+		 * This function is called once the application has ensured it has
+		 * a reference to the stage variable that is not 0. If no
+		 * applicationWidth, applicationHeight is set for the Application,
+		 * the application goes to its default behavior of being as big as the
+		 * stage and resizing when the stage resizes.
+		 */
+		protected function appInit():void{
+			if(_applicationWidth == 0 || _applicationHeight == 0){
+				_applicationWidth = stage.stageWidth;
+				_applicationHeight = stage.stageHeight;
+				stage.addEventListener(Event.RESIZE, onStageResize);
+			}
+			this.width = _applicationWidth;
+			this.height = _applicationHeight;
+		}
+
+		private function onStageResize(event:Event):void{
+			_applicationWidth = stage.stageWidth;
+			_applicationHeight = stage.stageHeight;
+			this.width = _applicationWidth;
+			this.height = _applicationHeight;
+		}
+
+	}
+}


Add debug.as to skin-src.

Add debug.as to skin-src.

error: pathspec 'skin-src/goplayer/debug.as' did not match any file(s) known to git

--- skin-src/goplayer/debug.as
+++ skin-src/goplayer/debug.as
@@ -0,0 +1,5 @@
+package goplayer
+{
+	public function debug(message : Object)
+  { callJavascript("goplayer.log", message.toString()) }
+}


improving docs

improving docs

fatal: unable to access 'https://github.com/rafaelcordoba/cocktail-demo.git/': The requested URL returned error: 403


adding re-writed version of Index class

adding re-writed version of Index 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/rafaelcordoba/cocktail-demo.git/'


Added RecorderEvents

Added RecorderEvents

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

--- src/flash/RecorderEvent.as
+++ src/flash/RecorderEvent.as
@@ -0,0 +1,29 @@
+package {
+
+	import flash.events.Event;
+
+	public class RecorderEvent extends Event {
+		public static const STATUS:String = 'status';
+		public static const RECORDING:String = 'recording';
+		public static const COMPLETE:String = 'complete';
+		public static const ENABLED:String = 'enabled';
+		public static const DISABLED:String = 'disabled';
+
+		public var _params:*;
+
+		public function RecorderEvent($type:String, $params=null, $bubbles:Boolean=false, $cancelable:Boolean=false) {
+			super($type, $bubbles, $cancelable);
+			this._params = $params;
+		}
+
+		public override function clone():Event {
+			return new RecorderEvent(type, this._params, bubbles, cancelable);
+		}
+
+		public override function toString():String {
+			return formatToString('RecorderEvent', '_params', 'type', 'bubbles', 'cancelable');
+		}
+
+	}
+
+}


pause sound on reset

pause sound on reset

--- src/as/com/ryanberdeen/remix/Player.as
+++ src/as/com/ryanberdeen/remix/Player.as
@@ -38,19 +38,18 @@

         public function reset():void {
             if (remixPlayer != null) {
-                remixPlayer.stop();
+                if (playing) {
+                    pause();
+                }

                 remixPlayer = null;
             }
-            playing = false;
-            positionUpdateTimer.stop();
             setState('empty');
         }

         private function soundCompleteHandler(e:Event):void {
-            positionUpdateTimer.stop();
+            pause();
             setState('complete');
-            setState('paused');
         }

         public function togglePlayPause():void {


What song to play...

What song to play...

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/c0d3m0nk3y/Konata.git/'


add InitObject class

add InitObject 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/MerlinDS/utils.git/'


Re-applies changes to the SwiftSuspendersInjector-adapter that got lost in a rebase somehow


Starting CubicBezier based off QuadBezier

error: pathspec 'raw/src/org/yellcorp/lib/geom/curves/CubicBezier.as' did not match any file(s) known to git

--- raw/src/org/yellcorp/lib/geom/curves/CubicBezier.as
+++ raw/src/org/yellcorp/lib/geom/curves/CubicBezier.as
@@ -0,0 +1,249 @@
+package org.yellcorp.lib.geom.curves
+{
+import flash.display.Graphics;
+import flash.geom.Point;
+import flash.geom.Rectangle;
+
+
+public class CubicBezier
+{
+    public var p0:Point;
+    public var p1:Point;
+    public var p2:Point;
+    public var p3:Point;
+
+    public static function createFromPoints(point0:Point, point1:Point, point2:Point, point3:Point):CubicBezier
+    {
+        var b:CubicBezier = new CubicBezier();
+        b.p0 = point0;  b.p1 = point1;  b.p2 = point2;  b.p3 = point3;
+        return b;
+    }
+
+    public static function create():CubicBezier
+    {
+        return createFromPoints(new Point(), new Point(), new Point(), new Point());
+    }
+
+    public static function createFromCoords(x0:Number, y0:Number,
+                                            x1:Number, y1:Number,
+                                            x2:Number, y2:Number,
+                                            x3:Number, y3:Number):CubicBezier
+    {
+        return createFromPoints(new Point(x0, y0),
+                                new Point(x1, y1),
+                                new Point(x2, y2),
+                                new Point(x3, y3));
+    }
+
+    public static function createFromPointArray(array:*):CubicBezier
+    {
+        var b:CubicBezier = create();
+        b.setPointArray(array);
+        return b;
+    }
+
+    public static function createFromCoordArray(array:*):CubicBezier
+    {
+        var b:CubicBezier = create();
+        b.setCoordArray(array);
+        return b;
+    }
+
+    public function toString():String
+    {
+        return "[CubicBezier (" + p0.x + ", " + p0.y +
+                        "), (" + p1.x + ", " + p1.y +
+                        "), (" + p2.x + ", " + p2.y +
+                        "), (" + p3.x + ", " + p3.y +
+                        ")]";
+    }
+
+    public function clone():CubicBezier
+    {
+        return createFromPoints(p0.clone(), p1.clone(), p2.clone(), p3.clone());
+    }
+
+    public function setPoints(point0:Point, point1:Point, point2:Point, point3:Point):void
+    {
+        p0 = point0;  p1 = point1;  p2 = point2;  p3 = point3;
+    }
+
+    public function setCoords(x0:Number, y0:Number,
+                              x1:Number, y1:Number,
+                              x2:Number, y2:Number,
+                              x3:Number, y3:Number):void
+    {
+        p0.x = x0;  p0.y = y0;  p1.x = x1;  p1.y = y1;
+        p2.x = x2;  p2.y = y2;  p3.x = x3;  p3.y = y3;
+    }
+
+    public function setPointArray(array:*):void
+    {
+        if (array.length != 4)
+            throw new ArgumentError("Array must be of length 4");
+
+        setCoords(array[0].x, array[0].y,
+                  array[1].x, array[1].y,
+                  array[2].x, array[2].y,
+                  array[3].x, array[3].y);
+    }
+
+    public function setCoordArray(array:*):void
+    {
+        if (array.length != 8)
+            throw new ArgumentError("Array must be of length 8");
+
+        setCoords(array[0], array[1],
+                  array[2], array[3],
+                  array[4], array[5],
+                  array[6], array[7]);
+    }
+
+    public function sample(t:Number, out:Point):Point
+    {
+        var u:Number = 1 - t;
+        var uu:Number = u * u;
+        var tt:Number = t * t;
+
+        out.x = uu * (u * p0.x + 3 * t * p1.x) +
+                tt * (3 * u * p2.x + t * p3.x);
+
+        out.y = uu * (u * p0.y + 3 * t * p1.y) +
+                tt * (3 * u * p2.y + t * p3.y);
+
+        return out;
+    }
+
+    public function sampleX(t:Number):Number
+    {
+        var u:Number = 1 - t;
+        return u * u * (u * p0.x + 3 * t * p1.x) +
+               t * t * (3 * u * p2.x + t * p3.x);
+    }
+
+    public function sampleY(t:Number):Number
+    {
+        var u:Number = 1 - t;
+        return u * u * (u * p0.y + 3 * t * p1.y) +
+               t * t * (3 * u * p2.y + t * p3.y);
+    }
+
+    public function tangent(t:Number, out:Point):Point
+    {
+        out.x = 3 * (-p0.x + p1.x +
+                     t * (2 * p0.x - 4 * p1.x + 2 * p2.x +
+                          t * (-p0.x + 3 * p1.x -3 * p2.x + p3.x)));
+
+        out.y = 3 * (-p0.y + p1.y +
+                     t * (2 * p0.y - 4 * p1.y + 2 * p2.y +
+                          t * (-p0.y + 3 * p1.y -3 * p2.y + p3.y)));
+
+        return out;
+    }
+
+/*
+    public function split(t:Number, outLow:CubicBezier, outHigh:CubicBezier):void
+    {
+        splitLow(t, outLow);
+        splitHigh(t, outHigh);
+    }
+
+    public function splitLow(t:Number, out:CubicBezier):CubicBezier
+    {
+        out.p0.x = p0.x;
+        out.p0.y = p0.y;
+        out.p1.x = p0.x + (p1.x - p0.x) * t;
+        out.p1.y = p0.y + (p1.y - p0.y) * t;
+        sample(t, out.p2);
+        return out;
+    }
+
+    public function splitHigh(t:Number, out:CubicBezier):CubicBezier
+    {
+        sample(t, out.p0);
+        out.p1.x = p1.x + (p2.x - p1.x) * t;
+        out.p1.y = p1.y + (p2.y - p1.y) * t;
+        out.p2.x = p2.x;
+        out.p2.y = p2.y;
+        return out;
+    }
+     */
+
+    private static function appendFirstDerivRoots(a:Number, b:Number, c:Number, d:Number, out:Array):void
+    {
+        var divisor:Number = -a + 3 * b - 3 * c + d;
+        var radicand:Number;
+        var root:Number;
+
+        if (divisor != 0)
+        {
+            radicand = a * (d - c) + b * (b - c - d) + c * c;
+            if (radicand >= 0)
+            {
+                root = (Math.sqrt(radicand) - a + 2 * b - c) / (-a + 3 * (b - c) + d);
+                out.push(root);
+                if (root != 0) out.push(-root);
+            }
+        }
+        else
+        {
+            divisor = a - 2 * b + c;
+            if (divisor != 0)
+            {
+                out.push((a - b) / (2 * divisor));
+            }
+        }
+    }
+
+    public function boundingBox(out:Rectangle):Rectangle
+    {
+        var xs:Array = [ p0.x, p3.x ];
+        var ys:Array = [ p0.y, p3.y ];
+
+        var xtExtrema:Array = [ ];
+        var ytExtrema:Array = [ ];
+
+        var t:Number;
+
+        appendFirstDerivRoots(p0.x, p1.x, p2.x, p3.x, xtExtrema);
+        appendFirstDerivRoots(p0.y, p1.y, p2.y, p3.y, ytExtrema);
+
+        for each (t in xtExtrema)
+        {
+            if (t > 0 && t < 1)  xs.push(sampleX(t));
+        }
+
+        for each (t in ytExtrema)
+        {
+            if (t > 0 && t < 1)  ys.push(sampleY(t));
+        }
+
+        var minX:Number = Math.min.apply(null, xs);
+        var maxX:Number = Math.max.apply(null, xs);
+        var minY:Number = Math.min.apply(null, ys);
+        var maxY:Number = Math.max.apply(null, ys);
+
+        out.x = minX;
+        out.y = minY;
+        out.width = maxX - minX;
+        out.height = maxY - minY;
+
+        return out;
+    }
+
+/*
+    public function draw(target:Graphics):void
+    {
+        target.moveTo(p0.x, p0.y);
+        target.curveTo(p1.x, p1.y, p2.x, p2.y);
+    }
+
+    public function drawHull(target:Graphics):void
+    {
+        target.moveTo(p0.x, p0.y);
+        target.lineTo(p1.x, p1.y);
+        target.lineTo(p2.x, p2.y);
+    }
+     */
+}
+}


cleaning up

cleaning up


Optimization of delayed mediator removal used to prevent accidental removal on reparenting


added CustomGrid

added CustomGrid

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

--- WeaveUI/src/weave/ui/CustomGrid.as
+++ WeaveUI/src/weave/ui/CustomGrid.as
@@ -0,0 +1,138 @@
+/*
+	Weave (Web-based Analysis and Visualization Environment)
+	Copyright (C) 2008-2011 University of Massachusetts Lowell
+
+	This file is a part of Weave.
+
+	Weave is free software: you can redistribute it and/or modify
+	it under the terms of the GNU General Public License, Version 3,
+	as published by the Free Software Foundation.
+
+	Weave 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 General Public License for more details.
+
+	You should have received a copy of the GNU General Public License
+	along with Weave.  If not, see <http://www.gnu.org/licenses/>.
+*/
+package weave.ui
+{
+	import flash.display.DisplayObject;
+	import flash.display.DisplayObjectContainer;
+
+	import mx.containers.Grid;
+	import mx.containers.GridItem;
+	import mx.containers.GridRow;
+
+	import weave.core.UIUtils;
+
+	[DefaultProperty("dataProvider")]
+
+	/**
+	 * Adds properties: dataProvider, generator, visitor
+	 */
+	public class CustomGrid extends Grid
+	{
+		private var _dataProviderChanged:Boolean = false;
+		private var _dataProvider:Array = [];
+		private var _generator:Function;
+		private var _visitor:Function;
+
+		/**
+		 * Setting this will generate a table of GridRow and GridItem objects.
+		 * The horizontalAlign and verticalAlign styles of this Grid will be copied to each GridItem.
+		 * @param table A two-dimensional Array of items to generate a Grid from.
+		 */
+		public function set dataProvider(table:Array):void
+		{
+			_dataProvider = table || [];
+			_dataProviderChanged = true;
+			invalidateProperties();
+		}
+
+		/**
+		 * @param generator A function that generates a DisplayObject from an item in the dataProvider.
+		 */
+		public function set generator(func:Function):void
+		{
+			_generator = func;
+			_dataProviderChanged = true;
+			invalidateProperties();
+		}
+
+		/**
+		 * @param generator A function that will be passed each GridItem object that is generated.
+		 */
+		public function set visitor(func:Function):void
+		{
+			_visitor = func;
+			_dataProviderChanged = true;
+			invalidateProperties();
+		}
+
+		override public function validateProperties():void
+		{
+			if (_dataProviderChanged)
+			{
+				_dataProviderChanged = false;
+				populateGrid(this, _dataProvider, _generator, _visitor);
+			}
+			super.validateProperties();
+		}
+
+		/**
+		 * Populates a Grid with a set of items.  It also copies the horizontalAlign and verticalAlign styles from the Grid to each GridItem.
+		 * @param grid A Grid container.
+		 * @param items A two-dimensional Array of items
+		 * @param generator A function that accepts an item and returns a DisplayObject.
+		 * @param visitor A function that accepts a GridItem object.
+		 */
+		public static function populateGrid(grid:Grid, dataProvider:Array, generator:Function = null, visitor:Function = null):void
+		{
+			var gridRows:Array = initChildren(grid, dataProvider.length, GridRow);
+			for (var r:int = 0; r < gridRows.length; r++)
+			{
+				var dataRow:Array = dataProvider[r] as Array || [];
+				var gridRow:GridRow = gridRows[r] as GridRow;
+				var gridItems:Array = initChildren(gridRow, dataRow.length, GridItem);
+				grid.addChild(gridRow);
+				for (var c:int = 0; c < gridItems.length; c++)
+				{
+					var gridItem:GridItem = gridItems[c] as GridItem;
+					initChildren(gridItem, 0, null);
+					gridRow.addChild(gridItem);
+					var dataItem:Object = dataRow[c];
+					var displayObject:DisplayObject = generator is Function
+						? generator(dataItem) as DisplayObject
+						: dataItem as DisplayObject;
+					if (displayObject)
+						gridItem.addChild(displayObject);
+
+					for each (var style:String in ['horizontalAlign', 'verticalAlign'])
+						gridItem.setStyle(style, grid.getStyle(style));
+
+					if (visitor is Function)
+						visitor(gridItem);
+				}
+			}
+		}
+
+		private static function initChildren(container:DisplayObjectContainer, desiredNumber:int, type:Class):Array
+		{
+			// remove extra children
+			while (container.numChildren > desiredNumber)
+				container.removeChildAt(container.numChildren - 1);
+
+			var result:Array = [];
+			for (var i:int = 0; i < desiredNumber; i++)
+			{
+				if (i < container.numChildren) // existing child
+					result.push(container.getChildAt(i));
+				else // new child
+					result.push(container.addChild(new type()));
+			}
+			return result;
+		}
+	}
+}


cleaned up some commented out sections and traces I accidently left


initial commit; see docs inside the class

error: pathspec 'fp9/src/as3isolib/display/scene/IsoGridSprite.as' did not match any file(s) known to git

--- fp9/src/as3isolib/display/scene/IsoGridSprite.as
+++ fp9/src/as3isolib/display/scene/IsoGridSprite.as
@@ -0,0 +1,157 @@
+package as3isolib.display.scene
+{
+	import as3isolib.data.INode;
+	import as3isolib.display.IsoSprite;
+	import as3isolib.geom.Pt;
+	import as3isolib.geom.IsoMath;
+	import as3isolib.graphics.Stroke;
+	import as3isolib.graphics.IStroke;
+	import flash.display.Graphics;
+	import flash.display.Sprite;
+
+	/**
+	 *
Replacement for IsoGrid that actually has spatial presence.  Much of the code was lifted straight from IsoGrid.

+	 *
+	 *
The grid size is not in cell units, but in iso coordinates taken directly from its width and length.  Grid lines are drawn every cellSize units across the grid.

+	 *
+	 *
There is no option to display the origin, since this grid can be placed anywhere in isometric space, just like any other object.

+	 *
+	 * @author David Holz (permission granted to as3isolib project to MIT license this file)
+	 */
+	public class IsoGridSprite extends IsoSprite
+	{
+		/**
+		 * Local sprite for drawing the grid
+		 */
+		private var gfx:Sprite = new Sprite();
+
+		public function IsoGridSprite()
+		{
+			sprites = [gfx];
+			gridlines = new Stroke(0, 0xCCCCCC, 0.5);
+			cellSize = 25;
+			setGridSize(5, 5);
+			return;
+		}
+
+		////////////////////////////////////////////////////
+		//	GRID SIZE
+		////////////////////////////////////////////////////
+
+		/**
+		 * Sets the number of grid cells in each direction respectively.  This is a
+		 * shortcut for setting the width & length using the current cell size, and will
+		 * not reflect a change in size if the cell size is modified afterwards.
+		 *
+		 * @param width The number of cells along the x-axis.
+		 * @param length The number of cells along the y-axis.
+		 * @param height The number of cells along the z-axis (currently not implemented).
+		 */
+		public function setGridSize (width:uint, length:uint, height:uint = 0):void
+		{
+			this.width = width * cSize;
+			this.length = length * cSize;
+			this.height = height * cSize;
+		}
+
+		////////////////////////////////////////////////////
+		//	CELL SIZE
+		////////////////////////////////////////////////////
+
+		private var cSize:Number;
+
+		/**
+		 * @private
+		 */
+		public function get cellSize ():Number
+		{
+			return cSize;
+		}
+
+		/**
+		 * Represents the size of each grid cell.  This value sets both the width, length and height (where applicable) to the same size.
+		 */
+		public function set cellSize (value:Number):void
+		{
+			if (value < 2)
+				throw new Error("cellSize must be a positive value greater than 2");
+
+			if (cSize != value)
+			{
+				cSize = value;
+				invalidateSize();
+			}
+		}
+
+
+		////////////////////////////////////////////////////
+		//	GRID STYLES
+		////////////////////////////////////////////////////
+
+		private var stroke:IStroke = new Stroke(0, 0x000000);
+
+		public function get gridlines ():IStroke
+		{
+			return stroke;
+		}
+
+		public function set gridlines (value:IStroke):void
+		{
+			stroke = value;
+		}
+
+
+		////////////////////////////////////////////////////
+		//	RENDERING
+		////////////////////////////////////////////////////
+
+		/**
+		 * Redraw the grid any time the size changes.
+		 */
+		override public function invalidateSize():void
+		{
+			super.invalidateSize();
+			redraw();
+		}
+
+		private function redraw():void
+		{
+			var g:Graphics = gfx.graphics;
+			g.clear();
+
+			stroke.apply(g);
+
+			var pt:Pt = new Pt();
+			var draw:Function = function(fun:Function, x:Number, y:Number)
+			{
+				pt = IsoMath.isoToScreen(new Pt(x, y, 0));
+				fun.apply(null, [pt.x, pt.y]);
+			};
+
+
+			// Draw the y hatches
+			for (var x:Number = cSize; x < width; x += cSize)
+			{
+				draw(g.moveTo, x, 0);
+				draw(g.lineTo, x, length);
+			}
+
+			// Draw the x hatches
+			for (var y:Number = cSize; y < length; y += cSize)
+			{
+				draw(g.moveTo, 0, y);
+				draw(g.lineTo, width, y);
+			}
+
+			// Draw the border and the invisible fill to receive mouse events
+			g.beginFill(0xFF0000, 0.0);
+			draw(g.moveTo, 0, 0);
+			draw(g.lineTo, width, 0);
+			draw(g.lineTo, width, length);
+			draw(g.lineTo, 0, length);
+			draw(g.lineTo, 0, 0);
+			g.endFill();
+		}
+	}
+
+}