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
