Loading core/jni/android/graphics/Paint.cpp +22 −14 Original line number Diff line number Diff line Loading @@ -239,30 +239,38 @@ namespace PaintGlue { return result; } static jint doTextRunCursor(JNIEnv *env, Paint* paint, const jchar *text, jint start, jint count, jint flags, jint offset, jint opt) { static jint doTextRunCursor(JNIEnv *env, Paint* paint, Typeface* typeface, const jchar *text, jint start, jint count, jint dir, jint offset, jint opt) { minikin::GraphemeBreak::MoveOpt moveOpt = minikin::GraphemeBreak::MoveOpt(opt); size_t result = minikin::GraphemeBreak::getTextRunCursor(text, start, count, offset, moveOpt); int bidiFlags = dir == 1 ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR; std::unique_ptr<float[]> advancesArray(new float[count]); MinikinUtils::measureText(paint, bidiFlags, typeface, text, start, count, start + count, advancesArray.get()); size_t result = minikin::GraphemeBreak::getTextRunCursor(advancesArray.get(), text, start, count, offset, moveOpt); return static_cast<jint>(result); } static jint getTextRunCursor___C(JNIEnv* env, jobject clazz, jlong paintHandle, jcharArray text, jint contextStart, jint contextCount, jint dir, jint offset, jint cursorOpt) { static jint getTextRunCursor___C(JNIEnv* env, jobject clazz, jlong paintHandle, jlong typefaceHandle, jcharArray text, jint contextStart, jint contextCount, jint dir, jint offset, jint cursorOpt) { Paint* paint = reinterpret_cast<Paint*>(paintHandle); Typeface* typeface = reinterpret_cast<Typeface*>(typefaceHandle); jchar* textArray = env->GetCharArrayElements(text, nullptr); jint result = doTextRunCursor(env, paint, textArray, contextStart, contextCount, dir, offset, cursorOpt); jint result = doTextRunCursor(env, paint, typeface, textArray, contextStart, contextCount, dir, offset, cursorOpt); env->ReleaseCharArrayElements(text, textArray, JNI_ABORT); return result; } static jint getTextRunCursor__String(JNIEnv* env, jobject clazz, jlong paintHandle, jstring text, jint contextStart, jint contextEnd, jint dir, jint offset, jint cursorOpt) { static jint getTextRunCursor__String(JNIEnv* env, jobject clazz, jlong paintHandle, jlong typefaceHandle, jstring text, jint contextStart, jint contextEnd, jint dir, jint offset, jint cursorOpt) { Paint* paint = reinterpret_cast<Paint*>(paintHandle); Typeface* typeface = reinterpret_cast<Typeface*>(typefaceHandle); const jchar* textArray = env->GetStringChars(text, nullptr); jint result = doTextRunCursor(env, paint, textArray, contextStart, contextEnd - contextStart, dir, offset, cursorOpt); jint result = doTextRunCursor(env, paint, typeface, textArray, contextStart, contextEnd - contextStart, dir, offset, cursorOpt); env->ReleaseStringChars(text, textArray); return result; } Loading Loading @@ -983,8 +991,8 @@ static const JNINativeMethod methods[] = { {"nGetTextAdvances","(JJLjava/lang/String;IIIII[FI)F", (void*) PaintGlue::getTextAdvances__StringIIIII_FI}, {"nGetTextRunCursor", "(J[CIIIII)I", (void*) PaintGlue::getTextRunCursor___C}, {"nGetTextRunCursor", "(JLjava/lang/String;IIIII)I", {"nGetTextRunCursor", "(JJ[CIIIII)I", (void*) PaintGlue::getTextRunCursor___C}, {"nGetTextRunCursor", "(JJLjava/lang/String;IIIII)I", (void*) PaintGlue::getTextRunCursor__String}, {"nGetTextPath", "(JJI[CIIFFJ)V", (void*) PaintGlue::getTextPath___C}, {"nGetTextPath", "(JJILjava/lang/String;IIFFJ)V", (void*) PaintGlue::getTextPath__String}, Loading graphics/java/android/graphics/Paint.java +4 −4 Original line number Diff line number Diff line Loading @@ -2294,7 +2294,7 @@ public class Paint { throw new IndexOutOfBoundsException(); } return nGetTextRunCursor(mNativePaint, text, return nGetTextRunCursor(mNativePaint, mNativeTypeface, text, contextStart, contextLength, dir, offset, cursorOpt); } Loading Loading @@ -2380,7 +2380,7 @@ public class Paint { throw new IndexOutOfBoundsException(); } return nGetTextRunCursor(mNativePaint, text, return nGetTextRunCursor(mNativePaint, mNativeTypeface, text, contextStart, contextEnd, dir, offset, cursorOpt); } Loading Loading @@ -2686,9 +2686,9 @@ public class Paint { private static native float nGetTextAdvances(long paintPtr, long typefacePtr, String text, int start, int end, int contextStart, int contextEnd, int bidiFlags, float[] advances, int advancesIndex); private native int nGetTextRunCursor(long paintPtr, char[] text, private native int nGetTextRunCursor(long paintPtr, long typefacePtr, char[] text, int contextStart, int contextLength, int dir, int offset, int cursorOpt); private native int nGetTextRunCursor(long paintPtr, String text, private native int nGetTextRunCursor(long paintPtr, long typefacePtr, String text, int contextStart, int contextEnd, int dir, int offset, int cursorOpt); private static native void nGetTextPath(long paintPtr, long typefacePtr, int bidiFlags, char[] text, int index, int count, float x, float y, long path); Loading Loading
core/jni/android/graphics/Paint.cpp +22 −14 Original line number Diff line number Diff line Loading @@ -239,30 +239,38 @@ namespace PaintGlue { return result; } static jint doTextRunCursor(JNIEnv *env, Paint* paint, const jchar *text, jint start, jint count, jint flags, jint offset, jint opt) { static jint doTextRunCursor(JNIEnv *env, Paint* paint, Typeface* typeface, const jchar *text, jint start, jint count, jint dir, jint offset, jint opt) { minikin::GraphemeBreak::MoveOpt moveOpt = minikin::GraphemeBreak::MoveOpt(opt); size_t result = minikin::GraphemeBreak::getTextRunCursor(text, start, count, offset, moveOpt); int bidiFlags = dir == 1 ? minikin::kBidi_Force_RTL : minikin::kBidi_Force_LTR; std::unique_ptr<float[]> advancesArray(new float[count]); MinikinUtils::measureText(paint, bidiFlags, typeface, text, start, count, start + count, advancesArray.get()); size_t result = minikin::GraphemeBreak::getTextRunCursor(advancesArray.get(), text, start, count, offset, moveOpt); return static_cast<jint>(result); } static jint getTextRunCursor___C(JNIEnv* env, jobject clazz, jlong paintHandle, jcharArray text, jint contextStart, jint contextCount, jint dir, jint offset, jint cursorOpt) { static jint getTextRunCursor___C(JNIEnv* env, jobject clazz, jlong paintHandle, jlong typefaceHandle, jcharArray text, jint contextStart, jint contextCount, jint dir, jint offset, jint cursorOpt) { Paint* paint = reinterpret_cast<Paint*>(paintHandle); Typeface* typeface = reinterpret_cast<Typeface*>(typefaceHandle); jchar* textArray = env->GetCharArrayElements(text, nullptr); jint result = doTextRunCursor(env, paint, textArray, contextStart, contextCount, dir, offset, cursorOpt); jint result = doTextRunCursor(env, paint, typeface, textArray, contextStart, contextCount, dir, offset, cursorOpt); env->ReleaseCharArrayElements(text, textArray, JNI_ABORT); return result; } static jint getTextRunCursor__String(JNIEnv* env, jobject clazz, jlong paintHandle, jstring text, jint contextStart, jint contextEnd, jint dir, jint offset, jint cursorOpt) { static jint getTextRunCursor__String(JNIEnv* env, jobject clazz, jlong paintHandle, jlong typefaceHandle, jstring text, jint contextStart, jint contextEnd, jint dir, jint offset, jint cursorOpt) { Paint* paint = reinterpret_cast<Paint*>(paintHandle); Typeface* typeface = reinterpret_cast<Typeface*>(typefaceHandle); const jchar* textArray = env->GetStringChars(text, nullptr); jint result = doTextRunCursor(env, paint, textArray, contextStart, contextEnd - contextStart, dir, offset, cursorOpt); jint result = doTextRunCursor(env, paint, typeface, textArray, contextStart, contextEnd - contextStart, dir, offset, cursorOpt); env->ReleaseStringChars(text, textArray); return result; } Loading Loading @@ -983,8 +991,8 @@ static const JNINativeMethod methods[] = { {"nGetTextAdvances","(JJLjava/lang/String;IIIII[FI)F", (void*) PaintGlue::getTextAdvances__StringIIIII_FI}, {"nGetTextRunCursor", "(J[CIIIII)I", (void*) PaintGlue::getTextRunCursor___C}, {"nGetTextRunCursor", "(JLjava/lang/String;IIIII)I", {"nGetTextRunCursor", "(JJ[CIIIII)I", (void*) PaintGlue::getTextRunCursor___C}, {"nGetTextRunCursor", "(JJLjava/lang/String;IIIII)I", (void*) PaintGlue::getTextRunCursor__String}, {"nGetTextPath", "(JJI[CIIFFJ)V", (void*) PaintGlue::getTextPath___C}, {"nGetTextPath", "(JJILjava/lang/String;IIFFJ)V", (void*) PaintGlue::getTextPath__String}, Loading
graphics/java/android/graphics/Paint.java +4 −4 Original line number Diff line number Diff line Loading @@ -2294,7 +2294,7 @@ public class Paint { throw new IndexOutOfBoundsException(); } return nGetTextRunCursor(mNativePaint, text, return nGetTextRunCursor(mNativePaint, mNativeTypeface, text, contextStart, contextLength, dir, offset, cursorOpt); } Loading Loading @@ -2380,7 +2380,7 @@ public class Paint { throw new IndexOutOfBoundsException(); } return nGetTextRunCursor(mNativePaint, text, return nGetTextRunCursor(mNativePaint, mNativeTypeface, text, contextStart, contextEnd, dir, offset, cursorOpt); } Loading Loading @@ -2686,9 +2686,9 @@ public class Paint { private static native float nGetTextAdvances(long paintPtr, long typefacePtr, String text, int start, int end, int contextStart, int contextEnd, int bidiFlags, float[] advances, int advancesIndex); private native int nGetTextRunCursor(long paintPtr, char[] text, private native int nGetTextRunCursor(long paintPtr, long typefacePtr, char[] text, int contextStart, int contextLength, int dir, int offset, int cursorOpt); private native int nGetTextRunCursor(long paintPtr, String text, private native int nGetTextRunCursor(long paintPtr, long typefacePtr, String text, int contextStart, int contextEnd, int dir, int offset, int cursorOpt); private static native void nGetTextPath(long paintPtr, long typefacePtr, int bidiFlags, char[] text, int index, int count, float x, float y, long path); Loading