summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAnish Athalye <aathalye@google.com>2014-06-27 14:37:53 -0700
committerAlan Lau <alanlau@google.com>2014-07-28 18:47:40 +0000
commita28e4764994283c3595dd41f12e425cf7dc0d985 (patch)
tree2fc436743359cbe849fae1948bc7cc58a1a6a88e /core
parenta0bb44efe96ca70635b64dac8922b225d1a19407 (diff)
downloadframeworks_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.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 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,