Change TabStop type from int to float
This is from API council feedback.
Bug: 124794899
Test: atest CtsTextTestCases
Test: atest CtsGraphicsTestCases
Change-Id: Ifa95f87067239cca9c0791bf079045e4f645c3ad
diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java
index 2d5f3bf..99dc793 100644
--- a/core/java/android/text/Layout.java
+++ b/core/java/android/text/Layout.java
@@ -2180,26 +2180,26 @@
*/
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
public static class TabStops {
- private int[] mStops;
+ private float[] mStops;
private int mNumStops;
- private int mIncrement;
+ private float mIncrement;
- public TabStops(int increment, Object[] spans) {
+ public TabStops(float increment, Object[] spans) {
reset(increment, spans);
}
- void reset(int increment, Object[] spans) {
+ void reset(float increment, Object[] spans) {
this.mIncrement = increment;
int ns = 0;
if (spans != null) {
- int[] stops = this.mStops;
+ float[] stops = this.mStops;
for (Object o : spans) {
if (o instanceof TabStopSpan) {
if (stops == null) {
- stops = new int[10];
+ stops = new float[10];
} else if (ns == stops.length) {
- int[] nstops = new int[ns * 2];
+ float[] nstops = new float[ns * 2];
for (int i = 0; i < ns; ++i) {
nstops[i] = stops[i];
}
@@ -2221,9 +2221,9 @@
float nextTab(float h) {
int ns = this.mNumStops;
if (ns > 0) {
- int[] stops = this.mStops;
+ float[] stops = this.mStops;
for (int i = 0; i < ns; ++i) {
- int stop = stops[i];
+ float stop = stops[i];
if (stop > h) {
return stop;
}
@@ -2232,7 +2232,10 @@
return nextDefaultStop(h, mIncrement);
}
- public static float nextDefaultStop(float h, int inc) {
+ /**
+ * Returns the position of next tab stop.
+ */
+ public static float nextDefaultStop(float h, float inc) {
return ((int) ((h + inc) / inc)) * inc;
}
}
@@ -2570,7 +2573,7 @@
ALIGN_RIGHT,
}
- private static final int TAB_INCREMENT = 20;
+ private static final float TAB_INCREMENT = 20;
/** @hide */
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java
index defe2ce..dd37c7a 100644
--- a/core/java/android/text/StaticLayout.java
+++ b/core/java/android/text/StaticLayout.java
@@ -737,14 +737,14 @@
}
}
// tab stop locations
- int[] variableTabStops = null;
+ float[] variableTabStops = null;
if (spanned != null) {
TabStopSpan[] spans = getParagraphSpans(spanned, paraStart,
paraEnd, TabStopSpan.class);
if (spans.length > 0) {
- int[] stops = new int[spans.length];
+ float[] stops = new float[spans.length];
for (int i = 0; i < spans.length; i++) {
- stops[i] = spans[i].getTabStop();
+ stops[i] = (float) spans[i].getTabStop();
}
Arrays.sort(stops, 0, stops.length);
variableTabStops = stops;
@@ -1396,7 +1396,7 @@
private static final int TAB_MASK = 0x20000000;
private static final int HYPHEN_MASK = 0xFF;
- private static final int TAB_INCREMENT = 20; // same as Layout, but that's private
+ private static final float TAB_INCREMENT = 20; // same as Layout, but that's private
private static final char CHAR_NEW_LINE = '\n';
diff --git a/core/jni/android/graphics/text/LineBreaker.cpp b/core/jni/android/graphics/text/LineBreaker.cpp
index c23f1e9..a23f99a 100644
--- a/core/jni/android/graphics/text/LineBreaker.cpp
+++ b/core/jni/android/graphics/text/LineBreaker.cpp
@@ -80,13 +80,13 @@
jfloat firstWidth,
jint firstWidthLineCount,
jfloat restWidth,
- jintArray variableTabStops,
- jint defaultTabStop,
+ jfloatArray variableTabStops,
+ jfloat defaultTabStop,
jint indentsOffset) {
minikin::android::StaticLayoutNative* builder = toNative(nativePtr);
ScopedCharArrayRO text(env, javaText);
- ScopedNullableIntArrayRO tabStops(env, variableTabStops);
+ ScopedNullableFloatArrayRO tabStops(env, variableTabStops);
minikin::U16StringPiece u16Text(text.get(), length);
minikin::MeasuredText* measuredText = reinterpret_cast<minikin::MeasuredText*>(measuredTextPtr);
@@ -151,8 +151,8 @@
"F" // firstWidth
"I" // firstWidthLineCount
"F" // restWidth
- "[I" // variableTabStops
- "I" // defaultTabStop
+ "[F" // variableTabStops
+ "F" // defaultTabStop
"I" // indentsOffset
")J", (void*) nComputeLineBreaks},