MaskFilter.cpp revision a04e555dc91b11ad833cb5db4a24e38082d1dc45
1#include "GraphicsJNI.h" 2#include "SkMaskFilter.h" 3#include "SkBlurMaskFilter.h" 4 5#include <jni.h> 6 7static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) { 8 if (NULL == ptr) { 9 doThrowIAE(env); 10 } 11} 12 13class SkMaskFilterGlue { 14public: 15 static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) { 16 SkSafeUnref(filter); 17 } 18 19 static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) { 20 SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius), 21 (SkBlurMaskFilter::BlurStyle)blurStyle); 22 ThrowIAE_IfNull(env, filter); 23 return filter; 24 } 25 26 static SkMaskFilter* createEmboss(JNIEnv* env, jobject, jfloatArray dirArray, float ambient, float specular, float radius) { 27 SkScalar direction[3]; 28 29 AutoJavaFloatArray autoDir(env, dirArray, 3); 30 float* values = autoDir.ptr(); 31 for (int i = 0; i < 3; i++) { 32 direction[i] = SkFloatToScalar(values[i]); 33 } 34 35 SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction, 36 SkFloatToScalar(ambient), 37 SkFloatToScalar(specular), 38 SkFloatToScalar(radius)); 39 ThrowIAE_IfNull(env, filter); 40 return filter; 41 } 42}; 43 44static JNINativeMethod gMaskFilterMethods[] = { 45 { "nativeDestructor", "(I)V", (void*)SkMaskFilterGlue::destructor } 46}; 47 48static JNINativeMethod gBlurMaskFilterMethods[] = { 49 { "nativeConstructor", "(FI)I", (void*)SkMaskFilterGlue::createBlur } 50}; 51 52static JNINativeMethod gEmbossMaskFilterMethods[] = { 53 { "nativeConstructor", "([FFFF)I", (void*)SkMaskFilterGlue::createEmboss } 54}; 55 56#include <android_runtime/AndroidRuntime.h> 57 58#define REG(env, name, array) \ 59 result = android::AndroidRuntime::registerNativeMethods(env, name, array, SK_ARRAY_COUNT(array)); \ 60 if (result < 0) return result 61 62int register_android_graphics_MaskFilter(JNIEnv* env); 63int register_android_graphics_MaskFilter(JNIEnv* env) 64{ 65 int result; 66 67 REG(env, "android/graphics/MaskFilter", gMaskFilterMethods); 68 REG(env, "android/graphics/BlurMaskFilter", gBlurMaskFilterMethods); 69 REG(env, "android/graphics/EmbossMaskFilter", gEmbossMaskFilterMethods); 70 71 return 0; 72} 73 74