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/29 09:31:26 UTC

[royale-asjs] branch develop updated: Fixes #640

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 5a9a591  Fixes #640
     new d60fb93  Merge branch 'develop' of https://github.com/apache/royale-asjs into develop
5a9a591 is described below

commit 5a9a591dfabce5837da9b344a260e5be785aa3b1
Author: Harbs <ha...@in-tools.com>
AuthorDate: Sun Dec 29 11:31:08 2019 +0200

    Fixes #640
---
 .../projects/Core/src/main/royale/CoreClasses.as   |  2 +
 .../org/apache/royale/events/KeyboardEvent.as      | 28 -------------
 .../royale/org/apache/royale/events/MouseEvent.as  | 13 ------
 .../royale/events/utils/KeyboardEventConverter.as  |  1 -
 .../royale/utils/event/hasPlatformModifier.as      | 46 ++++++++++++++++++++++
 .../mx/events/utils/KeyboardEventConverter.as      |  1 -
 .../apache/royale/textLayout/edit/EditManager.as   |  4 +-
 .../royale/textLayout/edit/SelectionManager.as     | 38 +++++++++++-------
 .../events/FlowElementMouseEventManager.as         |  4 +-
 9 files changed, 77 insertions(+), 60 deletions(-)

diff --git a/frameworks/projects/Core/src/main/royale/CoreClasses.as b/frameworks/projects/Core/src/main/royale/CoreClasses.as
index 1da668b..965d4c4 100644
--- a/frameworks/projects/Core/src/main/royale/CoreClasses.as
+++ b/frameworks/projects/Core/src/main/royale/CoreClasses.as
@@ -314,6 +314,8 @@ internal class CoreClasses
 	import org.apache.royale.utils.date.addMonths; addMonths;
 	import org.apache.royale.utils.date.addSeconds; addSeconds;
 	import org.apache.royale.utils.date.addYears; addYears;
