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;
         }
     }