am 58d89539: Merge "Scroll performance improved in multiline TextEdit" into ics-mr1

* commit '58d8953958ce452c5080eaa582d7e5d2b5017398':
  Scroll performance improved in multiline TextEdit
This commit is contained in:
Gilles Debunne
2011-12-01 15:07:10 -08:00
committed by Android Git Automerger
2 changed files with 39 additions and 12 deletions

View File

@@ -35,22 +35,30 @@ public class Touch {
* Y position.
*/
public static void scrollTo(TextView widget, Layout layout, int x, int y) {
final int verticalPadding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
final int top = layout.getLineForVertical(y);
final int bottom = layout.getLineForVertical(y + widget.getHeight() - verticalPadding);
final int horizontalPadding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
final int availableWidth = widget.getWidth() - horizontalPadding;
int left = Integer.MAX_VALUE;
int right = 0;
final int top = layout.getLineForVertical(y);
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));
int left, right;
if (widget.getHorizontallyScrolling()) {
final int verticalPadding = widget.getTotalPaddingTop() + widget.getTotalPaddingBottom();
final int bottom = layout.getLineForVertical(y + widget.getHeight() - verticalPadding);
left = Integer.MAX_VALUE;
right = 0;
for (int i = top; i <= bottom; i++) {
left = (int) Math.min(left, layout.getLineLeft(i));
right = (int) Math.max(right, layout.getLineRight(i));
}
} else {
left = 0;
right = availableWidth;
}
final int hoizontalPadding = widget.getTotalPaddingLeft() + widget.getTotalPaddingRight();
final int availableWidth = widget.getWidth() - hoizontalPadding;
final int actualWidth = right - left;
if (actualWidth < availableWidth) {
@@ -166,16 +174,24 @@ public class Touch {
return false;
}
/**
* @param widget The text view.
* @param buffer The text buffer.
*/
public static int getInitialScrollX(TextView widget, Spannable buffer) {
DragState[] ds = buffer.getSpans(0, buffer.length(), DragState.class);
return ds.length > 0 ? ds[0].mScrollX : -1;
}
/**
* @param widget The text view.
* @param buffer The text buffer.
*/
public static int getInitialScrollY(TextView widget, Spannable buffer) {
DragState[] ds = buffer.getSpans(0, buffer.length(), DragState.class);
return ds.length > 0 ? ds[0].mScrollY : -1;
}
private static class DragState implements NoCopySpan {
public float mX;
public float mY;

View File

@@ -2580,6 +2580,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
}
/**
* Returns whether the text is allowed to be wider than the View is.
* If false, the text will be wrapped to the width of the View.
*
* @attr ref android.R.styleable#TextView_scrollHorizontally
* @hide
*/
public boolean getHorizontallyScrolling() {
return mHorizontallyScrolling;
}
/**
* Makes the TextView at least this many lines tall.
*