beginnings of major overhaul to use org.apache.flex.events.MouseEvent instead 
of flash.events.MouseEvent.  The 'killer' needed to be moved to the capture 
phase on the stage.  Some changes related to layout optimizations such as 
supressing some change events is included in this commit


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/c3385db8
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/c3385db8
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/c3385db8

Branch: refs/heads/develop
Commit: c3385db8b1028fd6a1232aa0c576b7fb4f47840c
Parents: 69185ec
Author: Alex Harui <[email protected]>
Authored: Fri Oct 24 11:54:10 2014 -0700
Committer: Alex Harui <[email protected]>
Committed: Fri Oct 24 13:05:08 2014 -0700

----------------------------------------------------------------------
 .../src/org/apache/flex/core/Application.as     |  34 +++-
 .../src/org/apache/flex/core/ILayoutChild.as    |  64 ++++++-
 .../FlexJSUI/src/org/apache/flex/core/UIBase.as | 191 +++++++++++++------
 .../src/org/apache/flex/core/UIButtonBase.as    |  47 ++++-
 4 files changed, 257 insertions(+), 79 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c3385db8/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/Application.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/Application.as 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/Application.as
index 359d665..99418c0 100644
--- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/Application.as
+++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/Application.as
@@ -23,12 +23,15 @@ package org.apache.flex.core
     import flash.display.StageAlign;
     import flash.display.StageQuality;
     import flash.display.StageScaleMode;
+    import flash.events.Event;
     import flash.events.IOErrorEvent;
+    import flash.events.MouseEvent;
     import flash.system.ApplicationDomain;
     import flash.utils.getQualifiedClassName;
     
     import org.apache.flex.events.Event;
     import org.apache.flex.events.IEventDispatcher;
+    import org.apache.flex.events.MouseEvent;
     import org.apache.flex.utils.MXMLDataInterpreter;
     
     //--------------------------------------
@@ -102,11 +105,36 @@ package org.apache.flex.core
                                stage.scaleMode = StageScaleMode.NO_SCALE;
                 // should be opt-in
                                //stage.quality = 
StageQuality.HIGH_16X16_LINEAR;
+                
+                stage.addEventListener(flash.events.MouseEvent.CLICK, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.MOUSE_DOWN, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.MOUSE_UP, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.ROLL_OVER, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.ROLL_OUT, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.MOUSE_OVER, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.MOUSE_OUT, 
mouseEventKiller, true, 9999);
+                stage.addEventListener(flash.events.MouseEvent.MOUSE_MOVE, 
mouseEventKiller, true, 9999);
                        }
                        
             loaderInfo.addEventListener(flash.events.Event.INIT, initHandler);
         }
 
+        private function mouseEventKiller(event:flash.events.Event):void
+        {
+            if (event is flash.events.MouseEvent && (!(event is 
org.apache.flex.events.MouseEvent)))
+            {
+                var newEvent:org.apache.flex.events.MouseEvent = 
+                    
org.apache.flex.events.MouseEvent.convert(flash.events.MouseEvent(event));
+                if (newEvent) 
+                {
+                    // some events are not converted if there are no JS 
equivalents
+                    event.stopImmediatePropagation();
+                    event.target.dispatchEvent(newEvent);
+                }
+                else
+                    trace("did not convert", event.type);
+            }
+        }
         
         /**
          *  The document property is used to provide
@@ -129,15 +157,15 @@ package org.apache.flex.core
 
             MXMLDataInterpreter.generateMXMLInstances(this, null, 
MXMLDescriptor);
             
-            dispatchEvent(new Event("initialize"));
+            dispatchEvent(new org.apache.flex.events.Event("initialize"));
 
             if (initialView)
             {
                 initialView.applicationModel =  model;
                    this.addElement(initialView);
-                dispatchEvent(new Event("viewChanged"));
+                dispatchEvent(new org.apache.flex.events.Event("viewChanged"));
             }
-            dispatchEvent(new Event("applicationComplete"));
+            dispatchEvent(new 
org.apache.flex.events.Event("applicationComplete"));
         }
 
         /**

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c3385db8/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ILayoutChild.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ILayoutChild.as 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ILayoutChild.as
index b2bf2cb..4ec5b59 100755
--- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ILayoutChild.as
+++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/ILayoutChild.as
@@ -56,26 +56,54 @@ package org.apache.flex.core
         function set percentHeight(value:Number):void;
         
         /**
+         *  The width of this component 
+         *  if set by the width property
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        function get explicitWidth():Number;
+        
+        /**
+         *  The height of this component 
+         *  if set by the height property
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        function get explicitHeight():Number;
+        
+        /**
          * Sets the height of the component without
          * setting explicitHeight.
-         *  
+         * 
+         *  @param value The new height.
+         *  @param noEvent True if no change event should be sent.
+         * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        function setHeight(value:Number):void;
+        function setHeight(value:Number, noEvent:Boolean = false):void;
         
         /**
          * Sets the width of the component without
          * setting explicitWidth.
          *  
+         *  @param value The new width.
+         *  @param noEvent True if no change event should be sent.
+         * 
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        function setWidth(value:Number):void;
+        function setWidth(value:Number, noEvent:Boolean = false):void;
         
         /**
          * Sets the width and height of the component 
@@ -83,12 +111,38 @@ package org.apache.flex.core
          * It also sends one change event.  If both
          * values change it only sends heightCHange event.
          *  
+         *  @param newWidth The new width.
+         *  @param newHeight The new height.
+         *  @param noEvent True if no change event should be sent.
+         * 
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        function setWidthAndHeight(newWidth:Number, newHeight:Number, 
noEvent:Boolean = false):void;
+        
+        /**
+         * True if no percentWidth or explicitWidth has been
+         * assigned
+         *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        function setWidthAndHeight(newWidth:Number, newHeight:Number):void;
+        function isWidthSizedToContent():Boolean;
         
-       }
+        /**
+         * True if no percentHeight or explicitHeight has been
+         * assigned
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        function isHeightSizedToContent():Boolean;
+
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c3385db8/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIBase.as
----------------------------------------------------------------------
diff --git a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIBase.as 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIBase.as
index 10a0cc7..3f18fe2 100644
--- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIBase.as
+++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIBase.as
@@ -37,9 +37,93 @@ package org.apache.flex.core
         *  @playerversion AIR 2.6
         *  @productversion FlexJS 0.0
         */
