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