19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "GraphicsJNI.h" 260126efd7d905ca24822765c6dafac17fef278abBen Wagner#include "Sk1DPathEffect.h" 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkCornerPathEffect.h" 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkDashPathEffect.h" 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkDiscretePathEffect.h" 660126efd7d905ca24822765c6dafac17fef278abBen Wagner#include "SkPathEffect.h" 760126efd7d905ca24822765c6dafac17fef278abBen Wagner#include "core_jni_helpers.h" 860126efd7d905ca24822765c6dafac17fef278abBen Wagner 960126efd7d905ca24822765c6dafac17fef278abBen Wagner#include <jni.h> 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SkPathEffectGlue { 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static void destructor(JNIEnv* env, jobject, jlong effectHandle) { 1536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkPathEffect* effect = reinterpret_cast<SkPathEffect*>(effectHandle); 166062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(effect); 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong Compose_constructor(JNIEnv* env, jobject, 2036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong outerHandle, jlong innerHandle) { 2136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkPathEffect* outer = reinterpret_cast<SkPathEffect*>(outerHandle); 2236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkPathEffect* inner = reinterpret_cast<SkPathEffect*>(innerHandle); 23cc11f15f76a62ded3e403cb2bc818c6aa5bf261cLeon Scroggins SkPathEffect* effect = SkComposePathEffect::Create(outer, inner); 2436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 264cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 2736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong Sum_constructor(JNIEnv* env, jobject, 2836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong firstHandle, jlong secondHandle) { 2936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkPathEffect* first = reinterpret_cast<SkPathEffect*>(firstHandle); 3036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat SkPathEffect* second = reinterpret_cast<SkPathEffect*>(secondHandle); 31cc11f15f76a62ded3e403cb2bc818c6aa5bf261cLeon Scroggins SkPathEffect* effect = SkSumPathEffect::Create(first, second); 3236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 344cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 3536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong Dash_constructor(JNIEnv* env, jobject, 3636bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jfloatArray intervalArray, jfloat phase) { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray autoInterval(env, intervalArray); 382e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III int count = autoInterval.length() & ~1; // even number 392e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III#ifdef SK_SCALAR_IS_FLOAT 402e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkScalar* intervals = autoInterval.ptr(); 412e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III#else 422e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III #error Need to convert float array to SkScalar array before calling the following function. 432e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III#endif 442e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkPathEffect* effect = SkDashPathEffect::Create(intervals, count, phase); 4536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 474cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 4836bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong OneD_constructor(JNIEnv* env, jobject, 4936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jlong shapeHandle, jfloat advance, jfloat phase, jint style) { 5036bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat const SkPath* shape = reinterpret_cast<SkPath*>(shapeHandle); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(shape != NULL); 522e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkPathEffect* effect = SkPath1DPathEffect::Create(*shape, advance, phase, 532e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III (SkPath1DPathEffect::Style)style); 5436bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 564cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 5736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong Corner_constructor(JNIEnv* env, jobject, jfloat radius){ 582e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkPathEffect* effect = SkCornerPathEffect::Create(radius); 5936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 614cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 6236bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat static jlong Discrete_constructor(JNIEnv* env, jobject, 6336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat jfloat length, jfloat deviation) { 642e0103eb340822f9d580c1aa8492bae8394b8243Leon Scroggins III SkPathEffect* effect = SkDiscretePathEffect::Create(length, deviation); 6536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat return reinterpret_cast<jlong>(effect); 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 674cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//////////////////////////////////////////////////////////////////////////////////////////////////////// 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7276f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gPathEffectMethods[] = { 7336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeDestructor", "(J)V", (void*)SkPathEffectGlue::destructor } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 7676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gComposePathEffectMethods[] = { 7736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "(JJ)J", (void*)SkPathEffectGlue::Compose_constructor } 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8076f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gSumPathEffectMethods[] = { 8136bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "(JJ)J", (void*)SkPathEffectGlue::Sum_constructor } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8476f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gDashPathEffectMethods[] = { 8536bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "([FF)J", (void*)SkPathEffectGlue::Dash_constructor } 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 8876f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gPathDashPathEffectMethods[] = { 8936bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "(JFFI)J", (void*)SkPathEffectGlue::OneD_constructor } 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9276f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gCornerPathEffectMethods[] = { 9336bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "(F)J", (void*)SkPathEffectGlue::Corner_constructor } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 9676f6a86de25e1bf74717e047e55fd44b089673f3Daniel Micaystatic const JNINativeMethod gDiscretePathEffectMethods[] = { 9736bef0bf30d6bae48cf3837df351075ca4fce654Ashok Bhat { "nativeCreate", "(FF)J", (void*)SkPathEffectGlue::Discrete_constructor } 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_PathEffect(JNIEnv* env) 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 102ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/PathEffect", gPathEffectMethods, 103ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe NELEM(gPathEffectMethods)); 104ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/ComposePathEffect", 105ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe gComposePathEffectMethods, NELEM(gComposePathEffectMethods)); 106ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/SumPathEffect", gSumPathEffectMethods, 107ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe NELEM(gSumPathEffectMethods)); 108ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/DashPathEffect", gDashPathEffectMethods, 109ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe NELEM(gDashPathEffectMethods)); 110ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/PathDashPathEffect", 111ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe gPathDashPathEffectMethods, NELEM(gPathDashPathEffectMethods)); 112ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/CornerPathEffect", 113ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe gCornerPathEffectMethods, NELEM(gCornerPathEffectMethods)); 114ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe android::RegisterMethodsOrDie(env, "android/graphics/DiscretePathEffect", 115ed6b9dff563c5e22f040ff37e12c0d771e0478aeAndreas Gampe gDiscretePathEffectMethods, NELEM(gDiscretePathEffectMethods)); 1164cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 119