-       [Event(name="click", type="org.apache.flex.events.Event")]
+       [Event(name="click", type="org.apache.flex.events.MouseEvent")]
        
     /**
+     *  Set a different class for rollOver events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="rollOver", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for rollOut events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="rollOut", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for mouseDown events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="mouseDown", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for mouseUp events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="mouseUp", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for mouseMove events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="mouseMove", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for mouseOut events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="mouseOut", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
+     *  Set a different class for mouseOver events so that
+     *  there aren't dependencies on the flash classes
+     *  on the JS side.
+     *  
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion FlexJS 0.0
+     */
+    [Event(name="mouseOver", type="org.apache.flex.events.MouseEvent")]
+    
+    /**
      *  The UIBase class is the base class for most composite user interface
      *  components.  For the Flash Player, Buttons and Text controls may
      *  have a different base class and therefore may not extend UIBase.
@@ -62,58 +146,9 @@ package org.apache.flex.core
          */
                public function UIBase()
                {
-                       super();
-                       
-                       addEventListener(flash.events.MouseEvent.CLICK, 
clickKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.MOUSE_DOWN, 
mouseEventKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.MOUSE_UP, 
mouseEventKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.ROLL_OVER, 
mouseEventKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.ROLL_OUT, 
mouseEventKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.MOUSE_OVER, 
mouseEventKiller, false, 9999);
-                       addEventListener(flash.events.MouseEvent.MOUSE_OUT, 
mouseEventKiller, false, 9999);
-               }
-               
-               private function clickKiller(event:flash.events.Event):void
-               {
-                       if (event is flash.events.MouseEvent)
-                       {
-                               event.stopImmediatePropagation();
-                               dispatchEvent(new 
org.apache.flex.events.Event("click"));
-                       }
-               }
-               
-               private function 
mouseEventKiller(event:flash.events.MouseEvent):void
-               {
-                       if ((event is flash.events.MouseEvent) && ! (event is 
org.apache.flex.events.MouseEvent))
-                       {
-                               event.stopImmediatePropagation();
-                               if(event.type == 
flash.events.MouseEvent.MOUSE_DOWN)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.MOUSE_DOWN,true));
-                               }
-                               else if(event.type == 
flash.events.MouseEvent.MOUSE_UP)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.MOUSE_UP,true));
-                               }
-                               else if(event.type == 
flash.events.MouseEvent.MOUSE_OVER)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.MOUSE_OVER,true));
-                               }
-                               else if(event.type == 
flash.events.MouseEvent.MOUSE_OUT)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.MOUSE_OUT,true));
-                               }
-                               else if(event.type == 
flash.events.MouseEvent.ROLL_OVER)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.ROLL_OVER,true));
-                               }
-                               else if(event.type == 
flash.events.MouseEvent.ROLL_OUT)
-                               {
-                                       dispatchEvent(new 
org.apache.flex.events.MouseEvent(org.apache.flex.events.MouseEvent.ROLL_OUT,true));
-                               }
-                       }
+                       super();                        
                }
