diff options
-rw-r--r-- | core/java/android/text/StaticLayout.java | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index 814326c..457e04f 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -379,7 +379,7 @@ public class StaticLayout extends Layout { okBottom = fitBottom; } } else { - final boolean moreChars = (j + 1 < spanEnd); + final boolean moreChars; int endPos; int above, below, top, bottom; float currentTextWidth; @@ -391,6 +391,7 @@ public class StaticLayout extends Layout { top = okTop; bottom = okBottom; currentTextWidth = okWidth; + moreChars = (j + 1 < spanEnd); } else if (fit != here) { endPos = fit; above = fitAscent; @@ -398,13 +399,21 @@ public class StaticLayout extends Layout { top = fitTop; bottom = fitBottom; currentTextWidth = fitWidth; + moreChars = (j + 1 < spanEnd); } else { + // must make progress, so take next character endPos = here + 1; - above = fm.ascent; - below = fm.descent; - top = fm.top; - bottom = fm.bottom; + // but to deal properly with clusters + // take all zero width characters following that + while (endPos < spanEnd && widths[endPos - paraStart] == 0) { + endPos++; + } + above = fmAscent; + below = fmDescent; + top = fmTop; + bottom = fmBottom; currentTextWidth = widths[here - paraStart]; + moreChars = (endPos < spanEnd); } v = out(source, here, endPos, |