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

Commit ef22000e authored by John Reck's avatar John Reck Committed by Android (Google) Code Review
Browse files

Merge "Revert immutable Shader change" into lmp-dev

parents 250bf41b 01edef10
Loading
Loading
Loading
Loading
+7 −14
Original line number Diff line number Diff line
@@ -54,26 +54,19 @@ static void Shader_destructor(JNIEnv* env, jobject o, jlong shaderHandle, jlong
{
    SkShader* shader = reinterpret_cast<SkShader*>(shaderHandle);
    SkSafeUnref(shader);
    SkShader* shaderWithLM = reinterpret_cast<SkShader*>(shaderWithLMHandle);
    SkSafeUnref(shaderWithLM);
}

static jlong Shader_setLocalMatrix(JNIEnv* env, jobject o, jlong shaderHandle,
        jlong oldLocalMatrixShaderHandle, jlong matrixHandle)
static void Shader_setLocalMatrix(JNIEnv* env, jobject o, jlong shaderHandle, jlong matrixHandle)
{
    // The old shader with local matrix is no longer needed, so unref it.
    SkSafeUnref(reinterpret_cast<SkShader*>(oldLocalMatrixShaderHandle));

    SkShader* shader       = reinterpret_cast<SkShader*>(shaderHandle);
    const SkMatrix* matrix = reinterpret_cast<SkMatrix*>(matrixHandle);
    if (shader) {
        if (NULL == matrix) {
            matrix = &SkMatrix::I();
        if (matrix) {
            shader->setLocalMatrix(*matrix);
        } else {
            shader->resetLocalMatrix();
        }
        SkShader* newShader = SkShader::CreateLocalMatrixShader(shader, *matrix);
        shader = newShader;
    }
    return reinterpret_cast<jlong>(shader);
}

///////////////////////////////////////////////////////////////////////////////////////////////
@@ -243,8 +236,8 @@ static JNINativeMethod gColorMethods[] = {
};

static JNINativeMethod gShaderMethods[] = {
    { "nativeDestructor",        "(JJ)V",    (void*)Shader_destructor        },
    { "nativeSetLocalMatrix",    "(JJJ)J",   (void*)Shader_setLocalMatrix    }
    { "nativeDestructor",        "(J)V",    (void*)Shader_destructor        },
    { "nativeSetLocalMatrix",    "(JJ)V",   (void*)Shader_setLocalMatrix    }
};

static JNINativeMethod gBitmapShaderMethods[] = {
+4 −16
Original line number Diff line number Diff line
@@ -28,8 +28,6 @@ public class Shader {
     */
    private long native_instance;

    private long native_with_local_matrix;

    /**
     * Initialization step that should be called by subclasses in their
     * constructors. Calling again may result in memory leaks.
@@ -80,24 +78,18 @@ public class Shader {
     * Set the shader's local matrix. Passing null will reset the shader's
     * matrix to identity.
     *
     * Starting with {@link android.os.Build.VERSION_CODES#L}, this does not
     * modify any Paints which use this Shader. In order to modify the Paint,
     * you need to call {@link Paint#setShader} again. Further, any {@link ComposeShader}s
     * created with this Shader will be unaffected.
     *
     * @param localM The shader's new local matrix, or null to specify identity
     */
    public void setLocalMatrix(Matrix localM) {
        mLocalMatrix = localM;
        native_with_local_matrix = nativeSetLocalMatrix(native_instance,
                native_with_local_matrix, localM == null ? 0 : localM.native_instance);
        nativeSetLocalMatrix(native_instance, localM == null ? 0 : localM.native_instance);
    }

    protected void finalize() throws Throwable {
        try {
            super.finalize();
        } finally {
            nativeDestructor(native_instance, native_with_local_matrix);
            nativeDestructor(native_instance);
        }
    }

@@ -124,13 +116,9 @@ public class Shader {
    }

    /* package */ long getNativeInstance() {
        if (native_with_local_matrix != 0) {
            return native_with_local_matrix;
        }
        return native_instance;
    }

    private static native void nativeDestructor(long native_shader, long native_with_local_matrix);
    private static native long nativeSetLocalMatrix(long native_shader,
            long native_with_local_matrix, long matrix_instance);
    private static native void nativeDestructor(long native_shader);
    private static native void nativeSetLocalMatrix(long native_shader, long matrix_instance);
}