diff options
author | Gilles Debunne <debunne@google.com> | 2010-09-08 19:33:20 -0700 |
---|---|---|
committer | Gilles Debunne <debunne@google.com> | 2010-09-08 19:33:20 -0700 |
commit | 44c1e4c72dea2d7ce077cc6fdc46e01bd863a642 (patch) | |
tree | ced7d888fb4a8455fb5770f521d114ce9e50c492 /core | |
parent | edbb8083a815e9d911f8e659fc5c293543fdf502 (diff) | |
download | frameworks_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.java | 35 |
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); } |