diff options
author | Anish Athalye <aathalye@google.com> | 2014-06-27 14:37:53 -0700 |
---|---|---|
committer | Alan Lau <alanlau@google.com> | 2014-07-28 18:47:40 +0000 |
commit | a28e4764994283c3595dd41f12e425cf7dc0d985 (patch) | |
tree | 2fc436743359cbe849fae1948bc7cc58a1a6a88e /core | |
parent | a0bb44efe96ca70635b64dac8922b225d1a19407 (diff) | |
download | frameworks_base-a28e4764994283c3595dd41f12e425cf7dc0d985.zip frameworks_base-a28e4764994283c3595dd41f12e425cf7dc0d985.tar.gz frameworks_base-a28e4764994283c3595dd41f12e425cf7dc0d985.tar.bz2 |
DO NOT MERGE Fix line breaking for clusters in narrow views
Clusters were broken incorrectly when in narrow views (when the width of
the cluster was greater than the width of a view). Also, out() calls
were modifying fm, so clusters that were too wide were not positioned
correctly.
Change-Id: I521f8dc6338f5f1de6858af3f0c0bd320aa46bc0
(cherry picked from commit 162713dd0b72af79c1b2286985f7e79f043cd915)
Diffstat (limited to 'core')
-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, |