From a28e4764994283c3595dd41f12e425cf7dc0d985 Mon Sep 17 00:00:00 2001 From: Anish Athalye Date: Fri, 27 Jun 2014 14:37:53 -0700 Subject: 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) --- core/java/android/text/StaticLayout.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'core') 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, -- cgit v1.1