diff options
| author | TreeHugger Robot <treehugger-gerrit@google.com> | 2017-09-29 16:42:18 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2017-09-29 16:42:18 +0000 |
| commit | 9c99f3257c51c6d02aab9e9f1c18030ee6b15146 (patch) | |
| tree | 5d9ad3c84fe6706b76c54631fb72658da6823ad6 /core/java/android/text/StaticLayout.java | |
| parent | 0df0cd3c820680938188a2b1e70a37b3c5d0cdf9 (diff) | |
| parent | 1bee3335268a019fc19de943aa8fcfde33cf60ff (diff) | |
Merge "Fix StaticLayoutLineBreaker tests"
Diffstat (limited to 'core/java/android/text/StaticLayout.java')
| -rw-r--r-- | core/java/android/text/StaticLayout.java | 41 |
1 files changed, 27 insertions, 14 deletions
diff --git a/core/java/android/text/StaticLayout.java b/core/java/android/text/StaticLayout.java index b6911fe8cb29..e71ad5b21fcf 100644 --- a/core/java/android/text/StaticLayout.java +++ b/core/java/android/text/StaticLayout.java @@ -28,6 +28,7 @@ import android.text.style.LineHeightSpan; import android.text.style.MetricAffectingSpan; import android.text.style.TabStopSpan; import android.util.Log; +import android.util.Pair; import android.util.Pools.SynchronizedPool; import com.android.internal.util.ArrayUtils; @@ -439,29 +440,34 @@ public class StaticLayout extends Layout { * After all paragraphs, call finish() to release expensive buffers. */ - /* package */ float addStyleRun(TextPaint paint, int start, int end, boolean isRtl) { + private Pair<String, long[]> getLocaleAndHyphenatorIfChanged(TextPaint paint) { final LocaleList locales = paint.getTextLocales(); final String languageTags; long[] hyphenators; if (!locales.equals(mLocales)) { - languageTags = locales.toLanguageTags(); - hyphenators = getHyphenators(locales); + mLocales = locales; + return new Pair(locales.toLanguageTags(), getHyphenators(locales)); } else { // passing null means keep current locale. // TODO: move locale change detection to native. - languageTags = null; - hyphenators = null; + return new Pair(null, null); } + } + + /* package */ float addStyleRun(TextPaint paint, int start, int end, boolean isRtl) { + Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint); return nAddStyleRun(mNativePtr, paint.getNativeInstance(), start, end, isRtl, - languageTags, hyphenators); + locHyph.first, locHyph.second); } - /* package */ void addMeasuredRun(int start, int end, float[] widths) { - nAddMeasuredRun(mNativePtr, start, end, widths); + /* package */ void addMeasuredRun(TextPaint paint, int start, int end, float[] widths) { + Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint); + nAddMeasuredRun(mNativePtr, start, end, widths, locHyph.first, locHyph.second); } - /* package */ void addReplacementRun(int start, int end, float width) { - nAddReplacementRun(mNativePtr, start, end, width); + /* package */ void addReplacementRun(TextPaint paint, int start, int end, float width) { + Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint); + nAddReplacementRun(mNativePtr, start, end, width, locHyph.first, locHyph.second); } /** @@ -810,6 +816,9 @@ public class StaticLayout extends Layout { } } + // TODO: Move locale tracking code to native. + b.mLocales = null; // Reset the locale tracking. + nSetupParagraph(b.mNativePtr, chs, paraEnd - paraStart, firstWidth, firstWidthLineCount, restWidth, variableTabStops, TAB_INCREMENT, b.mBreakStrategy, b.mHyphenationFrequency, @@ -1539,14 +1548,18 @@ public class StaticLayout extends Layout { @IntRange(from = 0) int indentsOffset); private static native float nAddStyleRun( - /* non zero */ long nativePtr, /* non zero */ long nativePaint, + /* non-zero */ long nativePtr, /* non-zero */ long nativePaint, @IntRange(from = 0) int start, @IntRange(from = 0) int end, boolean isRtl, @Nullable String languageTags, @Nullable long[] hyphenators); - private static native void nAddMeasuredRun(long nativePtr, - int start, int end, float[] widths); + private static native void nAddMeasuredRun(/* non-zero */ long nativePtr, + @IntRange(from = 0) int start, @IntRange(from = 0) int end, @NonNull float[] widths, + @Nullable String languageTags, @Nullable long[] hyphenators); - private static native void nAddReplacementRun(long nativePtr, int start, int end, float width); + private static native void nAddReplacementRun(/* non-zero */ long nativePtr, + @IntRange(from = 0) int start, @IntRange(from = 0) int end, + @FloatRange(from = 0.0f) float width, @Nullable String languageTags, + @Nullable long[] hyphenators); private static native void nGetWidths(long nativePtr, float[] widths); |
