blob: 05a6d47579946307fc5df73c36d09b3ff49cfe2f [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001#include "GraphicsJNI.h"
2#include "SkMaskFilter.h"
3#include "SkBlurMaskFilter.h"
4
5#include <jni.h>
6
Mike Reeda04e5552009-07-30 11:05:57 -04007static void ThrowIAE_IfNull(JNIEnv* env, void* ptr) {
8 if (NULL == ptr) {
9 doThrowIAE(env);
10 }
11}
12
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080013class SkMaskFilterGlue {
14public:
15 static void destructor(JNIEnv* env, jobject, SkMaskFilter* filter) {
Mike Reeda04e5552009-07-30 11:05:57 -040016 SkSafeUnref(filter);
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080017 }
18
19 static SkMaskFilter* createBlur(JNIEnv* env, jobject, float radius, int blurStyle) {
Mike Reeda04e5552009-07-30 11:05:57 -040020 SkMaskFilter* filter = SkBlurMaskFilter::Create(SkFloatToScalar(radius),
21 (SkBlurMaskFilter::BlurStyle)blurStyle);
22 ThrowIAE_IfNull(env, filter);
23 return filter;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080024 }
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
Mike Reeda04e5552009-07-30 11:05:57 -040035 SkMaskFilter* filter = SkBlurMaskFilter::CreateEmboss(direction,
36 SkFloatToScalar(ambient),
37 SkFloatToScalar(specular),
38 SkFloatToScalar(radius));
39 ThrowIAE_IfNull(env, filter);
40 return filter;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080041 }
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