You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ha...@apache.org on 2017/06/18 10:34:10 UTC
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
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 <ha...@harbss-mbp-2.mynet>
Authored: Sun Jun 18 13:34:04 2017 +0300
Committer: Added floor to binary search <ha...@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.