blob: ec115b4e141c1a7460162300b07a13c94f2c7a7b [file] [log] [blame]
/* libs/android_runtime/android/graphics/ColorFilter.cpp
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#include "GraphicsJNI.h"
#include "hwui/Paint.h"
#include "hwui/PaintFilter.h"
#include "SkPaint.h"
namespace android {
class PaintFlagsFilter : public PaintFilter {
public:
PaintFlagsFilter(uint32_t clearFlags, uint32_t setFlags) {
fClearFlags = static_cast<uint16_t>(clearFlags);
fSetFlags = static_cast<uint16_t>(setFlags);
}
void filter(SkPaint* paint) override {
uint32_t flags = Paint::GetSkPaintJavaFlags(*paint);
Paint::SetSkPaintJavaFlags(paint, (flags & ~fClearFlags) | fSetFlags);
}
void filterFullPaint(Paint* paint) override {
paint->setJavaFlags((paint->getJavaFlags() & ~fClearFlags) | fSetFlags);
}
private:
uint16_t fClearFlags;
uint16_t fSetFlags;
};
class PaintFilterGlue {
public:
static void finalizer(JNIEnv* env, jobject clazz, jlong objHandle) {
PaintFilter* obj = reinterpret_cast<PaintFilter*>(objHandle);
SkSafeUnref(obj);
}
static jlong CreatePaintFlagsFilter(JNIEnv* env, jobject clazz,
jint clearFlags, jint setFlags) {
PaintFilter* filter = nullptr;
if (clearFlags | setFlags) {
filter = new PaintFlagsFilter(clearFlags, setFlags);
}
return reinterpret_cast<jlong>(filter);
}
};
static const JNINativeMethod drawfilter_methods[] = {
{"nativeDestructor", "(J)V", (void*) PaintFilterGlue::finalizer}
};
static const JNINativeMethod paintflags_methods[] = {
{"nativeConstructor","(II)J", (void*) PaintFilterGlue::CreatePaintFlagsFilter}
};
int register_android_graphics_DrawFilter(JNIEnv* env) {
int result = RegisterMethodsOrDie(env, "android/graphics/DrawFilter", drawfilter_methods,
NELEM(drawfilter_methods));
result |= RegisterMethodsOrDie(env, "android/graphics/PaintFlagsDrawFilter", paintflags_methods,
NELEM(paintflags_methods));
return 0;
}
}