Merge "Fix for text selection in horizontally scrolled TextViews." into gingerbread

This commit is contained in:
Gilles Debunne
2010-09-09 10:02:05 -07:00
committed by Android (Google) Code Review

View File

@@ -5761,18 +5761,25 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
private void convertFromViewportToContentCoordinates(Rect r) {
int paddingTop = getExtendedPaddingTop();
final int horizontalOffset = viewportToContentHorizontalOffset();
r.left += horizontalOffset;
r.right += horizontalOffset;
final int verticalOffset = viewportToContentVerticalOffset();
r.top += verticalOffset;
r.bottom += verticalOffset;
}
private int viewportToContentHorizontalOffset() {
return getCompoundPaddingLeft() - mScrollX;
}
private int viewportToContentVerticalOffset() {
int offset = getExtendedPaddingTop() - mScrollY;
if ((mGravity & Gravity.VERTICAL_GRAVITY_MASK) != Gravity.TOP) {
paddingTop += getVerticalOffset(false);
offset += getVerticalOffset(false);
}
r.top += paddingTop;
r.bottom += paddingTop;
int paddingLeft = getCompoundPaddingLeft();
r.left += paddingLeft;
r.right += paddingLeft;
r.offset(-mScrollX, -mScrollY);
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);
}