PathEffect.cpp revision 4cb1753ec6e90d7e747880c599dc1c164a568cf3
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <jni.h> 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "GraphicsJNI.h" 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkPathEffect.h" 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkCornerPathEffect.h" 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkDashPathEffect.h" 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkDiscretePathEffect.h" 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "Sk1DPathEffect.h" 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SkTemplates.h" 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass SkPathEffectGlue { 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic: 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void destructor(JNIEnv* env, jobject, SkPathEffect* effect) { 156062c5912dc79704b489fc8c289b78a400ed05eeDerek Sollenberger SkSafeUnref(effect); 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* Compose_constructor(JNIEnv* env, jobject, 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPathEffect* outer, SkPathEffect* inner) { 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkComposePathEffect(outer, inner); 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 224cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* Sum_constructor(JNIEnv* env, jobject, 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkPathEffect* first, SkPathEffect* second) { 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkSumPathEffect(first, second); 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 274cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* Dash_constructor(JNIEnv* env, jobject, 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project jfloatArray intervalArray, float phase) { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project AutoJavaFloatArray autoInterval(env, intervalArray); 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int count = autoInterval.length() & ~1; // even number 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float* values = autoInterval.ptr(); 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkAutoSTMalloc<32, SkScalar> storage(count); 354cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes SkScalar* intervals = storage.get(); 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project for (int i = 0; i < count; i++) { 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project intervals[i] = SkFloatToScalar(values[i]); 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkDashPathEffect(intervals, count, SkFloatToScalar(phase)); 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 414cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* OneD_constructor(JNIEnv* env, jobject, 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const SkPath* shape, float advance, float phase, int style) { 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkASSERT(shape != NULL); 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkPath1DPathEffect(*shape, SkFloatToScalar(advance), 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(phase), (SkPath1DPathEffect::Style)style); 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 484cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* Corner_constructor(JNIEnv* env, jobject, float radius){ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkCornerPathEffect(SkFloatToScalar(radius)); 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 524cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static SkPathEffect* Discrete_constructor(JNIEnv* env, jobject, 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project float length, float deviation) { 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return new SkDiscretePathEffect(SkFloatToScalar(length), 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SkFloatToScalar(deviation)); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 584cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project//////////////////////////////////////////////////////////////////////////////////////////////////////// 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gPathEffectMethods[] = { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeDestructor", "(I)V", (void*)SkPathEffectGlue::destructor } 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gComposePathEffectMethods[] = { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "(II)I", (void*)SkPathEffectGlue::Compose_constructor } 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gSumPathEffectMethods[] = { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "(II)I", (void*)SkPathEffectGlue::Sum_constructor } 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gDashPathEffectMethods[] = { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "([FF)I", (void*)SkPathEffectGlue::Dash_constructor } 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gPathDashPathEffectMethods[] = { 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "(IFFI)I", (void*)SkPathEffectGlue::OneD_constructor } 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gCornerPathEffectMethods[] = { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "(F)I", (void*)SkPathEffectGlue::Corner_constructor } 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic JNINativeMethod gDiscretePathEffectMethods[] = { 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project { "nativeCreate", "(FF)I", (void*)SkPathEffectGlue::Discrete_constructor } 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <android_runtime/AndroidRuntime.h> 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define REG(env, name, array) \ 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project result = android::AndroidRuntime::registerNativeMethods(env, name, array, \ 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project SK_ARRAY_COUNT(array)); \ 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (result < 0) return result 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint register_android_graphics_PathEffect(JNIEnv* env) 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int result; 1014cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/PathEffect", gPathEffectMethods); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/ComposePathEffect", gComposePathEffectMethods); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/SumPathEffect", gSumPathEffectMethods); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/DashPathEffect", gDashPathEffectMethods); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/PathDashPathEffect", gPathDashPathEffectMethods); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/CornerPathEffect", gCornerPathEffectMethods); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project REG(env, "android/graphics/DiscretePathEffect", gDiscretePathEffectMethods); 1094cb1753ec6e90d7e747880c599dc1c164a568cf3Elliott Hughes 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 112