Merge "Bugfixes in StaticLayout. DO NOT MERGE." into honeycomb

This commit is contained in:
Jason Chen
2011-03-01 17:56:06 -08:00
committed by Android (Google) Code Review
2 changed files with 20 additions and 71 deletions

View File

@@ -1727,6 +1727,17 @@ public abstract class Layout {
} }
} }
/**
* Inform this layout that not all of its lines will be displayed, because a maximum number of
* lines has been set on the associated TextView.
*
* A non strictly positive value means that all lines are displayed.
*
* @param lineCount number of visible lines
* @hide
*/
public void setMaximumVisibleLineCount(int lineCount) {}
private CharSequence mText; private CharSequence mText;
private TextPaint mPaint; private TextPaint mPaint;
/* package */ TextPaint mWorkPaint; /* package */ TextPaint mWorkPaint;
@@ -1765,14 +1776,4 @@ public abstract class Layout {
/* package */ static final Directions DIRS_ALL_RIGHT_TO_LEFT = /* package */ static final Directions DIRS_ALL_RIGHT_TO_LEFT =
new Directions(new int[] { 0, RUN_LENGTH_MASK | RUN_RTL_FLAG }); new Directions(new int[] { 0, RUN_LENGTH_MASK | RUN_RTL_FLAG });
/**
* Inform this layout that not all of its lines will be displayed, because a maximum number of
* lines has been set on the associated TextView.
*
* A non positive value means that all lines are displayed.
*
* @param line line number of the last visible line (line numbers start at 1 for the first line)
* @hide
*/
public void setMaximumVisibleLineCount(int line) {}
} }

View File

@@ -360,8 +360,6 @@ public class StaticLayout extends Layout
okbottom = fitbottom; okbottom = fitbottom;
} }
} else { } else {
if (ellipsize != null) {
// Break only at spaces using ok indexes.
if (ok != here) { if (ok != here) {
// Log.e("text", "output ok " + here + " to " +ok); // Log.e("text", "output ok " + here + " to " +ok);
@@ -377,43 +375,7 @@ public class StaticLayout extends Layout
choosehtv, fm, hasTabOrEmoji, choosehtv, fm, hasTabOrEmoji,
needMultiply, paraStart, chdirs, dir, easy, needMultiply, paraStart, chdirs, dir, easy,
ok == bufend, includepad, trackpad, ok == bufend, includepad, trackpad,
chs, widths, here - paraStart, chs, widths, paraStart,
ellipsize, ellipsizedWidth, okwidth,
paint);
here = ok;
} else {
// Act like it fit even though it didn't.
fitwidth = w;
here = fit = j + 1;
if (fmtop < fittop)
fittop = fmtop;
if (fmascent < fitascent)
fitascent = fmascent;
if (fmdescent > fitdescent)
fitdescent = fmdescent;
if (fmbottom > fitbottom)
fitbottom = fmbottom;
}
} else {
if (ok != here) {
// Log.e("text", "output ok " + here + " to " +ok);
while (ok < spanEnd && chs[ok - paraStart] == ' ') {
ok++;
}
v = out(source,
here, ok,
okascent, okdescent, oktop, okbottom,
v,
spacingmult, spacingadd, chooseht,
choosehtv, fm, hasTabOrEmoji,
needMultiply, paraStart, chdirs, dir, easy,
ok == bufend, includepad, trackpad,
chs, widths, here - paraStart,
ellipsize, ellipsizedWidth, okwidth, ellipsize, ellipsizedWidth, okwidth,
paint); paint);
@@ -429,7 +391,7 @@ public class StaticLayout extends Layout
choosehtv, fm, hasTabOrEmoji, choosehtv, fm, hasTabOrEmoji,
needMultiply, paraStart, chdirs, dir, easy, needMultiply, paraStart, chdirs, dir, easy,
fit == bufend, includepad, trackpad, fit == bufend, includepad, trackpad,
chs, widths, here - paraStart, chs, widths, paraStart,
ellipsize, ellipsizedWidth, fitwidth, ellipsize, ellipsizedWidth, fitwidth,
paint); paint);
@@ -451,13 +413,12 @@ public class StaticLayout extends Layout
needMultiply, paraStart, chdirs, dir, easy, needMultiply, paraStart, chdirs, dir, easy,
here + 1 == bufend, includepad, here + 1 == bufend, includepad,
trackpad, trackpad,
chs, widths, here - paraStart, chs, widths, paraStart,
ellipsize, ellipsizedWidth, ellipsize, ellipsizedWidth,
widths[here - paraStart], paint); widths[here - paraStart], paint);
here = here + 1; here = here + 1;
} }
}
if (here < spanStart) { if (here < spanStart) {
// didn't output all the text for this span // didn't output all the text for this span
@@ -500,7 +461,7 @@ public class StaticLayout extends Layout
choosehtv, fm, hasTabOrEmoji, choosehtv, fm, hasTabOrEmoji,
needMultiply, paraStart, chdirs, dir, easy, needMultiply, paraStart, chdirs, dir, easy,
paraEnd == bufend, includepad, trackpad, paraEnd == bufend, includepad, trackpad,
chs, widths, here - paraStart, chs, widths, paraStart,
ellipsize, ellipsizedWidth, w, paint); ellipsize, ellipsizedWidth, w, paint);
} }
@@ -620,19 +581,6 @@ public class StaticLayout extends Layout
return false; return false;
} }
/*
private static void dump(byte[] data, int count, String label) {
if (false) {
System.out.print(label);
for (int i = 0; i < count; i++)
System.out.print(" " + data[i]);
System.out.println();
}
}
*/
private int out(CharSequence text, int start, int end, private int out(CharSequence text, int start, int end,
int above, int below, int top, int bottom, int v, int above, int below, int top, int bottom, int v,
float spacingmult, float spacingadd, float spacingmult, float spacingadd,
@@ -735,8 +683,8 @@ public class StaticLayout extends Layout
if (easy) { if (easy) {
mLineDirections[j] = linedirs; mLineDirections[j] = linedirs;
} else { } else {
mLineDirections[j] = AndroidBidi.directions(dir, chdirs, widstart, chs, mLineDirections[j] = AndroidBidi.directions(dir, chdirs, start - widstart, chs,
widstart, end - start); start - widstart, end - start);
} }
// If ellipsize is in marquee mode, do not apply ellipsis on the first line // If ellipsize is in marquee mode, do not apply ellipsis on the first line
@@ -875,7 +823,7 @@ public class StaticLayout extends Layout
@Override @Override
public int getLineDescent(int line) { public int getLineDescent(int line) {
int descent = mLines[mColumns * line + DESCENT]; int descent = mLines[mColumns * line + DESCENT];
if (mMaximumVisibleLineCount > 0 && line >= mMaximumVisibleLineCount - 1 && if (mMaximumVisibleLineCount > 0 && line >= mMaximumVisibleLineCount - 1 && // -1 intended
line != mLineCount) { line != mLineCount) {
descent += getBottomPadding(); descent += getBottomPadding();
} }
@@ -939,8 +887,8 @@ public class StaticLayout extends Layout
* @hide * @hide
*/ */
@Override @Override
public void setMaximumVisibleLineCount(int line) { public void setMaximumVisibleLineCount(int lineCount) {
mMaximumVisibleLineCount = line; mMaximumVisibleLineCount = lineCount;
} }
private int mLineCount; private int mLineCount;