am 5c43d546: am 0433488d: Merge "Track difference between touch and word in x coordinate." into mnc-dev
* commit '5c43d546d2831922cd25b1afb4d7adf2ac735660': Track difference between touch and word in x coordinate.
This commit is contained in:
@@ -3855,8 +3855,8 @@ public class Editor {
|
||||
private class SelectionStartHandleView extends HandleView {
|
||||
// Indicates whether the cursor is making adjustments within a word.
|
||||
private boolean mInWord = false;
|
||||
// Offset to track difference between touch and word boundary.
|
||||
protected int mTouchWordOffset;
|
||||
// Difference between touch position and word boundary position.
|
||||
private float mTouchWordDelta;
|
||||
|
||||
public SelectionStartHandleView(Drawable drawableLtr, Drawable drawableRtl) {
|
||||
super(drawableLtr, drawableRtl);
|
||||
@@ -3908,18 +3908,36 @@ public class Editor {
|
||||
offset = mPreviousOffset;
|
||||
}
|
||||
}
|
||||
mTouchWordOffset = Math.max(trueOffset - offset, 0);
|
||||
positionCursor = true;
|
||||
} else if (offset - mTouchWordOffset > mPreviousOffset || currLine > mPrevLine) {
|
||||
// User is shrinking the selection.
|
||||
if (currLine > mPrevLine) {
|
||||
// We're on a different line, so we'll snap to word boundaries.
|
||||
offset = start;
|
||||
mTouchWordOffset = Math.max(trueOffset - offset, 0);
|
||||
final Layout layout = mTextView.getLayout();
|
||||
if (layout != null && offset < trueOffset) {
|
||||
final float adjustedX = layout.getPrimaryHorizontal(offset);
|
||||
mTouchWordDelta =
|
||||
mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX;
|
||||
} else {
|
||||
offset -= mTouchWordOffset;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
positionCursor = true;
|
||||
} else {
|
||||
final int adjustedOffset =
|
||||
mTextView.getOffsetAtCoordinate(currLine, x - mTouchWordDelta);
|
||||
if (adjustedOffset > mPreviousOffset || currLine > mPrevLine) {
|
||||
// User is shrinking the selection.
|
||||
if (currLine > mPrevLine) {
|
||||
// We're on a different line, so we'll snap to word boundaries.
|
||||
offset = start;
|
||||
final Layout layout = mTextView.getLayout();
|
||||
if (layout != null && offset < trueOffset) {
|
||||
final float adjustedX = layout.getPrimaryHorizontal(offset);
|
||||
mTouchWordDelta =
|
||||
mTextView.convertToLocalHorizontalCoordinate(x) - adjustedX;
|
||||
} else {
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
} else {
|
||||
offset = adjustedOffset;
|
||||
}
|
||||
positionCursor = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Handles can not cross and selection is at least one character.
|
||||
@@ -3934,7 +3952,7 @@ public class Editor {
|
||||
} else {
|
||||
offset = alteredOffset;
|
||||
}
|
||||
mTouchWordOffset = 0;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
mInWord = !getWordIteratorWithText().isBoundary(offset);
|
||||
positionAtCursorOffset(offset, false);
|
||||
@@ -3946,7 +3964,7 @@ public class Editor {
|
||||
boolean superResult = super.onTouchEvent(event);
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
||||
// Reset the touch word offset when the user has lifted their finger.
|
||||
mTouchWordOffset = 0;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
return superResult;
|
||||
}
|
||||
@@ -3955,8 +3973,8 @@ public class Editor {
|
||||
private class SelectionEndHandleView extends HandleView {
|
||||
// Indicates whether the cursor is making adjustments within a word.
|
||||
private boolean mInWord = false;
|
||||
// Offset to track difference between touch and word boundary.
|
||||
protected int mTouchWordOffset;
|
||||
// Difference between touch position and word boundary position.
|
||||
private float mTouchWordDelta;
|
||||
|
||||
public SelectionEndHandleView(Drawable drawableLtr, Drawable drawableRtl) {
|
||||
super(drawableLtr, drawableRtl);
|
||||
@@ -4008,18 +4026,36 @@ public class Editor {
|
||||
offset = mPreviousOffset;
|
||||
}
|
||||
}
|
||||
mTouchWordOffset = Math.max(offset - trueOffset, 0);
|
||||
positionCursor = true;
|
||||
} else if (offset + mTouchWordOffset < mPreviousOffset || currLine < mPrevLine) {
|
||||
// User is shrinking the selection.
|
||||
if (currLine < mPrevLine) {
|
||||
// We're on a different line, so we'll snap to word boundaries.
|
||||
offset = end;
|
||||
mTouchWordOffset = Math.max(offset - trueOffset, 0);
|
||||
final Layout layout = mTextView.getLayout();
|
||||
if (layout != null && offset > trueOffset) {
|
||||
final float adjustedX = layout.getPrimaryHorizontal(offset);
|
||||
mTouchWordDelta =
|
||||
adjustedX - mTextView.convertToLocalHorizontalCoordinate(x);
|
||||
} else {
|
||||
offset += mTouchWordOffset;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
positionCursor = true;
|
||||
} else {
|
||||
final int adjustedOffset =
|
||||
mTextView.getOffsetAtCoordinate(currLine, x + mTouchWordDelta);
|
||||
if (adjustedOffset < mPreviousOffset || currLine < mPrevLine) {
|
||||
// User is shrinking the selection.
|
||||
if (currLine < mPrevLine) {
|
||||
// We're on a different line, so we'll snap to word boundaries.
|
||||
offset = end;
|
||||
final Layout layout = mTextView.getLayout();
|
||||
if (layout != null && offset > trueOffset) {
|
||||
final float adjustedX = layout.getPrimaryHorizontal(offset);
|
||||
mTouchWordDelta =
|
||||
adjustedX - mTextView.convertToLocalHorizontalCoordinate(x);
|
||||
} else {
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
} else {
|
||||
offset = adjustedOffset;
|
||||
}
|
||||
positionCursor = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (positionCursor) {
|
||||
@@ -4034,7 +4070,7 @@ public class Editor {
|
||||
} else {
|
||||
offset = Math.min(alteredOffset, length);
|
||||
}
|
||||
mTouchWordOffset = 0;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
mInWord = !getWordIteratorWithText().isBoundary(offset);
|
||||
positionAtCursorOffset(offset, false);
|
||||
@@ -4046,7 +4082,7 @@ public class Editor {
|
||||
boolean superResult = super.onTouchEvent(event);
|
||||
if (event.getActionMasked() == MotionEvent.ACTION_UP) {
|
||||
// Reset the touch word offset when the user has lifted their finger.
|
||||
mTouchWordOffset = 0;
|
||||
mTouchWordDelta = 0.0f;
|
||||
}
|
||||
return superResult;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user