2 * Copyright 2021 Google Inc.
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
10 #include "include/core/SkColorFilter.h"
11 #include "modules/androidkit/src/Utils.h"
15 static jlong MakeMatrix(JNIEnv* env, jobject, jfloatArray jcm) {
16 SkASSERT(env->GetArrayLength(jcm) == 20);
18 auto cf = SkColorFilters::Matrix(androidkit::utils::CFloats(env, jcm));
20 return reinterpret_cast<jlong>(cf.release());
23 static jlong MakeHSLAMatrix(JNIEnv* env, jobject, jfloatArray jcm) {
24 SkASSERT(env->GetArrayLength(jcm) == 20);
26 auto cf = SkColorFilters::HSLAMatrix(androidkit::utils::CFloats(env, jcm));
28 return reinterpret_cast<jlong>(cf.release());
31 static jlong MakeCompose(JNIEnv*, jobject, jlong outer, jlong inner) {
32 auto cf = SkColorFilters::Compose(sk_ref_sp(reinterpret_cast<SkColorFilter*>(outer)),
33 sk_ref_sp(reinterpret_cast<SkColorFilter*>(inner)));
35 return reinterpret_cast<jlong>(cf.release());
38 static void ColorFilter_Release(JNIEnv*, jobject, jlong native_cf) {
39 SkSafeUnref(reinterpret_cast<SkColorFilter*>(native_cf));
44 int register_androidkit_ColorFilter(JNIEnv* env) {
45 static const JNINativeMethod methods[] = {
46 {"nRelease" , "(J)V" , reinterpret_cast<void*>(ColorFilter_Release) },
49 const auto clazz = env->FindClass("org/skia/androidkit/ColorFilter");
51 ? env->RegisterNatives(clazz, methods, SK_ARRAY_COUNT(methods))
55 int register_androidkit_MatrixColorFilter(JNIEnv* env) {
56 static const JNINativeMethod methods[] = {
57 {"nMakeMatrix", "([F)J", reinterpret_cast<void*>(MakeMatrix)},
60 const auto clazz = env->FindClass("org/skia/androidkit/MatrixColorFilter");
62 ? env->RegisterNatives(clazz, methods, SK_ARRAY_COUNT(methods))
66 int register_androidkit_HSLAMatrixColorFilter(JNIEnv* env) {
67 static const JNINativeMethod methods[] = {
68 {"nMakeHSLAMatrix", "([F)J", reinterpret_cast<void*>(MakeHSLAMatrix)},
71 const auto clazz = env->FindClass("org/skia/androidkit/HSLAMatrixColorFilter");
73 ? env->RegisterNatives(clazz, methods, SK_ARRAY_COUNT(methods))
77 int register_androidkit_ComposeColorFilter(JNIEnv* env) {
78 static const JNINativeMethod methods[] = {
79 {"nMakeCompose", "(JJ)J", reinterpret_cast<void*>(MakeCompose)},
82 const auto clazz = env->FindClass("org/skia/androidkit/ComposeColorFilter");
84 ? env->RegisterNatives(clazz, methods, SK_ARRAY_COUNT(methods))