Merge "Pass advances to Minikin for calculating getTextRunCursor"
This commit is contained in:
committed by
Android (Google) Code Review
commit
2bd530e156
@@ -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},
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user