summaryrefslogtreecommitdiffstats
path: root/core/java/android
diff options
context:
space:
mode:
authorFabrice Di Meglio <fdimeglio@google.com>2011-09-22 10:25:57 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-09-22 10:25:57 -0700
commitbedc1eb19d6c12facf65249ceb46cbabb6e0b05b (patch)
tree812be071501efa52f78fb494b35e111ac04a33b5 /core/java/android
parenta41074870d318afcd38d3bc30a2ef6f8bcb03ba9 (diff)
parentb2beb92073cea6e472748e729ac8e265ca83a925 (diff)
downloadframeworks_base-bedc1eb19d6c12facf65249ceb46cbabb6e0b05b.zip
frameworks_base-bedc1eb19d6c12facf65249ceb46cbabb6e0b05b.tar.gz
frameworks_base-bedc1eb19d6c12facf65249ceb46cbabb6e0b05b.tar.bz2
Merge "Bug 5279842: mis alignment after scroll"
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/text/method/Touch.java43
1 files changed, 19 insertions, 24 deletions
diff --git a/core/java/android/text/method/Touch.java b/core/java/android/text/method/Touch.java
index 3f9b945..106a801 100644
--- a/core/java/android/text/method/Touch.java
+++ b/core/java/android/text/method/Touch.java
@@ -35,44 +35,39 @@ public class Touch {
* Y position.
*/
public static void scrollTo(TextView widget, Layout layout, int x, int y) {
- int padding = widget.getTotalPaddingTop() +
- widget.getTotalPaddingBottom();
- int top = layout.getLineForVertical(y);
- int bottom = layout.getLineForVertical(y + widget.getHeight() -
- padding);
+ final int verticalPadding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
+ final int top = layout.getLineForVertical(y);
+ final int bottom = layout.getLineForVertical(y + widget.getHeight() - verticalPadding);
int left = Integer.MAX_VALUE;
int right = 0;
- Alignment a = null;
- boolean ltr = true;
+ Alignment a = layout.getParagraphAlignment(top);
+ boolean ltr = layout.getParagraphDirection(top) > 0;
for (int i = top; i <= bottom; i++) {
left = (int) Math.min(left, layout.getLineLeft(i));
right = (int) Math.max(right, layout.getLineRight(i));
-
- if (a == null) {
- a = layout.getParagraphAlignment(i);
- ltr = layout.getParagraphDirection(i) > 0;
- }
}
- padding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
- int width = widget.getWidth();
- int diff = 0;
+ final int hoizontalPadding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
+ final int availableWidth = widget.getWidth() - hoizontalPadding;
+ final int actualWidth = right - left;
- // align_opposite does NOT mean align_right, we need the paragraph
- // direction to resolve it to left or right
- if (right - left < width - padding) {
+ if (actualWidth < availableWidth) {
if (a == Alignment.ALIGN_CENTER) {
- diff = (width - padding - (right - left)) / 2;
- } else if (ltr == (a == Alignment.ALIGN_OPPOSITE)) {
- diff = width - padding - (right - left);
+ x = left - ((availableWidth - actualWidth) / 2);
+ } else if ((ltr && (a == Alignment.ALIGN_OPPOSITE)) || (a == Alignment.ALIGN_RIGHT)) {
+ // align_opposite does NOT mean align_right, we need the paragraph
+ // direction to resolve it to left or right
+ x = left - (availableWidth - actualWidth);
+ } else {
+ x = left;
}
+ } else {
+ x = Math.min(x, right - availableWidth);
+ x = Math.max(x, left);
}
- x = Math.min(x, right - (width - padding) - diff);
- x = Math.max(x, left - diff);
-
widget.scrollTo(x, y);
}