@@ -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