diff options
| author | Siyamed Sinir <siyamed@google.com> | 2017-07-24 20:46:41 -0700 |
|---|---|---|
| committer | Siyamed Sinir <siyamed@google.com> | 2017-07-25 18:31:47 -0700 |
| commit | 0fa89d6f62c31a033a9dece9c7cfee2d50dc063d (patch) | |
| tree | a465f53648fe9103231ba0843b8b3c9e2f75ccfa /core/java/android/text/DynamicLayout.java | |
| parent | 62944851e279c27cb065fc242479d0d091f4566f (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.java | 20 |
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; |
