Skip to content

Commit bedc1eb

Browse files
Fabrice Di MeglioAndroid (Google) Code Review
authored andcommitted
Merge "Bug 5279842: mis alignment after scroll"
2 parents a410748 + b2beb92 commit bedc1eb

1 file changed

Lines changed: 19 additions & 24 deletions

File tree

core/java/android/text/method/Touch.java

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -35,44 +35,39 @@ private Touch() { }
3535
* Y position.
3636
*/
3737
public static void scrollTo(TextView widget, Layout layout, int x, int y) {
38-
int padding = widget.getTotalPaddingTop() +
39-
widget.getTotalPaddingBottom();
40-
int top = layout.getLineForVertical(y);
41-
int bottom = layout.getLineForVertical(y + widget.getHeight() -
42-
padding);
38+
final int verticalPadding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
39+
final int top = layout.getLineForVertical(y);
40+
final int bottom = layout.getLineForVertical(y + widget.getHeight() - verticalPadding);
4341

4442
int left = Integer.MAX_VALUE;
4543
int right = 0;
46-
Alignment a = null;
47-
boolean ltr = true;
44+
Alignment a = layout.getParagraphAlignment(top);
45+
boolean ltr = layout.getParagraphDirection(top) > 0;
4846

4947
for (int i = top; i <= bottom; i++) {
5048
left = (int) Math.min(left, layout.getLineLeft(i));
5149
right = (int) Math.max(right, layout.getLineRight(i));
52-
53-
if (a == null) {
54-
a = layout.getParagraphAlignment(i);
55-
ltr = layout.getParagraphDirection(i) > 0;
56-
}
5750
}
5851

59-
padding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
60-
int width = widget.getWidth();
61-
int diff = 0;
52+
final int hoizontalPadding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
53+
final int availableWidth = widget.getWidth() - hoizontalPadding;
54+
final int actualWidth = right - left;
6255

63-
// align_opposite does NOT mean align_right, we need the paragraph
64-
// direction to resolve it to left or right
65-
if (right - left < width - padding) {
56+
if (actualWidth < availableWidth) {
6657
if (a == Alignment.ALIGN_CENTER) {
67-
diff = (width - padding - (right - left)) / 2;
68-
} else if (ltr == (a == Alignment.ALIGN_OPPOSITE)) {
69-
diff = width - padding - (right - left);
58+
x = left - ((availableWidth - actualWidth) / 2);
59+
} else if ((ltr && (a == Alignment.ALIGN_OPPOSITE)) || (a == Alignment.ALIGN_RIGHT)) {
60+
// align_opposite does NOT mean align_right, we need the paragraph
61+
// direction to resolve it to left or right
62+
x = left - (availableWidth - actualWidth);
63+
} else {
64+
x = left;
7065
}
66+
} else {
67+
x = Math.min(x, right - availableWidth);
68+
x = Math.max(x, left);
7169
}
7270

73-
x = Math.min(x, right - (width - padding) - diff);
74-
x = Math.max(x, left - diff);
75-
7671
widget.scrollTo(x, y);
7772
}
7873

0 commit comments

Comments
 (0)