-               
+                               
                private var _explicitWidth:Number;
         
         /**
@@ -367,61 +402,91 @@ package org.apache.flex.core
                }
         
         /**
-         *  @copy org.apache.flex.core.IUIBase#setHeight
+         *  @copy org.apache.flex.core.ILayoutChild#setHeight
          *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setHeight(value:Number):void
+        public function setHeight(value:Number, noEvent:Boolean = false):void
         {
             if (_height != value)
             {
                 _height = value;
-                dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
             }            
         }
 
         /**
-         *  @copy org.apache.flex.core.IUIBase#setWidth
+         *  @copy org.apache.flex.core.ILayoutChild#setWidth
          *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setWidth(value:Number):void
+        public function setWidth(value:Number, noEvent:Boolean = false):void
         {
             if (_width != value)
             {
                 _width = value;
-                dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
             }
         }
         
         /**
-         *  @copy org.apache.flex.core.IUIBase#setWidthAndHeight
+         *  @copy org.apache.flex.core.ILayoutChild#setWidthAndHeight
          *  
          *  @langversion 3.0
          *  @playerversion Flash 10.2
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setWidthAndHeight(newWidth:Number, 
newHeight:Number):void
+        public function setWidthAndHeight(newWidth:Number, newHeight:Number, 
noEvent:Boolean = false):void
         {
             if (_width != newWidth)
             {
                 _width = newWidth;
                 if (_height == newHeight)
-                    dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
+                    if (!noEvent) 
+                        dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
             }
             if (_height != newHeight)
             {
                 _height = newHeight;
-                dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
             }            
-            
+            dispatchEvent(new org.apache.flex.events.Event("sizeChanged"));
+        }
+        
+        /**
+         *  @copy org.apache.flex.core.ILayoutChild#isWidthSizedToContent
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function isWidthSizedToContent():Boolean
+        {
+            return (isNaN(_explicitWidth) && isNaN(_percentWidth));
+        }
+        
+        /**
+         *  @copy org.apache.flex.core.ILayoutChild#isHeightSizedToContent
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function isHeightSizedToContent():Boolean
+        {
+            return (isNaN(_explicitHeight) && isNaN(_percentHeight));
         }
         
                private var _model:IBeadModel;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/c3385db8/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIButtonBase.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIButtonBase.as 
b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIButtonBase.as
index 425d3a7..c942654 100644
--- a/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIButtonBase.as
+++ b/frameworks/as/projects/FlexJSUI/src/org/apache/flex/core/UIButtonBase.as
@@ -379,12 +379,13 @@ package org.apache.flex.core
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setHeight(value:Number):void
+        public function setHeight(value:Number, noEvent:Boolean = false):void
         {
             if (_height != value)
             {
                 _height = value;
-                dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
             }            
         }
         
@@ -396,12 +397,13 @@ package org.apache.flex.core
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setWidth(value:Number):void
+        public function setWidth(value:Number, noEvent:Boolean = false):void
         {
             if (_width != value)
             {
                 _width = value;
-                dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
             }
         }
         
@@ -413,20 +415,48 @@ package org.apache.flex.core
          *  @playerversion AIR 2.6
          *  @productversion FlexJS 0.0
          */
-        public function setWidthAndHeight(newWidth:Number, 
newHeight:Number):void
+        public function setWidthAndHeight(newWidth:Number, newHeight:Number, 
noEvent:Boolean = false):void
         {
             if (_width != newWidth)
             {
                 _width = newWidth;
                 if (_height == newHeight)
-                    dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
+                    if (!noEvent) 
+                        dispatchEvent(new 
org.apache.flex.events.Event("widthChanged"));
             }
             if (_height != newHeight)
             {
                 _height = newHeight;
-                dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
+                if (!noEvent)
+                    dispatchEvent(new 
org.apache.flex.events.Event("heightChanged"));
             }            
-            
+            dispatchEvent(new org.apache.flex.events.Event("sizeChanged"));
+        }
+        
+        /**
+         *  @copy org.apache.flex.core.ILayoutChild#isWidthSizedToContent
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function isWidthSizedToContent():Boolean
+        {
+            return (isNaN(_explicitWidth) && isNaN(_percentWidth));
+        }
+        
+        /**
+         *  @copy org.apache.flex.core.ILayoutChild#isHeightSizedToContent
+         *  
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion FlexJS 0.0
+         */
+        public function isHeightSizedToContent():Boolean
+        {
+            return (isNaN(_explicitHeight) && isNaN(_percentHeight));
         }
         
         private var _model:IBeadModel;
@@ -751,5 +781,6 @@ package org.apache.flex.core
                        
                        return measurementBead;
                }
+        
        }
 }
\ No newline at end of file

Reply via email to