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