PathEffect.cpp revision c9e22e9affec97a8c68f838de29dc7f685d9247b
10b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include <jni.h> 20b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "GraphicsJNI.h" 30b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 40b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "SkPathEffect.h" 50b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "SkCornerPathEffect.h" 60b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "SkDashPathEffect.h" 70b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "SkDiscretePathEffect.h" 80b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "Sk1DPathEffect.h" 90b167267bda99b68346045ccab14e810121d5de4Glenn Kasten#include "SkTemplates.h" 100b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 110b167267bda99b68346045ccab14e810121d5de4Glenn Kastenclass SkPathEffectGlue { 120b167267bda99b68346045ccab14e810121d5de4Glenn Kastenpublic: 130b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 140b167267bda99b68346045ccab14e810121d5de4Glenn Kasten static void destructor(JNIEnv* env, jobject, SkPathEffect* effect) { 150b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SkSafeUnref(effect); 160b167267bda99b68346045ccab14e810121d5de4Glenn Kasten } 170b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 180b167267bda99b68346045ccab14e810121d5de4Glenn Kasten static SkPathEffect* Compose_constructor(JNIEnv* env, jobject, 19979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten SkPathEffect* outer, SkPathEffect* inner) { 20979a3f8743646af9999a89dff9e13b972b7efd87Glenn Kasten return new SkComposePathEffect(outer, inner); 21ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 22daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten 23daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten static SkPathEffect* Sum_constructor(JNIEnv* env, jobject, 240b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SkPathEffect* first, SkPathEffect* second) { 25ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return new SkSumPathEffect(first, second); 26ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 277a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten 28ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten static SkPathEffect* Dash_constructor(JNIEnv* env, jobject, 29ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten jfloatArray intervalArray, float phase) { 30ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten AutoJavaFloatArray autoInterval(env, intervalArray); 31ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten int count = autoInterval.length() & ~1; // even number 32ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten float* values = autoInterval.ptr(); 33ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 34ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SkAutoSTMalloc<32, SkScalar> storage(count); 35ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SkScalar* intervals = storage.get(); 36ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten for (int i = 0; i < count; i++) { 37ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten intervals[i] = SkFloatToScalar(values[i]); 38ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 39ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return new SkDashPathEffect(intervals, count, SkFloatToScalar(phase)); 40ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 41ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 42ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten static SkPathEffect* OneD_constructor(JNIEnv* env, jobject, 43ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten const SkPath* shape, float advance, float phase, int style) { 44ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SkASSERT(shape != NULL); 45ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return new SkPath1DPathEffect(*shape, SkFloatToScalar(advance), 467a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten SkFloatToScalar(phase), (SkPath1DPathEffect::Style)style); 477a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten } 487a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten 49ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten static SkPathEffect* Corner_constructor(JNIEnv* env, jobject, float radius){ 50ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return new SkCornerPathEffect(SkFloatToScalar(radius)); 510b167267bda99b68346045ccab14e810121d5de4Glenn Kasten } 520b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 53ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten static SkPathEffect* Discrete_constructor(JNIEnv* env, jobject, 54daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten float length, float deviation) { 55daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten return new SkDiscretePathEffect(SkFloatToScalar(length), 560b167267bda99b68346045ccab14e810121d5de4Glenn Kasten SkFloatToScalar(deviation)); 57ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten } 58ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 597a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten}; 60ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 61ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten//////////////////////////////////////////////////////////////////////////////////////////////////////// 62ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 63ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenstatic JNINativeMethod gPathEffectMethods[] = { 64ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten { "nativeDestructor", "(I)V", (void*)SkPathEffectGlue::destructor } 65ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 66ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 67ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenstatic JNINativeMethod gComposePathEffectMethods[] = { 68ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten { "nativeCreate", "(II)I", (void*)SkPathEffectGlue::Compose_constructor } 69ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 70ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 71ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenstatic JNINativeMethod gSumPathEffectMethods[] = { 72ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten { "nativeCreate", "(II)I", (void*)SkPathEffectGlue::Sum_constructor } 73ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 74ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 75ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenstatic JNINativeMethod gDashPathEffectMethods[] = { 76ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten { "nativeCreate", "([FF)I", (void*)SkPathEffectGlue::Dash_constructor } 77ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 787a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten 797a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kastenstatic JNINativeMethod gPathDashPathEffectMethods[] = { 807a79f519d89eb0e1a5b3f4005484b16d6854d7e2Glenn Kasten { "nativeCreate", "(IFFI)I", (void*)SkPathEffectGlue::OneD_constructor } 81ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 82ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 830b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic JNINativeMethod gCornerPathEffectMethods[] = { 840b167267bda99b68346045ccab14e810121d5de4Glenn Kasten { "nativeCreate", "(F)I", (void*)SkPathEffectGlue::Corner_constructor } 85ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten}; 860b167267bda99b68346045ccab14e810121d5de4Glenn Kasten 870b167267bda99b68346045ccab14e810121d5de4Glenn Kastenstatic JNINativeMethod gDiscretePathEffectMethods[] = { 880b167267bda99b68346045ccab14e810121d5de4Glenn Kasten { "nativeCreate", "(FF)I", (void*)SkPathEffectGlue::Discrete_constructor } 890b167267bda99b68346045ccab14e810121d5de4Glenn Kasten}; 90ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 91ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten#include <android_runtime/AndroidRuntime.h> 92ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 93ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten#define REG(env, name, array) \ 94ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten result = android::AndroidRuntime::registerNativeMethods(env, name, array, \ 95ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten SK_ARRAY_COUNT(array)); \ 96ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten if (result < 0) return result 97ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 98ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenint register_android_graphics_PathEffect(JNIEnv* env); 99ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kastenint register_android_graphics_PathEffect(JNIEnv* env) 100ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten{ 101ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten int result; 102ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 103ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten REG(env, "android/graphics/PathEffect", gPathEffectMethods); 104ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten REG(env, "android/graphics/ComposePathEffect", gComposePathEffectMethods); 105ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten REG(env, "android/graphics/SumPathEffect", gSumPathEffectMethods); 106ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten REG(env, "android/graphics/DashPathEffect", gDashPathEffectMethods); 107b91e32605ecf39e34ad39936b1ee193bb4e30225Glenn Kasten REG(env, "android/graphics/PathDashPathEffect", gPathDashPathEffectMethods); 108ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten REG(env, "android/graphics/CornerPathEffect", gCornerPathEffectMethods); 109daf661248ff6ea2e21799e5114c78b7c1d49630eGlenn Kasten REG(env, "android/graphics/DiscretePathEffect", gDiscretePathEffectMethods); 110ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 111ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten return 0; 112ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten} 113ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten 114ed46c29d6a09112dbbf584c82953f63289596fd6Glenn Kasten