summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorGilles Debunne <debunne@google.com>2010-09-08 19:33:20 -0700
committerGilles Debunne <debunne@google.com>2010-09-08 19:33:20 -0700
commit44c1e4c72dea2d7ce077cc6fdc46e01bd863a642 (patch)
treeced7d888fb4a8455fb5770f521d114ce9e50c492 /core
parentedbb8083a815e9d911f8e659fc5c293543fdf502 (diff)
downloadframeworks_base-44c1e4c72dea2d7ce077cc6fdc46e01bd863a642.zip
frameworks_base-44c1e4c72dea2d7ce077cc6fdc46e01bd863a642.tar.gz
frameworks_base-44c1e4c72dea2d7ce077cc6fdc46e01bd863a642.tar.bz2
Fix for text selection in horizontally scrolled TextViews.
A left padding and scroll was not taken into account in cursor position. Bug http://b/issue?id=2970142 Change-Id: Ie76e8d97f3dd5fe3a750aa82cd4b97c98892cb48
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/TextView.java35
1 files changed, 23 insertions, 12 deletions
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 3428206..fea53e5 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -5761,18 +5761,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private void convertFromViewportToContentCoordinates(Rect r) {
- int paddingTop = getExtendedPaddingTop();
- if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
- paddingTop += getVerticalOffset(false);
- }
- r.top += paddingTop;
- r.bottom += paddingTop;
+ final int horizontalOffset = viewportToContentHorizontalOffset();
+ r.left += horizontalOffset;
+ r.right += horizontalOffset;
- int paddingLeft = getCompoundPaddingLeft();
- r.left += paddingLeft;
- r.right += paddingLeft;
+ final int verticalOffset = viewportToContentVerticalOffset();
+ r.top += verticalOffset;
+ r.bottom += verticalOffset;
+ }
- r.offset(-mScrollX, -mScrollY);
+ private int viewportToContentHorizontalOffset() {
+ return getCompoundPaddingLeft() - mScrollX;
+ }
+
+ private int viewportToContentVerticalOffset() {
+ int offset = getExtendedPaddingTop() - mScrollY;
+ if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
+ offset += getVerticalOffset(false);
+ }
+ return offset;
}
@Override
@@ -7651,9 +7658,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
bounds.right = bounds.left + drawableWidth;
bounds.bottom = bounds.top + drawableHeight;
- int boundTopBefore = bounds.top;
convertFromViewportToContentCoordinates(bounds);
- mHotSpotVerticalPosition += bounds.top - boundTopBefore;
mDrawable.setBounds(bounds);
postInvalidate();
}
@@ -7797,6 +7802,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mOffsetX = (bounds.left + bounds.right) / 2.0f - x;
mOffsetY = mHandle.mHotSpotVerticalPosition - y;
+ mOffsetX += viewportToContentHorizontalOffset();
+ mOffsetY += viewportToContentVerticalOffset();
+
mOnDownTimerStart = event.getEventTime();
}
break;
@@ -7986,6 +7994,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
mOffsetX = (bounds.left + bounds.right) / 2.0f - x;
mOffsetY = draggedHandle.mHotSpotVerticalPosition - y;
+ mOffsetX += viewportToContentHorizontalOffset();
+ mOffsetY += viewportToContentVerticalOffset();
+
mOnDownTimerStart = event.getEventTime();
((ArrowKeyMovementMethod)mMovement).setCursorController(this);
}