summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
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
commita28e4764994283c3595dd41f12e425cf7dc0d985 (patch)
tree2fc436743359cbe849fae1948bc7cc58a1a6a88e
parenta0bb44efe96ca70635b64dac8922b225d1a19407 (diff)
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)
-rw-r--r--core/java/android/text/StaticLayout.java19
1 files changed, 14 insertions, 5 deletions
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index 814326c3ba3f..457e04f6e562 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,