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