You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ha...@apache.org on 2019/12/20 10:42:22 UTC
[royale-asjs] branch develop updated: Better wrapping of native
events get more Keyboard and Mouse properties from the native event
This is an automated email from the ASF dual-hosted git repository.
harbs pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new ecfc6f6 Better wrapping of native events get more Keyboard and Mouse properties from the native event
ecfc6f6 is described below
commit ecfc6f663aacdeec9bbd760ed48b123bf750dbfe
Author: Harbs <ha...@in-tools.com>
AuthorDate: Fri Dec 20 12:42:08 2019 +0200
Better wrapping of native events
get more Keyboard and Mouse properties from the native event
---
.../beads/CrossBrowserFireListenerOverrideBead.as | 4 +-
.../org/apache/royale/core/HTMLElementWrapper.as | 7 ++-
.../org/apache/royale/events/KeyboardEvent.as | 19 ++++--
.../royale/org/apache/royale/events/MouseEvent.as | 67 +++++++++++++++++++---
.../royale/events/utils/KeyboardEventConverter.as | 25 +++++---
.../royale/events/utils/MouseEventConverter.as | 14 ++++-
.../html/beads/controllers/DragMouseController.as | 6 +-
.../mx/events/utils/KeyboardEventConverter.as | 15 +++--
.../royale/mx/events/utils/MouseEventConverter.as | 14 +++--
9 files changed, 130 insertions(+), 41 deletions(-)
diff --git a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
index 06de46f..36db48b 100644
--- a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
+++ b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
@@ -77,10 +77,10 @@ package org.apache.royale.html.beads
var constructorName:String = nativeEvent.constructor.toString();
if (constructorName.indexOf('KeyboardEvent') > -1)
{
- e = KeyboardEventConverter.convert(nativeEvent);
+ e = KeyboardEventConverter.convert(nativeEvent,eventObject);
} else if (constructorName.indexOf('MouseEvent') > -1)
{
- e = MouseEventConverter.convert(nativeEvent);
+ e = MouseEventConverter.convert(nativeEvent,eventObject);
} else
{
e = new org.apache.royale.events.BrowserEvent();
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
index 85e5597..419288b 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
@@ -162,11 +162,12 @@ package org.apache.royale.core
var nativeEvent:Object = eventObject.getBrowserEvent();
var converter:Object = converterMap[nativeEvent.constructor.name];
if (converter)
- e = converter["convert"](nativeEvent);
+ e = converter["convert"](nativeEvent,eventObject);
else
+ {
e = new org.apache.royale.events.BrowserEvent();
-
- e.wrapEvent(eventObject);
+ e.wrapEvent(eventObject);
+ }
return HTMLElementWrapper.googFireListener(listener, e);
}
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
index 258bb6f..a855c28 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
@@ -26,6 +26,7 @@ package org.apache.royale.events
import org.apache.royale.events.utils.KeyboardEventConverter;
}
import org.apache.royale.events.IBrowserEvent;
+ import org.apache.royale.utils.OSUtils;
/**
* Keyboard events
@@ -198,17 +199,25 @@ package org.apache.royale.events
{
return shiftKey || ctrlKey || metaKey;
}
-
+ /**
+ * SWF does not have meta, so we need to explicitely set the specialKey
+ */
+ COMPILE::SWF
private var _specialKey:Boolean;
+ COMPILE::SWF
+ public function set specialKey(value:Boolean):void
+ {
+ _specialKey = value;
+ }
+ COMPILE::SWF
public function get specialKey():Boolean
-
{
return _specialKey;
}
-
- public function set specialKey(value:Boolean):void
+ COMPILE::JS
+ public function get specialKey():Boolean
{
- _specialKey = value;
+ return OSUtils.getOS() == OSUtils.MAC_OS ? metaKey : ctrlKey;
}
/**
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
index 5d93700..dff686d 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
@@ -41,6 +41,7 @@ package org.apache.royale.events
import org.apache.royale.events.IBrowserEvent;
import org.apache.royale.geom.Point;
import org.apache.royale.utils.PointUtils;
+ import org.apache.royale.utils.OSUtils;
/**
@@ -299,7 +300,7 @@ package org.apache.royale.events
relatedObject:Object = null,
ctrlKey:Boolean = false, altKey:Boolean = false, shiftKey:Boolean = false,
buttonDown:Boolean = false, delta:int = 0,
- commandKey:Boolean = false, controlKey:Boolean = false,
+ metaKey:Boolean = false, controlKey:Boolean = false,
clickCount:int = 0, targetBeforeBubbling:IEventDispatcher = null)
{
super(type, bubbles, cancelable);
@@ -312,8 +313,7 @@ package org.apache.royale.events
this.shiftKey = shiftKey;
this.buttonDown = buttonDown;
this.delta = delta;
- this.commandKey = commandKey;
- this.controlKey = controlKey;
+ this.metaKey = metaKey;
this.clickCount = clickCount;
}
@@ -338,9 +338,62 @@ package org.apache.royale.events
}
public var relatedObject:Object;
- public var ctrlKey:Boolean;
- public var altKey:Boolean;
- public var shiftKey:Boolean;
+ private var _ctrlKey:Boolean;
+
+ public function get ctrlKey():Boolean
+ {
+ return wrappedEvent ? wrappedEvent.ctrlKey : _ctrlKey;
+ }
+
+ public function set ctrlKey(value:Boolean):void
+ {
+ if(wrappedEvent)
+ wrappedEvent.ctrlKey = value;
+ else
+ _ctrlKey = value;
+ }
+ private var _altKey:Boolean;
+
+ public function get altKey():Boolean
+ {
+ return wrappedEvent ? wrappedEvent.altKey : _altKey;
+ }
+
+ public function set altKey(value:Boolean):void
+ {
+ if(wrappedEvent)wrappedEvent.altKey = value;
+ else _altKey = value;
+ }
+ private var _shiftKey:Boolean;
+
+ public function get shiftKey():Boolean
+ {
+ return wrappedEvent ? wrappedEvent.shiftKey : _shiftKey;
+ }
+
+ public function set shiftKey(value:Boolean):void
+ {
+ if(wrappedEvent)wrappedEvent.shiftKey = value;
+ else _shiftKey = value;
+ }
+ private var _metaKey:Boolean;
+
+ public function get metaKey():Boolean
+ {
+ return wrappedEvent ? wrappedEvent.metaKey : _metaKey;
+ }
+
+ public function set metaKey(value:Boolean):void
+ {
+ if(wrappedEvent)wrappedEvent.metaKey = value;
+ else _metaKey = value;
+ }
+
+ public function get specialKey():Boolean
+ {
+ return OSUtils.getOS() == OSUtils.MAC_OS ? metaKey : ctrlKey;
+ }
+
private var _buttons:int = -1;
public function get buttonDown():Boolean
@@ -442,8 +495,6 @@ package org.apache.royale.events
_deltaY = value;
}
- public var commandKey:Boolean;
- public var controlKey:Boolean;
public var clickCount:int;
private var _target:Object;
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/KeyboardEventConverter.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/KeyboardEventConverter.as
index 4a7669a..54ac6ee 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/KeyboardEventConverter.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/KeyboardEventConverter.as
@@ -25,6 +25,10 @@ package org.apache.royale.events.utils
{
import flash.events.KeyboardEvent;
}
+ COMPILE::JS
+ {
+ import goog.events.BrowserEvent;
+ }
/**
* Converts low level keyboard events to Royale KeyboardEvents
@@ -52,9 +56,13 @@ package org.apache.royale.events.utils
var key:String = KeyConverter.convertCharCode(oldEvent.charCode);
var type:String = oldEvent.type == flash.events.KeyboardEvent.KEY_DOWN ? org.apache.royale.events.KeyboardEvent.KEY_DOWN :
org.apache.royale.events.KeyboardEvent.KEY_UP;
- var newEvent:org.apache.royale.events.KeyboardEvent = new org.apache.royale.events.KeyboardEvent(type, key, code, oldEvent.shiftKey);
- newEvent.altKey = oldEvent.altKey;
-// newEvent.ctrlKey = oldEvent.controlKey; // TODO
+ var newEvent:org.apache.royale.events.KeyboardEvent = new org.apache.royale.events.KeyboardEvent(
+ type,
+ key,
+ code,
+ oldEvent.shiftKey,
+ oldEvent.altKey
+ );
newEvent.specialKey = oldEvent.ctrlKey;
return newEvent;
}
@@ -68,7 +76,7 @@ package org.apache.royale.events.utils
* @productversion Royale 0.8
*/
COMPILE::JS
- public static function convert(nativeEvent:Object):KeyboardEvent
+ public static function convert(nativeEvent:Object,browserEvent:goog.events.BrowserEvent=null):KeyboardEvent
{
var type:String = nativeEvent["type"];
var key:String = nativeEvent["key"];
@@ -80,10 +88,11 @@ package org.apache.royale.events.utils
code = KeyConverter.convertKeyCode(nativeEvent['keyCode']);
var newEvent:KeyboardEvent = new KeyboardEvent(type, key, code, nativeEvent["shiftKey"]);
- newEvent.altKey = nativeEvent["altKey"];
- newEvent.ctrlKey = nativeEvent["ctrlKey"];
- newEvent.metaKey = nativeEvent["metaKey"];
- newEvent.specialKey = OSUtils.getOS() == OSUtils.MAC_OS ? nativeEvent["metaKey"] : nativeEvent["ctrlKey"];
+ if(!browserEvent)
+ {
+ browserEvent = new goog.events.BrowserEvent(nativeEvent,nativeEvent["currentTarget"]);
+ }
+ newEvent.wrapEvent(browserEvent);
return newEvent;
}
}
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/MouseEventConverter.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/MouseEventConverter.as
index 4f731dd..4cdbc3f 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/MouseEventConverter.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/utils/MouseEventConverter.as
@@ -23,6 +23,10 @@ package org.apache.royale.events.utils
import flash.events.IEventDispatcher;
import flash.events.MouseEvent;
}
+ COMPILE::JS
+ {
+ import goog.events.BrowserEvent;
+ }
import org.apache.royale.events.MouseEvent;
import org.apache.royale.events.utils.IHandlesOriginalEvent;
@@ -178,9 +182,15 @@ package org.apache.royale.events.utils
COMPILE::JS
public class MouseEventConverter
{
- public static function convert(nativeEvent:Object):MouseEvent
+ public static function convert(nativeEvent:Object,browserEvent:goog.events.BrowserEvent=null):MouseEvent
{
- return new MouseEvent(nativeEvent["type"], nativeEvent["bubbles"], nativeEvent["cancelable"]);
+ var event:MouseEvent = new MouseEvent(nativeEvent["type"], nativeEvent["bubbles"], nativeEvent["cancelable"]);
+ if(!browserEvent)
+ {
+ browserEvent = new goog.events.BrowserEvent(nativeEvent,nativeEvent["currentTarget"]);
+ }
+ event.wrapEvent(browserEvent);
+ return event;
}
}
diff --git a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
index 7b88671..0f49d27 100644
--- a/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
+++ b/frameworks/projects/DragDrop/src/main/royale/org/apache/royale/html/beads/controllers/DragMouseController.as
@@ -25,7 +25,7 @@ package org.apache.royale.html.beads.controllers
COMPILE::JS
{
- import goog.events.BrowserEvent;
+ import org.apache.royale.events.utils.MouseEventConverter;
}
import org.apache.royale.core.IBead;
@@ -335,9 +335,7 @@ package org.apache.royale.html.beads.controllers
//trace("DRAG-MOUSE: sending dragEnd via: "+event.target.toString());
COMPILE::JS
{
- var googEv:goog.events.BrowserEvent = new goog.events.BrowserEvent(event,event["currentTarget"]);
- event = new MouseEvent(event["type"]);
- event.wrapEvent(googEv);
+ event = MouseEventConverter.convert(event);
}
var screenPoint:Point = new Point(event.screenX, event.screenY);
var newPoint:Point = PointUtils.globalToLocal(screenPoint, event.target);
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/KeyboardEventConverter.as b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/KeyboardEventConverter.as
index 4e00ba3..533322b 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/KeyboardEventConverter.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/KeyboardEventConverter.as
@@ -28,6 +28,10 @@ package mx.events.utils
import flash.events.KeyboardEvent;
import org.apache.royale.events.KeyboardEvent;
}
+ COMPILE::JS
+ {
+ import goog.events.BrowserEvent;
+ }
/**
* Converts low level keyboard events to Royale KeyboardEvents
@@ -71,7 +75,7 @@ package mx.events.utils
* @productversion Royale 0.8
*/
COMPILE::JS
- public static function convert(nativeEvent:Object):KeyboardEvent
+ public static function convert(nativeEvent:Object,browserEvent:goog.events.BrowserEvent=null):KeyboardEvent
{
if (nativeEvent["getModifierState"])
{
@@ -89,10 +93,11 @@ package mx.events.utils
if (type == "keydown") type = "keyDown";
if (type == "keyup") type = "keyUp";
var newEvent:KeyboardEvent = new KeyboardEvent(type, key, code, nativeEvent["shiftKey"]);
- newEvent.altKey = nativeEvent["altKey"];
- newEvent.ctrlKey = nativeEvent["ctrlKey"];
- newEvent.metaKey = nativeEvent["metaKey"];
- newEvent.specialKey = OSUtils.getOS() == OSUtils.MAC_OS ? nativeEvent["metaKey"] : nativeEvent["ctrlKey"];
+ if(!browserEvent)
+ {
+ browserEvent = new goog.events.BrowserEvent(nativeEvent,nativeEvent["currentTarget"]);
+ }
+ newEvent.wrapEvent(browserEvent);
return newEvent;
}
}
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/MouseEventConverter.as b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/MouseEventConverter.as
index def4636..5a22034 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/MouseEventConverter.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/MouseEventConverter.as
@@ -24,6 +24,10 @@ package mx.events.utils
import flash.events.MouseEvent;
import org.apache.royale.events.utils.IHandlesOriginalEvent;
}
+ COMPILE::JS
+ {
+ import goog.events.BrowserEvent;
+ }
import mx.core.Keyboard;
import mx.events.MouseEvent;
@@ -180,16 +184,18 @@ package mx.events.utils
COMPILE::JS
public class MouseEventConverter
{
- public static function convert(nativeEvent:Object):mx.events.MouseEvent
+ public static function convert(nativeEvent:Object,browserEvent:goog.events.BrowserEvent=null):mx.events.MouseEvent
{
if (nativeEvent.hasOwnProperty("getModifierState"))
{
Keyboard.setCapsLock(nativeEvent["getModifierState"]("CapsLock"));
}
var event:mx.events.MouseEvent = new mx.events.MouseEvent(nativeEvent["type"], nativeEvent["bubbles"], nativeEvent["cancelable"]);
- event.shiftKey = nativeEvent["shiftKey"];
- event.ctrlKey = nativeEvent["ctrlKey"];
- event.altKey = nativeEvent["altKey"];
+ if(!browserEvent)
+ {
+ browserEvent = new goog.events.BrowserEvent(nativeEvent,nativeEvent["currentTarget"]);
+ }
+ event.wrapEvent(browserEvent);
return event;
}
}