Loading core/java/android/text/MeasuredText.java +8 −22 Original line number Diff line number Diff line Loading @@ -165,40 +165,26 @@ class MeasuredText { paint.getFontMetricsInt(fm); } int p = mPos; final int p = mPos; mPos = p + len; // try to do widths measurement in native code, but use Java if paint has been subclassed // FIXME: may want to eliminate special case for subclass float[] widths = null; if (mBuilder == null || paint.getClass() != TextPaint.class) { widths = mWidths; } if (mEasy) { boolean isRtl = mDir != Layout.DIR_LEFT_TO_RIGHT; float width = 0; if (widths != null) { width = paint.getTextRunAdvances(mChars, p, len, p, len, isRtl, widths, p); if (mBuilder != null) { mBuilder.addMeasuredRun(paint, p, p + len, widths); } final boolean isRtl = mDir != Layout.DIR_LEFT_TO_RIGHT; if (mBuilder == null) { return paint.getTextRunAdvances(mChars, p, len, p, len, isRtl, mWidths, p); } else { width = mBuilder.addStyleRun(paint, p, p + len, isRtl); return mBuilder.addStyleRun(paint, p, p + len, isRtl); } return width; } float totalAdvance = 0; int level = mLevels[p]; for (int q = p, i = p + 1, e = p + len;; ++i) { if (i == e || mLevels[i] != level) { boolean isRtl = (level & 0x1) != 0; if (widths != null) { final boolean isRtl = (level & 0x1) != 0; if (mBuilder == null) { totalAdvance += paint.getTextRunAdvances(mChars, q, i - q, q, i - q, isRtl, widths, q); if (mBuilder != null) { mBuilder.addMeasuredRun(paint, q, i, widths); } paint.getTextRunAdvances(mChars, q, i - q, q, i - q, isRtl, mWidths, q); } else { totalAdvance += mBuilder.addStyleRun(paint, q, i, isRtl); } Loading core/java/android/text/StaticLayout.java +0 −10 Original line number Diff line number Diff line Loading @@ -431,7 +431,6 @@ public class StaticLayout extends Layout { * Then, for each run within the paragraph: * - one of the following, depending on the type of run: * + addStyleRun (a text run, to be measured in native code) * + addMeasuredRun (a run already measured in Java, passed into native code) * + addReplacementRun (a replacement run, width is given) * * After measurement, nGetWidths() is valid if the widths are needed (eg for ellipsis). Loading Loading @@ -460,11 +459,6 @@ public class StaticLayout extends Layout { locHyph.first, locHyph.second); } /* 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(TextPaint paint, int start, int end, float width) { Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint); nAddReplacementRun(mNativePtr, start, end, width, locHyph.first, locHyph.second); Loading Loading @@ -1552,10 +1546,6 @@ public class StaticLayout extends Layout { @IntRange(from = 0) int start, @IntRange(from = 0) int end, boolean isRtl, @Nullable String languageTags, @Nullable long[] hyphenators); 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(/* non-zero */ long nativePtr, @IntRange(from = 0) int start, @IntRange(from = 0) int end, @FloatRange(from = 0.0f) float width, @Nullable String languageTags, Loading core/jni/android_text_StaticLayout.cpp +0 −12 Original line number Diff line number Diff line Loading @@ -250,17 +250,6 @@ static jfloat nAddStyleRun(JNIEnv* env, jclass, jlong nativePtr, jlong nativePai return result; } // Accept width measurements for the run, passed in from Java static void nAddMeasuredRun(JNIEnv* env, jclass, jlong nativePtr, jint start, jint end, jfloatArray widths, jstring langTags, jlongArray hyphenators) { minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr); env->GetFloatArrayRegion(widths, start, end - start, b->charWidths() + start); ScopedNullableUtfString langTagsString(env, langTags); b->addStyleRun(nullptr, nullptr, minikin::FontStyle{}, start, end, false, langTagsString.get(), makeHyphenators(env, hyphenators)); } static void nAddReplacementRun(JNIEnv* env, jclass, jlong nativePtr, jint start, jint end, jfloat width, jstring langTags, jlongArray hyphenators) { minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr); Loading @@ -280,7 +269,6 @@ static const JNINativeMethod gMethods[] = { {"nFinishBuilder", "(J)V", (void*) nFinishBuilder}, {"nSetupParagraph", "(J[CIFIF[IIIIZ[I[I[II)V", (void*) nSetupParagraph}, {"nAddStyleRun", "(JJIIZLjava/lang/String;[J)F", (void*) nAddStyleRun}, {"nAddMeasuredRun", "(JII[FLjava/lang/String;[J)V", (void*) nAddMeasuredRun}, {"nAddReplacementRun", "(JIIFLjava/lang/String;[J)V", (void*) nAddReplacementRun}, {"nGetWidths", "(J[F)V", (void*) nGetWidths}, {"nComputeLineBreaks", "(JLandroid/text/StaticLayout$LineBreaks;[I[F[F[F[II)I", Loading Loading
core/java/android/text/MeasuredText.java +8 −22 Original line number Diff line number Diff line Loading @@ -165,40 +165,26 @@ class MeasuredText { paint.getFontMetricsInt(fm); } int p = mPos; final int p = mPos; mPos = p + len; // try to do widths measurement in native code, but use Java if paint has been subclassed // FIXME: may want to eliminate special case for subclass float[] widths = null; if (mBuilder == null || paint.getClass() != TextPaint.class) { widths = mWidths; } if (mEasy) { boolean isRtl = mDir != Layout.DIR_LEFT_TO_RIGHT; float width = 0; if (widths != null) { width = paint.getTextRunAdvances(mChars, p, len, p, len, isRtl, widths, p); if (mBuilder != null) { mBuilder.addMeasuredRun(paint, p, p + len, widths); } final boolean isRtl = mDir != Layout.DIR_LEFT_TO_RIGHT; if (mBuilder == null) { return paint.getTextRunAdvances(mChars, p, len, p, len, isRtl, mWidths, p); } else { width = mBuilder.addStyleRun(paint, p, p + len, isRtl); return mBuilder.addStyleRun(paint, p, p + len, isRtl); } return width; } float totalAdvance = 0; int level = mLevels[p]; for (int q = p, i = p + 1, e = p + len;; ++i) { if (i == e || mLevels[i] != level) { boolean isRtl = (level & 0x1) != 0; if (widths != null) { final boolean isRtl = (level & 0x1) != 0; if (mBuilder == null) { totalAdvance += paint.getTextRunAdvances(mChars, q, i - q, q, i - q, isRtl, widths, q); if (mBuilder != null) { mBuilder.addMeasuredRun(paint, q, i, widths); } paint.getTextRunAdvances(mChars, q, i - q, q, i - q, isRtl, mWidths, q); } else { totalAdvance += mBuilder.addStyleRun(paint, q, i, isRtl); } Loading
core/java/android/text/StaticLayout.java +0 −10 Original line number Diff line number Diff line Loading @@ -431,7 +431,6 @@ public class StaticLayout extends Layout { * Then, for each run within the paragraph: * - one of the following, depending on the type of run: * + addStyleRun (a text run, to be measured in native code) * + addMeasuredRun (a run already measured in Java, passed into native code) * + addReplacementRun (a replacement run, width is given) * * After measurement, nGetWidths() is valid if the widths are needed (eg for ellipsis). Loading Loading @@ -460,11 +459,6 @@ public class StaticLayout extends Layout { locHyph.first, locHyph.second); } /* 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(TextPaint paint, int start, int end, float width) { Pair<String, long[]> locHyph = getLocaleAndHyphenatorIfChanged(paint); nAddReplacementRun(mNativePtr, start, end, width, locHyph.first, locHyph.second); Loading Loading @@ -1552,10 +1546,6 @@ public class StaticLayout extends Layout { @IntRange(from = 0) int start, @IntRange(from = 0) int end, boolean isRtl, @Nullable String languageTags, @Nullable long[] hyphenators); 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(/* non-zero */ long nativePtr, @IntRange(from = 0) int start, @IntRange(from = 0) int end, @FloatRange(from = 0.0f) float width, @Nullable String languageTags, Loading
core/jni/android_text_StaticLayout.cpp +0 −12 Original line number Diff line number Diff line Loading @@ -250,17 +250,6 @@ static jfloat nAddStyleRun(JNIEnv* env, jclass, jlong nativePtr, jlong nativePai return result; } // Accept width measurements for the run, passed in from Java static void nAddMeasuredRun(JNIEnv* env, jclass, jlong nativePtr, jint start, jint end, jfloatArray widths, jstring langTags, jlongArray hyphenators) { minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr); env->GetFloatArrayRegion(widths, start, end - start, b->charWidths() + start); ScopedNullableUtfString langTagsString(env, langTags); b->addStyleRun(nullptr, nullptr, minikin::FontStyle{}, start, end, false, langTagsString.get(), makeHyphenators(env, hyphenators)); } static void nAddReplacementRun(JNIEnv* env, jclass, jlong nativePtr, jint start, jint end, jfloat width, jstring langTags, jlongArray hyphenators) { minikin::LineBreaker* b = reinterpret_cast<minikin::LineBreaker*>(nativePtr); Loading @@ -280,7 +269,6 @@ static const JNINativeMethod gMethods[] = { {"nFinishBuilder", "(J)V", (void*) nFinishBuilder}, {"nSetupParagraph", "(J[CIFIF[IIIIZ[I[I[II)V", (void*) nSetupParagraph}, {"nAddStyleRun", "(JJIIZLjava/lang/String;[J)F", (void*) nAddStyleRun}, {"nAddMeasuredRun", "(JII[FLjava/lang/String;[J)V", (void*) nAddMeasuredRun}, {"nAddReplacementRun", "(JIIFLjava/lang/String;[J)V", (void*) nAddReplacementRun}, {"nGetWidths", "(J[F)V", (void*) nGetWidths}, {"nComputeLineBreaks", "(JLandroid/text/StaticLayout$LineBreaks;[I[F[F[F[II)I", Loading