Merge "Pass advances to Minikin for calculating getTextRunCursor"

This commit is contained in:
TreeHugger Robot
2017-03-15 19:53:12 +00:00
committed by Android (Google) Code Review
2 changed files with 26 additions and 18 deletions

View File

@@ -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;
}
@@ -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},

View File

@@ -2294,7 +2294,7 @@ public class Paint {
throw new IndexOutOfBoundsException();
}
return nGetTextRunCursor(mNativePaint, text,
return nGetTextRunCursor(mNativePaint, mNativeTypeface, text,
contextStart, contextLength, dir, offset, cursorOpt);
}
@@ -2380,7 +2380,7 @@ public class Paint {
throw new IndexOutOfBoundsException();
}
return nGetTextRunCursor(mNativePaint, text,
return nGetTextRunCursor(mNativePaint, mNativeTypeface, text,
contextStart, contextEnd, dir, offset, cursorOpt);
}
@@ -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);