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

Commit a9ebfa6b authored by Romain Guy's avatar Romain Guy
Browse files

Keep a reference to the local matrix.

Bug #3299324

This is needed for ADT, which does not rely on Skia's reference counting
to correctly keep track of the native objects.

Change-Id: Ia2fc5c1ec2b80bad226bc549fefc6bb064784609
parent 068a7355
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -64,11 +64,6 @@ static void Shader_destructor(JNIEnv* env, jobject o, SkShader* shader, SkiaShad
#endif
}

static bool Shader_getLocalMatrix(JNIEnv* env, jobject, const SkShader* shader, SkMatrix* matrix)
{
    return shader ? shader->getLocalMatrix(matrix) : false;
}
 
static void Shader_setLocalMatrix(JNIEnv* env, jobject o, SkShader* shader, SkiaShader* skiaShader,
        const SkMatrix* matrix)
{
@@ -471,7 +466,6 @@ static JNINativeMethod gColorMethods[] = {

static JNINativeMethod gShaderMethods[] = {
    { "nativeDestructor",        "(II)V",    (void*)Shader_destructor        },
    { "nativeGetLocalMatrix",    "(II)Z",    (void*)Shader_getLocalMatrix    },
    { "nativeSetLocalMatrix",    "(III)V",   (void*)Shader_setLocalMatrix    }
};

+8 −3
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ public class Shader {
     */
    public int native_shader;

    private Matrix mLocalMatrix;

    public enum TileMode {
        /**
         * replicate the edge color if the shader draws outside of its
@@ -62,7 +64,11 @@ public class Shader {
     * @return true if the shader has a non-identity local matrix
     */
    public boolean getLocalMatrix(Matrix localM) {
        return nativeGetLocalMatrix(native_instance, localM.native_instance);
        if (mLocalMatrix != null) {
            localM.set(mLocalMatrix);
            return true;
        }
        return false;
    }

    /**
@@ -71,6 +77,7 @@ public class Shader {
     * @param localM The shader's new local matrix, or null to specify identity
     */
    public void setLocalMatrix(Matrix localM) {
        mLocalMatrix = localM;
        nativeSetLocalMatrix(native_instance, native_shader,
                localM == null ? 0 : localM.native_instance);
    }
@@ -84,8 +91,6 @@ public class Shader {
    }

    private static native void nativeDestructor(int native_shader, int native_skiaShader);
    private static native boolean nativeGetLocalMatrix(int native_shader,
            int matrix_instance); 
    private static native void nativeSetLocalMatrix(int native_shader,
            int native_skiaShader, int matrix_instance);
}