ColorFilter.cpp revision 54b6cfa9a9e5b861a9930af873580d6dc20f773c
1/* libs/android_runtime/android/graphics/ColorFilter.cpp
2**
3** Copyright 2006, The Android Open Source Project
4**
5** Licensed under the Apache License, Version 2.0 (the "License");
6** you may not use this file except in compliance with the License.
7** You may obtain a copy of the License at
8**
9**     http://www.apache.org/licenses/LICENSE-2.0
10**
11** Unless required by applicable law or agreed to in writing, software
12** distributed under the License is distributed on an "AS IS" BASIS,
13** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14** See the License for the specific language governing permissions and
15** limitations under the License.
16*/
17
18#include "jni.h"
19#include "GraphicsJNI.h"
20#include <android_runtime/AndroidRuntime.h>
21
22#include "SkColorFilter.h"
23#include "SkColorMatrixFilter.h"
24
25namespace android {
26
27class SkColorFilterGlue {
28public:
29
30    static void finalizer(JNIEnv* env, jobject clazz, SkColorFilter* obj) {
31        obj->safeUnref();
32    }
33
34    static SkColorFilter* CreatePorterDuffFilter(JNIEnv* env, jobject,
35                            jint srcColor, SkPorterDuff::Mode porterDuffMode) {
36        return SkColorFilter::CreatePorterDuffFilter(srcColor, porterDuffMode);
37    }
38
39    static SkColorFilter* CreateLightingFilter(JNIEnv* env, jobject,
40                                               jint mul, jint add) {
41        return SkColorFilter::CreateLightingFilter(mul, add);
42    }
43
44    static SkColorFilter* CreateColorMatrixFilter(JNIEnv* env, jobject,
45                                                  jfloatArray jarray) {
46        AutoJavaFloatArray autoArray(env, jarray, 20);
47        const float* src = autoArray.ptr();
48
49#ifdef SK_SCALAR_IS_FIXED
50        SkFixed array[20];
51        for (int i = 0; i < 20; i++) {
52            array[i] = SkFloatToScalar(src[i]);
53        }
54        return new SkColorMatrixFilter(array);
55#else
56        return new SkColorMatrixFilter(src);
57#endif
58    }
59
60};
61
62static JNINativeMethod colorfilter_methods[] = {
63    {"finalizer", "(I)V", (void*) SkColorFilterGlue::finalizer}
64};
65
66static JNINativeMethod porterduff_methods[] = {
67    {"native_CreatePorterDuffFilter","(II)I",
68        (void*) SkColorFilterGlue::CreatePorterDuffFilter}
69};
70
71static JNINativeMethod lighting_methods[] = {
72    {"native_CreateLightingFilter","(II)I",
73        (void*) SkColorFilterGlue::CreateLightingFilter}
74};
75
76static JNINativeMethod colormatrix_methods[] = {
77    {"nativeColorMatrixFilter","([F)I",
78        (void*) SkColorFilterGlue::CreateColorMatrixFilter}
79};
80
81#define REG(env, name, array) \
82    result = android::AndroidRuntime::registerNativeMethods(env, name, array, \
83                                                    SK_ARRAY_COUNT(array));  \
84    if (result < 0) return result
85
86
87int register_android_graphics_ColorFilter(JNIEnv* env) {
88    int result;
89
90    REG(env, "android/graphics/ColorFilter", colorfilter_methods);
91    REG(env, "android/graphics/PorterDuffColorFilter", porterduff_methods);
92    REG(env, "android/graphics/LightingColorFilter", lighting_methods);
93    REG(env, "android/graphics/ColorMatrixColorFilter", colormatrix_methods);
94
95    return 0;
96}
97
98}
99