Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 59b8a326 authored by Gilles Debunne's avatar Gilles Debunne Committed by Android (Google) Code Review
Browse files

Merge "Bugfixes in StaticLayout."

parents d710bf78 f3fa0cdb
Loading
Loading
Loading
Loading
+11 −10
Original line number Diff line number Diff line
@@ -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 TextPaint mPaint;
    /* package */ TextPaint mWorkPaint;
@@ -1765,14 +1776,4 @@ public abstract class Layout {
    /* package */ static final Directions DIRS_ALL_RIGHT_TO_LEFT =
        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) {}
}
+9 −61
Original line number Diff line number Diff line
@@ -354,44 +354,6 @@ public class StaticLayout extends Layout {
                            if (fitBottom > okBottom)
                                okBottom = fitBottom;
                        }
                    } else {
                        if (ellipsize != null) {
                            // Break only at spaces using ok indexes.
                            if (ok != here) {
                                // Log.e("text", "output ok " + here + " to " +ok);

                                while (ok < spanEnd && chs[ok - paraStart] == CHAR_SPACE) {
                                    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,
                                        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);
@@ -408,7 +370,7 @@ public class StaticLayout extends Layout {
                                        chooseHtv, fm, hasTabOrEmoji,
                                        needMultiply, paraStart, chdirs, dir, easy,
                                        ok == bufEnd, includepad, trackpad,
                                        chs, widths, here - paraStart,
                                        chs, widths, paraStart,
                                        ellipsize, ellipsizedWidth, okWidth,
                                        paint);

@@ -424,7 +386,7 @@ public class StaticLayout extends Layout {
                                        chooseHtv, fm, hasTabOrEmoji,
                                        needMultiply, paraStart, chdirs, dir, easy,
                                        fit == bufEnd, includepad, trackpad,
                                        chs, widths, here - paraStart,
                                        chs, widths, paraStart,
                                        ellipsize, ellipsizedWidth, fitWidth,
                                        paint);

@@ -446,13 +408,12 @@ public class StaticLayout extends Layout {
                                        needMultiply, paraStart, chdirs, dir, easy,
                                        here + 1 == bufEnd, includepad,
                                        trackpad,
                                        chs, widths, here - paraStart,
                                        chs, widths, paraStart,
                                        ellipsize, ellipsizedWidth,
                                        widths[here - paraStart], paint);

                                here = here + 1;
                            }
                        }

                        if (here < spanStart) {
                            // didn't output all the text for this span
@@ -495,7 +456,7 @@ public class StaticLayout extends Layout {
                        chooseHtv, fm, hasTabOrEmoji,
                        needMultiply, paraStart, chdirs, dir, easy,
                        paraEnd == bufEnd, includepad, trackpad,
                        chs, widths, here - paraStart,
                        chs, widths, paraStart,
                        ellipsize, ellipsizedWidth, w, paint);
            }

@@ -614,19 +575,6 @@ public class StaticLayout extends Layout {
        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,
                      int above, int below, int top, int bottom, int v,
                      float spacingmult, float spacingadd,
@@ -729,8 +677,8 @@ public class StaticLayout extends Layout {
        if (easy) {
            mLineDirections[j] = linedirs;
        } else {
            mLineDirections[j] = AndroidBidi.directions(dir, chdirs, widthStart, chs,
                    widthStart, end - start);
            mLineDirections[j] = AndroidBidi.directions(dir, chdirs, start - widthStart, chs,
                    start - widthStart, end - start);
        }

        // If ellipsize is in marquee mode, do not apply ellipsis on the first line
@@ -869,7 +817,7 @@ public class StaticLayout extends Layout {
    @Override
    public int getLineDescent(int line) {
        int descent = mLines[mColumns * line + DESCENT];
        if (mMaximumVisibleLineCount > 0 && line >= mMaximumVisibleLineCount - 1 &&
        if (mMaximumVisibleLineCount > 0 && line >= mMaximumVisibleLineCount - 1 && // -1 intended
                line != mLineCount) {
            descent += getBottomPadding();
        }
@@ -933,8 +881,8 @@ public class StaticLayout extends Layout {
     * @hide
     */
    @Override
    public void setMaximumVisibleLineCount(int line) {
        mMaximumVisibleLineCount = line;
    public void setMaximumVisibleLineCount(int lineCount) {
        mMaximumVisibleLineCount = lineCount;
    }

    private int mLineCount;