@@ -521,6 +521,20 @@ static void renderText(OpenGLRenderer* renderer, const jchar* text, int count,
521521 renderer->drawText ((const char *) glyphs, bytesCount, glyphsCount, x, y, paint);
522522}
523523
524+ static void renderTextOnPath (OpenGLRenderer* renderer, const jchar* text, int count,
525+ SkPath* path, jfloat hOffset, jfloat vOffset, int flags, SkPaint* paint) {
526+ sp<TextLayoutValue> value = TextLayoutEngine::getInstance ().getValue (paint,
527+ text, 0 , count, count, flags);
528+ if (value == NULL ) {
529+ return ;
530+ }
531+ const jchar* glyphs = value->getGlyphs ();
532+ size_t glyphsCount = value->getGlyphsCount ();
533+ int bytesCount = glyphsCount * sizeof (jchar);
534+ renderer->drawTextOnPath ((const char *) glyphs, bytesCount, glyphsCount, path,
535+ hOffset, vOffset, paint);
536+ }
537+
524538static void renderTextRun (OpenGLRenderer* renderer, const jchar* text,
525539 jint start, jint count, jint contextCount, jfloat x, jfloat y,
526540 int flags, SkPaint* paint) {
@@ -551,6 +565,24 @@ static void android_view_GLES20Canvas_drawText(JNIEnv* env, jobject clazz,
551565 env->ReleaseStringChars (text, textArray);
552566}
553567
568+ static void android_view_GLES20Canvas_drawTextArrayOnPath (JNIEnv* env, jobject clazz,
569+ OpenGLRenderer* renderer, jcharArray text, jint index, jint count,
570+ SkPath* path, jfloat hOffset, jfloat vOffset, jint flags, SkPaint* paint) {
571+ jchar* textArray = env->GetCharArrayElements (text, NULL );
572+ renderTextOnPath (renderer, textArray + index, count, path,
573+ hOffset, vOffset, flags, paint);
574+ env->ReleaseCharArrayElements (text, textArray, JNI_ABORT);
575+ }
576+
577+ static void android_view_GLES20Canvas_drawTextOnPath (JNIEnv* env, jobject clazz,
578+ OpenGLRenderer* renderer, jstring text, jint start, jint end,
579+ SkPath* path, jfloat hOffset, jfloat vOffset, jint flags, SkPaint* paint) {
580+ const jchar* textArray = env->GetStringChars (text, NULL );
581+ renderTextOnPath (renderer, textArray + start, end - start, path,
582+ hOffset, vOffset, flags, paint);
583+ env->ReleaseStringChars (text, textArray);
584+ }
585+
554586static void android_view_GLES20Canvas_drawTextRunArray (JNIEnv* env, jobject clazz,
555587 OpenGLRenderer* renderer, jcharArray text, jint index, jint count,
556588 jint contextIndex, jint contextCount, jfloat x, jfloat y, jint dirFlags,
@@ -885,6 +917,10 @@ static JNINativeMethod gMethods[] = {
885917 { " nDrawText" , " (ILjava/lang/String;IIFFII)V" ,
886918 (void *) android_view_GLES20Canvas_drawText },
887919
920+ { " nDrawTextOnPath" , " (I[CIIIFFII)V" , (void *) android_view_GLES20Canvas_drawTextArrayOnPath },
921+ { " nDrawTextOnPath" , " (ILjava/lang/String;IIIFFII)V" ,
922+ (void *) android_view_GLES20Canvas_drawTextOnPath },
923+
888924 { " nDrawTextRun" , " (I[CIIIIFFII)V" , (void *) android_view_GLES20Canvas_drawTextRunArray },
889925 { " nDrawTextRun" , " (ILjava/lang/String;IIIIFFII)V" ,
890926 (void *) android_view_GLES20Canvas_drawTextRun },
0 commit comments