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

Commit 6097eca7 authored by Chris Craik's avatar Chris Craik
Browse files

Expose color filter mutate methods

Bug: 36025103
Test: cts-tradefed run singleCommand cts-dev --module CtsGraphicsTestCases

Now, similar to Shaders, we defer native creation until Paint is being
used, and ensure that we have an up to date filter when drawing.

Also implements ColorMatrix#equals to behave like Matrix#equals.

Change-Id: I5f74addd97f5662800802e6f660fead58d518725
parent 849008cc
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -12757,7 +12757,7 @@ package android.graphics {
  }
  public class ColorFilter {
    ctor public ColorFilter();
    ctor public deprecated ColorFilter();
  }
  public class ColorMatrix {
@@ -12781,6 +12781,9 @@ package android.graphics {
  public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
    ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
    ctor public ColorMatrixColorFilter(float[]);
    method public void getColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrixArray(float[]);
  }
  public abstract class ColorSpace {
@@ -13004,6 +13007,10 @@ package android.graphics {
  public class LightingColorFilter extends android.graphics.ColorFilter {
    ctor public LightingColorFilter(int, int);
    method public int getColorAdd();
    method public int getColorMultiply();
    method public void setColorAdd(int);
    method public void setColorMultiply(int);
  }
  public class LinearGradient extends android.graphics.Shader {
@@ -13520,6 +13527,10 @@ package android.graphics {
  public class PorterDuffColorFilter extends android.graphics.ColorFilter {
    ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
    method public int getColor();
    method public android.graphics.PorterDuff.Mode getMode();
    method public void setColor(int);
    method public void setMode(android.graphics.PorterDuff.Mode);
  }
  public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -45423,7 +45434,7 @@ package android.view {
    method public void setActivated(boolean);
    method public void setAlpha(float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAutofillHint(java.lang.String[]);
    method public void setAutofillHint(java.lang.String...);
    method public void setAutofillMode(int);
    method public void setBackground(android.graphics.drawable.Drawable);
    method public void setBackgroundColor(int);
+13 −2
Original line number Diff line number Diff line
@@ -13495,7 +13495,7 @@ package android.graphics {
  }
  public class ColorFilter {
    ctor public ColorFilter();
    ctor public deprecated ColorFilter();
  }
  public class ColorMatrix {
@@ -13519,6 +13519,9 @@ package android.graphics {
  public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
    ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
    ctor public ColorMatrixColorFilter(float[]);
    method public void getColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrixArray(float[]);
  }
  public abstract class ColorSpace {
@@ -13742,6 +13745,10 @@ package android.graphics {
  public class LightingColorFilter extends android.graphics.ColorFilter {
    ctor public LightingColorFilter(int, int);
    method public int getColorAdd();
    method public int getColorMultiply();
    method public void setColorAdd(int);
    method public void setColorMultiply(int);
  }
  public class LinearGradient extends android.graphics.Shader {
@@ -14258,6 +14265,10 @@ package android.graphics {
  public class PorterDuffColorFilter extends android.graphics.ColorFilter {
    ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
    method public int getColor();
    method public android.graphics.PorterDuff.Mode getMode();
    method public void setColor(int);
    method public void setMode(android.graphics.PorterDuff.Mode);
  }
  public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -48889,7 +48900,7 @@ package android.view {
    method public void setActivated(boolean);
    method public void setAlpha(float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAutofillHint(java.lang.String[]);
    method public void setAutofillHint(java.lang.String...);
    method public void setAutofillMode(int);
    method public void setBackground(android.graphics.drawable.Drawable);
    method public void setBackgroundColor(int);
+13 −2
Original line number Diff line number Diff line
@@ -12795,7 +12795,7 @@ package android.graphics {
  }
  public class ColorFilter {
    ctor public ColorFilter();
    ctor public deprecated ColorFilter();
  }
  public class ColorMatrix {
@@ -12819,6 +12819,9 @@ package android.graphics {
  public class ColorMatrixColorFilter extends android.graphics.ColorFilter {
    ctor public ColorMatrixColorFilter(android.graphics.ColorMatrix);
    ctor public ColorMatrixColorFilter(float[]);
    method public void getColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrix(android.graphics.ColorMatrix);
    method public void setColorMatrixArray(float[]);
  }
  public abstract class ColorSpace {
@@ -13042,6 +13045,10 @@ package android.graphics {
  public class LightingColorFilter extends android.graphics.ColorFilter {
    ctor public LightingColorFilter(int, int);
    method public int getColorAdd();
    method public int getColorMultiply();
    method public void setColorAdd(int);
    method public void setColorMultiply(int);
  }
  public class LinearGradient extends android.graphics.Shader {
@@ -13558,6 +13565,10 @@ package android.graphics {
  public class PorterDuffColorFilter extends android.graphics.ColorFilter {
    ctor public PorterDuffColorFilter(int, android.graphics.PorterDuff.Mode);
    method public int getColor();
    method public android.graphics.PorterDuff.Mode getMode();
    method public void setColor(int);
    method public void setMode(android.graphics.PorterDuff.Mode);
  }
  public class PorterDuffXfermode extends android.graphics.Xfermode {
@@ -45786,7 +45797,7 @@ package android.view {
    method public void setActivated(boolean);
    method public void setAlpha(float);
    method public void setAnimation(android.view.animation.Animation);
    method public void setAutofillHint(java.lang.String[]);
    method public void setAutofillHint(java.lang.String...);
    method public void setAutofillMode(int);
    method public void setBackground(android.graphics.drawable.Drawable);
    method public void setBackgroundColor(int);
+5 −5
Original line number Diff line number Diff line
@@ -30,7 +30,7 @@ using namespace uirenderer;

class SkColorFilterGlue {
public:
    static void finalizer(JNIEnv* env, jobject clazz, jlong skFilterHandle) {
    static void SafeUnref(JNIEnv* env, jobject clazz, jlong skFilterHandle) {
        SkColorFilter* filter = reinterpret_cast<SkColorFilter *>(skFilterHandle);
        SkSafeUnref(filter);
    }
@@ -57,7 +57,7 @@ public:
};

static const JNINativeMethod colorfilter_methods[] = {
    {"destroyFilter", "(J)V", (void*) SkColorFilterGlue::finalizer}
    {"nSafeUnref", "(J)V", (void*) SkColorFilterGlue::SafeUnref}
};

static const JNINativeMethod porterduff_methods[] = {
+37 −7
Original line number Diff line number Diff line
@@ -27,22 +27,52 @@ package android.graphics;
 * never be used directly.
 */
public class ColorFilter {
    /**
     * @deprecated Use subclass constructors directly instead.
     */
    @Deprecated
    public ColorFilter() {}

    /**
     * Holds the pointer to the native SkColorFilter instance.
     *
     * @hide
     */
    public long native_instance;
    private long mNativeInstance;

    long createNativeInstance() {
        return 0;
    }

    void discardNativeInstance() {
        if (mNativeInstance != 0) {
            nSafeUnref(mNativeInstance);
            mNativeInstance = 0;
        }
    }

    @Override
    protected void finalize() throws Throwable {
        try {
            super.finalize();
            if (mNativeInstance != 0) {
                nSafeUnref(mNativeInstance);
            }
            mNativeInstance = -1;
        } finally {
            destroyFilter(native_instance);
            native_instance = 0;
            super.finalize();
        }
    }

    static native void destroyFilter(long native_instance);
    /** @hide */
    public long getNativeInstance() {
        if (mNativeInstance == -1) {
            throw new IllegalStateException("attempting to use a finalized ColorFilter");
        }

        if (mNativeInstance == 0) {
            mNativeInstance = createNativeInstance();
        }
        return mNativeInstance;

    }

    static native void nSafeUnref(long native_instance);
}
Loading