Merge "Revert immutable Shader change" into lmp-dev

This commit is contained in:
John Reck
2014-08-22 20:19:33 +00:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 30 deletions

View File

@@ -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[] = {

View File

@@ -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);
}