+	
+	import org.apache.royale.utils.event.hasPlatformModifier; hasPlatformModifier;
 
 	import org.apache.royale.utils.async.CompoundAsyncTask; CompoundAsyncTask;
 	import org.apache.royale.utils.async.SequentialAsyncTask; SequentialAsyncTask;
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 8719a1e..f8c9ab0 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
@@ -199,34 +199,6 @@ 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;
-		}
-        COMPILE::JS
-		public function get specialKey():Boolean
-		{
-			return OSUtils.getOS() == OSUtils.MAC_OS ? metaKey : ctrlKey;
-		}
-        COMPILE::JS
-		public function set specialKey(value:Boolean):void
-		{
-            if(OSUtils.getOS() == OSUtils.MAC_OS)
-                metaKey = value;
-            else
-                ctrlKey = value;
-		}
 
         /**
          * @langversion 3.0
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 33bb052..d285aa0 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
@@ -389,19 +389,6 @@ package org.apache.royale.events
             else _metaKey = value;
         }
 
-		public function get specialKey():Boolean
-		{
-			return OSUtils.getOS() == OSUtils.MAC_OS ? metaKey : ctrlKey;
-		}
-
-		public function set specialKey(value:Boolean):void
-		{
-            if(OSUtils.getOS() == OSUtils.MAC_OS)
-                metaKey = value;
-            else
-                ctrlKey = value;
-		}
-
         private var _buttons:int = -1;
         
         public function get buttonDown():Boolean
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 33b5d29..ed37c1f 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
@@ -64,7 +64,6 @@ package org.apache.royale.events.utils
 				oldEvent.shiftKey,
 				oldEvent.altKey
 			);
-			newEvent.specialKey = oldEvent.ctrlKey;
 			return newEvent;
 		}
 		
diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/event/hasPlatformModifier.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/event/hasPlatformModifier.as
new file mode 100644
index 0000000..5799663
--- /dev/null
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/utils/event/hasPlatformModifier.as
@@ -0,0 +1,46 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.utils.event
+{
+  import org.apache.royale.events.MouseEvent;
+  import org.apache.royale.events.KeyboardEvent;
+  import org.apache.royale.utils.OSUtils;
+
+  COMPILE::JS
+  public function hasPlatformModifier(event:*):Boolean{
+    var isMac:Boolean = OSUtils.getOS() == OSUtils.MAC_OS;
+    if(event is MouseEvent){
+      return isMac ? (event as MouseEvent).metaKey : (event as MouseEvent).ctrlKey;
+    } else if(event is KeyboardEvent){
+      return isMac ? (event as KeyboardEvent).metaKey : (event as KeyboardEvent).ctrlKey;
+    } else if(event.constructor.name == "MouseEvent" || event.constructor.name == "KeyboardEvent"){
+      return isMac ? event.metaKey : event.ctrlKey;
+    }
+    return false;
+  }
+
+  COMPILE::SWF
+  public function hasPlatformModifier(event:*):Boolean{
+    try{
+      return event.controlKey;
+    }catch(err:Error){
+      return false;
+    }
+  }
+}
\ No newline at end of file
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 f734c27..4aa2a96 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
@@ -63,7 +63,6 @@ package mx.events.utils
 			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
-			newEvent.specialKey = oldEvent.ctrlKey;
 			return newEvent;
 		}
 		
diff --git a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/EditManager.as b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/EditManager.as
index 4b2b6cc..a102c42 100644
--- a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/EditManager.as
+++ b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/EditManager.as
@@ -80,6 +80,7 @@ package org.apache.royale.textLayout.edit
 	import org.apache.royale.utils.AnimationUtil;
 	import org.apache.royale.utils.undo.IOperation;
 	import org.apache.royale.utils.undo.IUndoManager;
+	import org.apache.royale.utils.event.hasPlatformModifier;
 //	import flash.errors.IllegalOperationError;
 		
 
@@ -281,8 +282,9 @@ package org.apache.royale.textLayout.edit
 				updateAllControllers();
 			
 			super.keyDownHandler(event);
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			
-			if (event.specialKey)
+			if (platformModifier)
 			{
 				// The player subsequently sends a text input event (which should be ignored) as listed below:
 				// CTRL/CMD+z: Only on Mac when using a pre-Argo player version
diff --git a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/SelectionManager.as b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/SelectionManager.as
index bee89d7..3520b3a 100644
--- a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/SelectionManager.as
+++ b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/edit/SelectionManager.as
@@ -29,6 +29,7 @@ package org.apache.royale.textLayout.edit
 	import org.apache.royale.geom.Point;
 	import org.apache.royale.geom.Rectangle;
 	import org.apache.royale.reflection.getQualifiedClassName;
+	import org.apache.royale.utils.event.hasPlatformModifier;
 	import org.apache.royale.text.engine.ITextLine;
 	import org.apache.royale.text.engine.TextRotation;
 	import org.apache.royale.text.events.IMEEvent;
@@ -2411,18 +2412,19 @@ package org.apache.royale.textLayout.edit
 		private function handleLeftArrow(event:KeyboardEvent):SelectionState
 		{
 			var selState:SelectionState = getSelectionState();
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			if (_textFlow.computedFormat.blockProgression != BlockProgression.RL)
 			{
 				if (_textFlow.computedFormat.direction == Direction.LTR)
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.previousWord(selState, event.shiftKey);
 					else
 						NavigationUtil.previousCharacter(selState, event.shiftKey);
 				}
 				else
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.nextWord(selState, event.shiftKey);
 					else
 						NavigationUtil.nextCharacter(selState, event.shiftKey);
@@ -2433,7 +2435,7 @@ package org.apache.royale.textLayout.edit
 				// always test for altkey first - that way ctrl-alt is the same as alt
 				if (event.altKey)
 					NavigationUtil.endOfParagraph(selState, event.shiftKey);
-				else if (event.specialKey)
+				else if (platformModifier)
 					NavigationUtil.endOfDocument(selState, event.shiftKey);
 				else
 					NavigationUtil.nextLine(selState, event.shiftKey);
@@ -2443,13 +2445,14 @@ package org.apache.royale.textLayout.edit
 
 		private function handleUpArrow(event:KeyboardEvent):SelectionState
 		{
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			var selState:SelectionState = getSelectionState();
 			if (_textFlow.computedFormat.blockProgression != BlockProgression.RL)
 			{
 				// always test for altkey first - that way ctrl-alt is the same as alt
 				if (event.altKey)
 					NavigationUtil.startOfParagraph(selState, event.shiftKey);
-				else if (event.specialKey)
+				else if (platformModifier)
 					NavigationUtil.startOfDocument(selState, event.shiftKey);
 				else
 					NavigationUtil.previousLine(selState, event.shiftKey);
@@ -2458,14 +2461,14 @@ package org.apache.royale.textLayout.edit
 			{
 				if (_textFlow.computedFormat.direction == Direction.LTR)
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.previousWord(selState, event.shiftKey);
 					else
 						NavigationUtil.previousCharacter(selState, event.shiftKey);
 				}
 				else
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.nextWord(selState, event.shiftKey);
 					else
 						NavigationUtil.nextCharacter(selState, event.shiftKey);
@@ -2476,20 +2479,21 @@ package org.apache.royale.textLayout.edit
 
 		private function handleRightArrow(event:KeyboardEvent):SelectionState
 		{
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			var selState:SelectionState = getSelectionState();
 
 			if (_textFlow.computedFormat.blockProgression != BlockProgression.RL)
 			{
 				if (_textFlow.computedFormat.direction == Direction.LTR)
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.nextWord(selState, event.shiftKey);
 					else
 						NavigationUtil.nextCharacter(selState, event.shiftKey);
 				}
 				else
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.previousWord(selState, event.shiftKey);
 					else
 						NavigationUtil.previousCharacter(selState, event.shiftKey);
@@ -2500,7 +2504,7 @@ package org.apache.royale.textLayout.edit
 				// always test for altkey first - that way ctrl-alt is the same as alt
 				if (event.altKey)
 					NavigationUtil.startOfParagraph(selState, event.shiftKey);
-				else if (event.specialKey)
+				else if (platformModifier)
 					NavigationUtil.startOfDocument(selState, event.shiftKey);
 				else
 					NavigationUtil.previousLine(selState, event.shiftKey);
@@ -2510,6 +2514,7 @@ package org.apache.royale.textLayout.edit
 
 		private function handleDownArrow(event:KeyboardEvent):SelectionState
 		{
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			var selState:SelectionState = getSelectionState();
 
 			if (_textFlow.computedFormat.blockProgression != BlockProgression.RL)
@@ -2517,7 +2522,7 @@ package org.apache.royale.textLayout.edit
 				// always test for altkey first - that way ctrl-alt is the same as alt
 				if (event.altKey)
 					NavigationUtil.endOfParagraph(selState, event.shiftKey);
-				else if (event.specialKey)
+				else if (platformModifier)
 					NavigationUtil.endOfDocument(selState, event.shiftKey);
 				else
 					NavigationUtil.nextLine(selState, event.shiftKey);
@@ -2526,14 +2531,14 @@ package org.apache.royale.textLayout.edit
 			{
 				if (_textFlow.computedFormat.direction == Direction.LTR)
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.nextWord(selState, event.shiftKey);
 					else
 						NavigationUtil.nextCharacter(selState, event.shiftKey);
 				}
 				else
 				{
-					if (event.specialKey || event.altKey)
+					if (platformModifier || event.altKey)
 						NavigationUtil.previousWord(selState, event.shiftKey);
 					else
 						NavigationUtil.previousCharacter(selState, event.shiftKey);
@@ -2545,8 +2550,9 @@ package org.apache.royale.textLayout.edit
 
 		private function handleHomeKey(event:KeyboardEvent):SelectionState
 		{
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			var selState:SelectionState = getSelectionState();
-			if (event.specialKey && !event.altKey)
+			if (platformModifier && !event.altKey)
 				NavigationUtil.startOfDocument(selState, event.shiftKey);
 			else
 				NavigationUtil.startOfLine(selState, event.shiftKey);
@@ -2555,8 +2561,9 @@ package org.apache.royale.textLayout.edit
 
 		private function handleEndKey(event:KeyboardEvent):SelectionState
 		{
+			var platformModifier:Boolean = hasPlatformModifier(event);
 			var selState:SelectionState = getSelectionState();
-			if (event.specialKey && !event.altKey)
+			if (platformModifier && !event.altKey)
 				NavigationUtil.endOfDocument(selState, event.shiftKey);
 			else
 				NavigationUtil.endOfLine(selState, event.shiftKey);
@@ -2641,7 +2648,8 @@ package org.apache.royale.textLayout.edit
 			// in Flash there is special events for this.
 			COMPILE::JS
 			{
-				if(event.specialKey && !event.altKey && !event.defaultPrevented)
+				var platformModifier:Boolean = hasPlatformModifier(event);
+				if(platformModifier && !event.altKey && !event.defaultPrevented)
 				{
 					switch(event.code)
 					{
diff --git a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/events/FlowElementMouseEventManager.as b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/events/FlowElementMouseEventManager.as
index 9d4b4cd..7d00598 100644
--- a/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/events/FlowElementMouseEventManager.as
+++ b/frameworks/projects/TLF/src/main/royale/org/apache/royale/textLayout/events/FlowElementMouseEventManager.as
@@ -37,6 +37,7 @@ package org.apache.royale.textLayout.events
 	import org.apache.royale.textLayout.utils.GeometryUtil;
 	import org.apache.royale.textLayout.utils.HitTestArea;
 	import org.apache.royale.utils.ObjectMap;
+	import org.apache.royale.utils.event.hasPlatformModifier;
 
 
 	
@@ -500,8 +501,9 @@ package org.apache.royale.textLayout.events
 		 */
 		private function hitTestKeyEventHandler(evt:KeyboardEvent):void
 		{
+			var platformModifier:Boolean = hasPlatformModifier(evt);
 			if (!_blockInteraction)
-				checkCtrlKeyState(evt.specialKey);
+				checkCtrlKeyState(platformModifier);
 		}
 		
 		/**