Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d31a293 authored by John Reck's avatar John Reck
Browse files

Cleanup Xfermode

We only support PorterDuff Xfermodes

Removes some unneeded JNI and finalizers()

Change-Id: I4988d6b05c6fd113a8ed8f7dcbf95abe0de95060
parent e94cc880
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -124,7 +124,6 @@ LOCAL_SRC_FILES:= \
    android/graphics/PathMeasure.cpp \
    android/graphics/PathEffect.cpp \
    android/graphics/Picture.cpp \
    android/graphics/PorterDuff.cpp \
    android/graphics/BitmapRegionDecoder.cpp \
    android/graphics/Rasterizer.cpp \
    android/graphics/Region.cpp \
@@ -132,7 +131,6 @@ LOCAL_SRC_FILES:= \
    android/graphics/SurfaceTexture.cpp \
    android/graphics/Typeface.cpp \
    android/graphics/Utils.cpp \
    android/graphics/Xfermode.cpp \
    android/graphics/YuvToJpegEncoder.cpp \
    android/graphics/pdf/PdfDocument.cpp \
    android/graphics/pdf/PdfEditor.cpp \
+0 −4
Original line number Diff line number Diff line
@@ -127,11 +127,9 @@ extern int register_android_graphics_Paint(JNIEnv* env);
extern int register_android_graphics_Path(JNIEnv* env);
extern int register_android_graphics_PathMeasure(JNIEnv* env);
extern int register_android_graphics_Picture(JNIEnv*);
extern int register_android_graphics_PorterDuff(JNIEnv* env);
extern int register_android_graphics_Rasterizer(JNIEnv* env);
extern int register_android_graphics_Region(JNIEnv* env);
extern int register_android_graphics_SurfaceTexture(JNIEnv* env);
extern int register_android_graphics_Xfermode(JNIEnv* env);
extern int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env);
extern int register_android_graphics_drawable_VectorDrawable(JNIEnv* env);
extern int register_android_graphics_pdf_PdfDocument(JNIEnv* env);
@@ -1343,13 +1341,11 @@ static const RegJNIRec gRegJNI[] = {
    REG_JNI(register_android_graphics_PathMeasure),
    REG_JNI(register_android_graphics_PathEffect),
    REG_JNI(register_android_graphics_Picture),
    REG_JNI(register_android_graphics_PorterDuff),
    REG_JNI(register_android_graphics_Rasterizer),
    REG_JNI(register_android_graphics_Region),
    REG_JNI(register_android_graphics_Shader),
    REG_JNI(register_android_graphics_SurfaceTexture),
    REG_JNI(register_android_graphics_Typeface),
    REG_JNI(register_android_graphics_Xfermode),
    REG_JNI(register_android_graphics_YuvImage),
    REG_JNI(register_android_graphics_drawable_AnimatedVectorDrawable),
    REG_JNI(register_android_graphics_drawable_VectorDrawable),
+25 −5
Original line number Diff line number Diff line
@@ -275,10 +275,30 @@ namespace PaintGlue {
        return reinterpret_cast<jlong>(obj->setColorFilter(filter));
    }

    static jlong setXfermode(JNIEnv* env, jobject clazz, jlong objHandle, jlong xfermodeHandle) {
        Paint* obj = reinterpret_cast<Paint*>(objHandle);
        SkXfermode* xfermode = reinterpret_cast<SkXfermode*>(xfermodeHandle);
        return reinterpret_cast<jlong>(obj->setXfermode(xfermode));
    static void setXfermode(JNIEnv* env, jobject clazz, jlong paintHandle, jint xfermodeHandle) {
        // validate that the Java enum values match our expectations
        static_assert(0 == SkXfermode::kClear_Mode, "xfermode_mismatch");
        static_assert(1 == SkXfermode::kSrc_Mode, "xfermode_mismatch");
        static_assert(2 == SkXfermode::kDst_Mode, "xfermode_mismatch");
        static_assert(3 == SkXfermode::kSrcOver_Mode, "xfermode_mismatch");
        static_assert(4 == SkXfermode::kDstOver_Mode, "xfermode_mismatch");
        static_assert(5 == SkXfermode::kSrcIn_Mode, "xfermode_mismatch");
        static_assert(6 == SkXfermode::kDstIn_Mode, "xfermode_mismatch");
        static_assert(7 == SkXfermode::kSrcOut_Mode, "xfermode_mismatch");
        static_assert(8 == SkXfermode::kDstOut_Mode, "xfermode_mismatch");
        static_assert(9 == SkXfermode::kSrcATop_Mode, "xfermode_mismatch");
        static_assert(10 == SkXfermode::kDstATop_Mode, "xfermode_mismatch");
        static_assert(11 == SkXfermode::kXor_Mode, "xfermode_mismatch");
        static_assert(16 == SkXfermode::kDarken_Mode, "xfermode_mismatch");
        static_assert(17 == SkXfermode::kLighten_Mode, "xfermode_mismatch");
        static_assert(13 == SkXfermode::kModulate_Mode, "xfermode_mismatch");
        static_assert(14 == SkXfermode::kScreen_Mode, "xfermode_mismatch");
        static_assert(12 == SkXfermode::kPlus_Mode, "xfermode_mismatch");
        static_assert(15 == SkXfermode::kOverlay_Mode, "xfermode_mismatch");

        SkXfermode::Mode mode = static_cast<SkXfermode::Mode>(xfermodeHandle);
        Paint* paint = reinterpret_cast<Paint*>(paintHandle);
        paint->setXfermodeMode(mode);
    }

    static jlong setPathEffect(JNIEnv* env, jobject clazz, jlong objHandle, jlong effectHandle) {
@@ -961,7 +981,7 @@ static const JNINativeMethod methods[] = {
    {"nGetFillPath","!(JJJ)Z", (void*) PaintGlue::getFillPath},
    {"nSetShader","!(JJ)J", (void*) PaintGlue::setShader},
    {"nSetColorFilter","!(JJ)J", (void*) PaintGlue::setColorFilter},
    {"nSetXfermode","!(JJ)J", (void*) PaintGlue::setXfermode},
    {"nSetXfermode","!(JI)V", (void*) PaintGlue::setXfermode},
    {"nSetPathEffect","!(JJ)J", (void*) PaintGlue::setPathEffect},
    {"nSetMaskFilter","!(JJ)J", (void*) PaintGlue::setMaskFilter},
    {"nSetTypeface","!(JJ)J", (void*) PaintGlue::setTypeface},
+0 −69
Original line number Diff line number Diff line
/* libs/android_runtime/android/graphics/PorterDuff.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.
*/

// This file was generated from the C++ include file: SkPorterDuff.h
// Any changes made to this file will be discarded by the build.
// To change this file, either edit the include, or device/tools/gluemaker/main.cpp, 
// or one of the auxilary file specifications in device/tools/gluemaker.

#include "jni.h"
#include "GraphicsJNI.h"
#include "core_jni_helpers.h"

#include "SkXfermode.h"

namespace android {

class SkPorterDuffGlue {
public:

    static jlong CreateXfermode(JNIEnv* env, jobject, jint modeHandle) {
        // validate that the Java enum values match our expectations
        static_assert(0  == SkXfermode::kClear_Mode,    "xfermode_mismatch");
        static_assert(1  == SkXfermode::kSrc_Mode,      "xfermode_mismatch");
        static_assert(2  == SkXfermode::kDst_Mode,      "xfermode_mismatch");
        static_assert(3  == SkXfermode::kSrcOver_Mode,  "xfermode_mismatch");
        static_assert(4  == SkXfermode::kDstOver_Mode,  "xfermode_mismatch");
        static_assert(5  == SkXfermode::kSrcIn_Mode,    "xfermode_mismatch");
        static_assert(6  == SkXfermode::kDstIn_Mode,    "xfermode_mismatch");
        static_assert(7  == SkXfermode::kSrcOut_Mode,   "xfermode_mismatch");
        static_assert(8  == SkXfermode::kDstOut_Mode,   "xfermode_mismatch");
        static_assert(9  == SkXfermode::kSrcATop_Mode,  "xfermode_mismatch");
        static_assert(10 == SkXfermode::kDstATop_Mode,  "xfermode_mismatch");
        static_assert(11 == SkXfermode::kXor_Mode,      "xfermode_mismatch");
        static_assert(16 == SkXfermode::kDarken_Mode,   "xfermode_mismatch");
        static_assert(17 == SkXfermode::kLighten_Mode,  "xfermode_mismatch");
        static_assert(13 == SkXfermode::kModulate_Mode, "xfermode_mismatch");
        static_assert(14 == SkXfermode::kScreen_Mode,   "xfermode_mismatch");
        static_assert(12 == SkXfermode::kPlus_Mode,     "xfermode_mismatch");
        static_assert(15 == SkXfermode::kOverlay_Mode,  "xfermode_mismatch");

        SkXfermode::Mode mode = static_cast<SkXfermode::Mode>(modeHandle);
        return reinterpret_cast<jlong>(SkXfermode::Create(mode));
    }

};

static const JNINativeMethod methods[] = {
    {"nativeCreateXfermode","(I)J", (void*) SkPorterDuffGlue::CreateXfermode},
};

int register_android_graphics_PorterDuff(JNIEnv* env) {
    return RegisterMethodsOrDie(env, "android/graphics/PorterDuffXfermode", methods, NELEM(methods));
}

}
+3 −15
Original line number Diff line number Diff line
@@ -225,24 +225,13 @@ static jlong SweepGradient_create2(JNIEnv* env, jobject, jfloat x, jfloat y,

///////////////////////////////////////////////////////////////////////////////////////////////

static jlong ComposeShader_create1(JNIEnv* env, jobject o,
        jlong shaderAHandle, jlong shaderBHandle, jlong modeHandle)
{
    SkShader* shaderA = reinterpret_cast<SkShader *>(shaderAHandle);
    SkShader* shaderB = reinterpret_cast<SkShader *>(shaderBHandle);
    SkXfermode* mode = reinterpret_cast<SkXfermode *>(modeHandle);
    SkShader* shader = SkShader::CreateComposeShader(shaderA, shaderB, mode);
    return reinterpret_cast<jlong>(shader);
}

static jlong ComposeShader_create2(JNIEnv* env, jobject o,
static jlong ComposeShader_create(JNIEnv* env, jobject o,
        jlong shaderAHandle, jlong shaderBHandle, jint xfermodeHandle)
{
    SkShader* shaderA = reinterpret_cast<SkShader *>(shaderAHandle);
    SkShader* shaderB = reinterpret_cast<SkShader *>(shaderBHandle);
    SkXfermode::Mode mode = static_cast<SkXfermode::Mode>(xfermodeHandle);
    SkAutoTUnref<SkXfermode> xfermode(SkXfermode::Create(mode));
    SkShader* shader = SkShader::CreateComposeShader(shaderA, shaderB, xfermode.get());
    SkShader* shader = SkShader::CreateComposeShader(shaderA, shaderB, mode);
    return reinterpret_cast<jlong>(shader);
}

@@ -278,8 +267,7 @@ static const JNINativeMethod gSweepGradientMethods[] = {
};

static const JNINativeMethod gComposeShaderMethods[] = {
    { "nativeCreate1",      "(JJJ)J",   (void*)ComposeShader_create1     },
    { "nativeCreate2",      "(JJI)J",   (void*)ComposeShader_create2     },
    { "nativeCreate",      "(JJI)J",   (void*)ComposeShader_create     },
};

int register_android_graphics_Shader(JNIEnv* env)
Loading