flex-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ha...@apache.org
Subject git commit: [flex-asjs] [refs/heads/tlf] - Reverted removal of buttonDown added getter for textBlockStart (fixes a bug on line start/end selection) Changed getAtomIndexAtPoint() to local coordinates Added handling of more events in ContainerController
Date Sun, 18 Jun 2017 10:34:10 GMT
Repository: flex-asjs
Updated Branches:
  refs/heads/tlf ef940e3f4 -> 914e666c7


Reverted removal of buttonDown
added getter for textBlockStart (fixes a bug on line start/end selection)
Changed getAtomIndexAtPoint() to local coordinates
Added handling of more events in ContainerController


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

Branch: refs/heads/tlf
Commit: 914e666c7a1960d9cccab8eafa3a4583b87a92b0
Parents: ef940e3
Author: Added floor to binary search <harbs@harbss-mbp-2.mynet>
Authored: Sun Jun 18 13:34:04 2017 +0300
Committer: Added floor to binary search <harbs@harbss-mbp-2.mynet>
Committed: Sun Jun 18 13:34:04 2017 +0300

----------------------------------------------------------------------
 .../flex/org/apache/flex/events/MouseEvent.as   |  6 ++---
 .../flex/textLayout/compose/ITextFlowLine.as    |  1 +
 .../flex/textLayout/compose/TextFlowLine.as     | 27 ++++++++++++++++++++
 .../textLayout/container/ContainerController.as | 14 +++++++++-
 .../container/TextContainerManager.as           | 10 ++------
 .../flex/textLayout/edit/SelectionManager.as    | 17 ++++--------
 .../flex/textLayout/elements/LinkElement.as     |  8 ++----
 .../events/FlowElementMouseEventManager.as      |  9 +------
 .../flex/org/apache/flex/text/html/TextLine.as  | 10 +++++---
 9 files changed, 59 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as
index c2fe391..1cea36d 100644
--- a/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as
+++ b/frameworks/projects/Core/src/main/flex/org/apache/flex/events/MouseEvent.as
@@ -247,6 +247,7 @@ package org.apache.flex.events
 			this.ctrlKey = ctrlKey;
 			this.altKey = altKey;
 			this.shiftKey = shiftKey;
+			this.buttonDown = buttonDown;
 			this.delta = delta;
 			this.commandKey = commandKey;
 			this.controlKey = controlKey;
@@ -279,10 +280,7 @@ package org.apache.flex.events
 		public var ctrlKey:Boolean;
 		public var altKey:Boolean;
 		public var shiftKey:Boolean;
-        // MDL says buttonDown is unreliable in JS for mouseMove so hide
-        // the API so folks get compile errors and keep their own flags
-        // for mouseDown/mouseUp
-		private var buttonDown:Boolean;
+		public var buttonDown:Boolean;
 		public var delta:int;
 		public var commandKey:Boolean;
 		public var controlKey:Boolean;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/ITextFlowLine.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/ITextFlowLine.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/ITextFlowLine.as
index 2ef9404..bfa84b1 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/ITextFlowLine.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/ITextFlowLine.as
@@ -56,6 +56,7 @@ package org.apache.flex.textLayout.compose
 		function get paragraph():IParagraphElement;
 		function get absoluteStart():int;
 		function setAbsoluteStart(val:int):void;
+		function get textBlockStart():int;
 		function get textLength():int;
 		function setTextLength(val:int):void;
 		function get spaceBefore():Number;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/TextFlowLine.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/TextFlowLine.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/TextFlowLine.as
index cf207b6..64a3d54 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/TextFlowLine.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/compose/TextFlowLine.as
@@ -524,6 +524,27 @@ package org.apache.flex.textLayout.compose
 		{
 			return _absoluteStart;
 		}
+		public function get textBlockStart():int
+		{
+			var start:int = absoluteStart;
+			var paraStart:int = paragraph.getAbsoluteStart();
+			start -= paraStart;
+			var tbs:Vector.<ITextBlock> = paragraph.getTextBlocks();
+			if(tbs.length > 1)
+			{
+				var textBlock:ITextBlock = paragraph.getTextBlockAtPosition(start);
+				for(var i:int = 0; i < tbs.length; i++)
+				{
+					if(textBlock == tbs[i])
+						break;
+					start -= tbs[i].content.rawText.length;
+				}
+			}
+
+			return start;
+
+
+		}
 
 		/** @private */
 		public function setAbsoluteStart(val:int):void
