summaryrefslogtreecommitdiff
path: root/core/java/android/text/DynamicLayout.java
diff options
context:
space:
mode:
authorSiyamed Sinir <siyamed@google.com>2017-07-24 20:46:41 -0700
committerSiyamed Sinir <siyamed@google.com>2017-07-25 18:31:47 -0700
commit0fa89d6f62c31a033a9dece9c7cfee2d50dc063d (patch)
treea465f53648fe9103231ba0843b8b3c9e2f75ccfa /core/java/android/text/DynamicLayout.java
parent62944851e279c27cb065fc242479d0d091f4566f (diff)
Store line extra in layouts
StaticLayout and Dynamic layout changes the values of line bottom and descent according to linespacing modification attributes. This loses information of the real line descent and bottom, which causes some utilities not to be able to draw themselves in correct positions. Examples are cursor drawing to the empty space, BulletSpan not being able to vertically center itself in the line, and DynamicLayout not being able to calculate the last line height properly. This CL stores the extra added to bottom and descent values so that it can be used later. Test: bit CtsTextTestCases:android.text.cts.LayoutTest Test: bit CtsTextTestCases:android.text.cts.StaticLayoutTest Test: bit CtsTextTestCases:android.text.cts.DynamicLayoutTest Test: bit FrameworksCoreTests:android.text.LayoutTest Test: bit FrameworksCoreTests:android.text.StaticLayoutTest Test: bit FrameworksCoreTests:android.text.DynamicLayoutTest Test: bit FrameworksCoreTests:android.text.DynamicLayoutBlocksTest Bug: 30870806 Bug: 33138492 Bug: 25194907 Change-Id: I7a1039e71e4999c75b5f26122fe6239e3ee24868
Diffstat (limited to 'core/java/android/text/DynamicLayout.java')
-rw-r--r--core/java/android/text/DynamicLayout.java20
1 files changed, 15 insertions, 5 deletions
diff --git a/core/java/android/text/DynamicLayout.java b/core/java/android/text/DynamicLayout.java
index c7a5fce26c3e..91d829099917 100644
--- a/core/java/android/text/DynamicLayout.java
+++ b/core/java/android/text/DynamicLayout.java
@@ -365,6 +365,7 @@ public class DynamicLayout extends Layout
desc += botpad;
ints[DESCENT] = desc;
+ ints[EXTRA] = reflowed.getLineExtra(i);
objects[0] = reflowed.getLineDirections(i);
final int end = (i == n - 1) ? where + after : reflowed.getLineStart(i + 1);
@@ -692,6 +693,14 @@ public class DynamicLayout extends Layout
return mInts.getValue(line, DESCENT);
}
+ /**
+ * @hide
+ */
+ @Override
+ public int getLineExtra(int line) {
+ return mInts.getValue(line, EXTRA);
+ }
+
@Override
public int getLineStart(int line) {
return mInts.getValue(line, START) & START_MASK;
@@ -851,14 +860,15 @@ public class DynamicLayout extends Layout
private static final int TAB = START;
private static final int TOP = 1;
private static final int DESCENT = 2;
+ private static final int EXTRA = 3;
// HYPHEN and MAY_PROTRUDE_FROM_TOP_OR_BOTTOM share the same entry.
- private static final int HYPHEN = 3;
+ private static final int HYPHEN = 4;
private static final int MAY_PROTRUDE_FROM_TOP_OR_BOTTOM = HYPHEN;
- private static final int COLUMNS_NORMAL = 4;
+ private static final int COLUMNS_NORMAL = 5;
- private static final int ELLIPSIS_START = 4;
- private static final int ELLIPSIS_COUNT = 5;
- private static final int COLUMNS_ELLIPSIZE = 6;
+ private static final int ELLIPSIS_START = 5;
+ private static final int ELLIPSIS_COUNT = 6;
+ private static final int COLUMNS_ELLIPSIZE = 7;
private static final int START_MASK = 0x1FFFFFFF;
private static final int DIR_SHIFT = 30;