@@ -1616,6 +1637,10 @@ package org.apache.flex.textLayout.compose
 			for each (drawRect in selCache.selectionBlocks)
 			{
 				drawRect = drawRect.clone();
+				// if(blockProgression == BlockProgression.TB)
+				// 	drawRect.y += nextLine.y - nextLine.ascent;
+				// else
+				// 	drawRect.x += nextLine.x - nextLine.ascent;//TODO does this make sense?
 				convertLineRectToContainer(drawRect, true);
 				createSelectionRect(selObj, color, drawRect.x, drawRect.y, drawRect.width, drawRect.height);
 			}
@@ -1947,6 +1972,8 @@ package org.apache.flex.textLayout.compose
 				// NB - Never use baseline adjustments for TCY.  They don't make sense here.(I think)
- gak 06.03.08
 				if (blockProgression == BlockProgression.RL)
 					globalStart.y = begCharRect.y + (startMetrics.width / 2); // TODO-9/5/8:Behavior for
leading down TBD
+				else// Harbs 6-13-17 Not sure how this used to work without this.
+					globalStart.y = begCharRect.y;
 
 				if (justRule != JustificationRule.EAST_ASIAN)
 				{

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
index e6ed682..76cb412 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/ContainerController.as
@@ -2088,6 +2088,8 @@ package org.apache.flex.textLayout.container
 		
 		public function mouseOverHandler(event:MouseEvent):void
 		{
+			if(!event.buttonDown)
+			event.buttonDown = buttonDown;
 			if (interactionManager && !event.defaultPrevented)
 				interactionManager.mouseOverHandler(event);
 		}
@@ -2095,6 +2097,8 @@ package org.apache.flex.textLayout.container
 		/** @private Does required mouseOver handling.  Calls mouseOverHandler.  @see #mouseOverHandler
*/
 		public function requiredMouseOverHandler(event:MouseEvent):void
 		{
+			if(!event.buttonDown)
+			event.buttonDown = buttonDown;
 			attachAllListeners();
 			getInteractionHandler().mouseOverHandler(event);
 		}
@@ -2111,6 +2115,8 @@ package org.apache.flex.textLayout.container
 		 */				
 		public function mouseOutHandler(event:MouseEvent):void
 		{
+			if(!event.buttonDown)
+			event.buttonDown = buttonDown;
 			if (interactionManager && !event.defaultPrevented)
 				interactionManager.mouseOutHandler(event);
 		}
@@ -2162,6 +2168,7 @@ package org.apache.flex.textLayout.container
 		
 		public function mouseDownHandler(event:MouseEvent):void
 		{
+			buttonDown = true;
 			if (interactionManager && !event.defaultPrevented)
 			{
 				interactionManager.mouseDownHandler(event);
@@ -2207,6 +2214,7 @@ package org.apache.flex.textLayout.container
 		 */
 		public function mouseUpHandler(event:MouseEvent):void
 		{
+			buttonDown = false;
 			if (interactionManager && event && !event.defaultPrevented)
 			{
 				interactionManager.mouseUpHandler(event);
@@ -2325,11 +2333,13 @@ package org.apache.flex.textLayout.container
 		
 		public function mouseMoveHandler(event:MouseEvent):void
 		{
+			if(!event.buttonDown)
+				event.buttonDown = buttonDown;
 			if (interactionManager && !event.defaultPrevented)
 			{
 //TODO fix this
 				// only autoscroll if we haven't hit something on the stage related to this particular
TextFlow
-				if (buttonDown && !hitOnMyFlowExceptLastContainer(event))
+				if (event.buttonDown && !hitOnMyFlowExceptLastContainer(event))
 					// autoScrollIfNecessary(event.stageX, event.stageY);
 				interactionManager.mouseMoveHandler(event);
 			}
@@ -2338,6 +2348,8 @@ package org.apache.flex.textLayout.container
 		/** @private */
 		public function rootMouseMoveHandler(event:MouseEvent):void
 		{   
+			if(!event.buttonDown)
+				event.buttonDown = buttonDown;
 			getInteractionHandler().mouseMoveHandler(event); 
 		}
 		

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
index 77c7cb8..457dd88 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/container/TextContainerManager.as
@@ -2525,14 +2525,8 @@ class RemappedMouseEvent extends org.apache.flex.events.MouseEvent
 			containerPoint = new Point();
 
 		/* event.commandKey,event.controlKey,event.clickCount are also supported in AIR.  IMHO
they are a nonissue for the initial click */
-        COMPILE::SWF
-        {
-    		super(event.type,event.bubbles,event.cancelable,containerPoint.x,containerPoint.y,event.relatedObject,event.ctrlKey,event.altKey,event.shiftKey,event.buttonDown,event.delta);
-        }
-        COMPILE::JS
-        {
-            super(event.type,event.bubbles,event.cancelable,containerPoint.x,containerPoint.y,event.relatedObject,event.ctrlKey,event.altKey,event.shiftKey,false,event.delta);
       
-        }
+		super(event.type,event.bubbles,event.cancelable,containerPoint.x,containerPoint.y,event.relatedObject,event.ctrlKey,event.altKey,event.shiftKey,event.buttonDown,event.delta);
+		
 		_event = event;
 	}
 

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
index 6a9d11c..04c4255 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/edit/SelectionManager.as
@@ -1524,7 +1524,7 @@ package org.apache.flex.textLayout.edit
 					}
 					else
 					{
-						var lastLinePosInPar:int = textFlowLine.absoluteStart + textFlowLine.textLength - 1;
+						var lastLinePosInPar:int = textFlowLine.textBlockStart + textFlowLine.textLength -
1;
 						var lastChar:String = textLine.textBlock.content.rawText.charAt(lastLinePosInPar);
 						if (lastChar == " ")
 						{
@@ -1693,7 +1693,7 @@ package org.apache.flex.textLayout.edit
 			//
 			// As a result, we need to be performing the less common case check prior to adjusting
the
 			// coordinates.
-			pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
+			// pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
 			var elemIdx:int = textLine.getAtomIndexAtPoint(pt.x, pt.y);
 			// trace("global point: " + pt);
 			// trace("elemIdx: " + elemIdx);
@@ -1710,7 +1710,7 @@ package org.apache.flex.textLayout.edit
 					pt.y = 0;
 
 				// get the global again and get try for the element again
-				pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
+				// pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
 				elemIdx = textLine.getAtomIndexAtPoint(pt.x, pt.y);
 				// trace("global point (second): " + pt);
 				// trace("elemIdx (second): " + elemIdx);
@@ -1722,7 +1722,7 @@ package org.apache.flex.textLayout.edit
 				// we need to use global coordinates here.  reset pt and get conversion...
 				pt.x = localX;
 				pt.y = localY;
-				pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
+				// pt = PointUtils.localToGlobal(pt, textLine);// textLine.localToGlobal(pt);
 				if (textLine.parent)
 					pt = PointUtils.globalToLocal(pt, textLine.parent);// textLine.parent.globalToLocal(pt);
 
@@ -1976,9 +1976,6 @@ package org.apache.flex.textLayout.edit
 		// ///////////////////////////////////
 		// Mouse and keyboard methods
 		// ///////////////////////////////////
-        
-        private var buttonDown:Boolean;
-        
 		/** 
 		 *  @copy IInteractionEventHandler#mouseDownHandler()
 		 * 
@@ -1989,8 +1986,6 @@ package org.apache.flex.textLayout.edit
 		 */
 		public function mouseDownHandler(event:MouseEvent):void
 		{
-            buttonDown = true;
-            
 			if (subManager)
 				subManager.selectRange(-1, -1);
 
@@ -2052,7 +2047,7 @@ package org.apache.flex.textLayout.edit
 				setMouseCursor(MouseCursor.IBEAM);
 			}
 
-			if (buttonDown)
+			if (event.buttonDown)
 			{
 				var cell:ITableCellElement = _textFlow.parentElement as ITableCellElement;
 
@@ -2114,8 +2109,6 @@ package org.apache.flex.textLayout.edit
 		 */
 		public function mouseUpHandler(event:MouseEvent):void
 		{
-            buttonDown = false;
-            
 			if (!_mouseOverSelectionArea)
 			{
 				setMouseCursor(MouseCursor.AUTO);

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/LinkElement.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/LinkElement.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/LinkElement.as
index 6cfdb84..72cc6ca 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/LinkElement.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/elements/LinkElement.as
@@ -496,15 +496,12 @@ package org.apache.flex.textLayout.elements
 			}
 		}
 
-        private var buttonDown:Boolean;
-        
 		/** @private
 		 * The ElementMouseEventManager calls this method directly. Note that the mouse
 		 * coordinates are unrelated to any coordinate in the container or this element.
 		 */
 		public function mouseDownHandler(mgr:FlowElementMouseEventManager, evt:MouseEvent):void
 		{
-            buttonDown = true;
 			mgr.setHandCursor(true);
 			setToState(LinkState.ACTIVE);
 			evt.stopImmediatePropagation();
@@ -517,7 +514,7 @@ package org.apache.flex.textLayout.elements
 		public function mouseMoveHandler(mgr:FlowElementMouseEventManager, evt:MouseEvent):void
 		{
 			mgr.setHandCursor(true);
-			setToState(buttonDown ? LinkState.ACTIVE : LinkState.HOVER);
+			setToState(evt.buttonDown ? LinkState.ACTIVE : LinkState.HOVER);
 		}
 
 		/** @private
@@ -537,7 +534,7 @@ package org.apache.flex.textLayout.elements
 		public function mouseOverHandler(mgr:FlowElementMouseEventManager, evt:MouseEvent):void
 		{
 			mgr.setHandCursor(true);
-			setToState(buttonDown ? LinkState.ACTIVE : LinkState.HOVER);
+			setToState(evt.buttonDown ? LinkState.ACTIVE : LinkState.HOVER);
 		}
 
 		/** @private
@@ -546,7 +543,6 @@ package org.apache.flex.textLayout.elements
 		 */
 		public function mouseUpHandler(mgr:FlowElementMouseEventManager, evt:MouseEvent):void
 		{
-            buttonDown = false;
 			mgr.setHandCursor(true);
 			setToState(LinkState.HOVER);
 			evt.stopImmediatePropagation();

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/events/FlowElementMouseEventManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/events/FlowElementMouseEventManager.as
b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/events/FlowElementMouseEventManager.as
index 7c53953..02a0e7c 100644
--- a/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/events/FlowElementMouseEventManager.as
+++ b/frameworks/projects/TLF/src/main/flex/org/apache/flex/textLayout/events/FlowElementMouseEventManager.as
@@ -524,8 +524,6 @@ package org.apache.flex.textLayout.events
 				link.mouseOutHandler(this, _lastMouseEvent);
 		}
 		
-        private var buttonDown:Boolean;
-        
 		/** @private
 		 * Process mouse events.
 		 * 
@@ -538,11 +536,6 @@ package org.apache.flex.textLayout.events
 			if (!_hitTests)
 				return;
 			
-            if (evt.type == MouseEvent.MOUSE_DOWN)
-                buttonDown = true;
-            else if (evt.type == MouseEvent.MOUSE_UP)
-                buttonDown = false;
-            
 			// note that mouseOver and mouseOut are used for hit-testing only
 			// need the last mouse event's button state to pass in to LinkElement
 			// in case the state of the Ctrl key changes (see hitTestKeyEventHandler())
@@ -556,7 +549,7 @@ package org.apache.flex.textLayout.events
 				if (_currentElement)
 					// generate a mouseOut event
 					localDispatchEvent(FlowElementMouseEvent.ROLL_OUT, evt);
-				else if (buttonDown)
+				else if (evt.buttonDown)
 					// do not interact if the button is down to not disturb e.g. 
 					// a mark operation in the container
 					_blockInteraction = true;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/914e666c/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
index 1bbdf65..5818a60 100644
--- a/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
+++ b/frameworks/projects/Text/src/main/flex/org/apache/flex/text/html/TextLine.as
@@ -24,6 +24,7 @@ package org.apache.flex.text.html
 		import flash.text.TextField;
 		import flash.text.TextFormat;
 		import flash.text.TextFieldAutoSize;
+		import flash.geom.Point;
 	}
 	COMPILE::JS
 	{
@@ -400,16 +401,17 @@ package org.apache.flex.text.html
 			return charIndex;
 		}
 
-		public function getAtomIndexAtPoint(stageX:Number, stageY:Number):int
+		public function getAtomIndexAtPoint(localX:Number, localY:Number):int
 		{
 			COMPILE::SWF
 			{
-				return textField.getCharIndexAtPoint(stageX, stageY);
+				var pt:Point = textField.parent.localToGlobal(new Point(localX,localY));
+				return textField.getCharIndexAtPoint(pt.x, pt.y);
 			}
 			COMPILE::JS
 			{
-				var pt:Point = new Point(stageX, stageY);
-				pt = PointUtils.globalToLocal(pt, this);
+				var pt:Point = new Point(localX, localY);
+				// pt = PointUtils.globalToLocal(pt, this);
 				var s:String = element.firstChild.textContent;
 				if (s === "") return 0;
 				// pick a starting point for which atom it might be.


Mime
View raw message