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

Commit 425cc668 authored by Derek Sollenberger's avatar Derek Sollenberger Committed by Android (Google) Code Review
Browse files

Merge "Refactor HWUI to better handle Canvas DrawFilters."

parents 9eb930ed 09c2d4fe
Loading
Loading
Loading
Loading
+2 −8
Original line number Diff line number Diff line
@@ -517,16 +517,10 @@ class GLES20Canvas extends HardwareCanvas {
    @Override
    public void setDrawFilter(DrawFilter filter) {
        mFilter = filter;
        if (filter == null) {
            nResetPaintFilter(mRenderer);
        } else if (filter instanceof PaintFlagsDrawFilter) {
            PaintFlagsDrawFilter flagsFilter = (PaintFlagsDrawFilter) filter;
            nSetupPaintFilter(mRenderer, flagsFilter.clearBits, flagsFilter.setBits);
        }
        nSetDrawFilter(mRenderer, (filter != null) ? filter.mNativeInt : 0);
    }

    private static native void nResetPaintFilter(long renderer);
    private static native void nSetupPaintFilter(long renderer, int clearBits, int setBits);
    private static native void nSetDrawFilter(long renderer, long nativeFilter);

    @Override
    public DrawFilter getDrawFilter() {
+5 −11
Original line number Diff line number Diff line
@@ -587,16 +587,11 @@ static void android_view_GLES20Canvas_drawLines(JNIEnv* env, jobject clazz,
// Draw filters
// ----------------------------------------------------------------------------

static void android_view_GLES20Canvas_setupPaintFilter(JNIEnv* env, jobject clazz,
        jlong rendererPtr, jint clearBits, jint setBits) {
static void android_view_GLES20Canvas_setDrawFilter(JNIEnv* env, jobject clazz,
        jlong rendererPtr, jlong filterPtr) {
    DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
    renderer->setupPaintFilter(clearBits, setBits);
}

static void android_view_GLES20Canvas_resetPaintFilter(JNIEnv* env, jobject clazz,
        jlong rendererPtr) {
    DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
    renderer->resetPaintFilter();
    SkDrawFilter* filter = reinterpret_cast<SkDrawFilter*>(filterPtr);
    renderer->setDrawFilter(filter);
}

// ----------------------------------------------------------------------------
@@ -936,8 +931,7 @@ static JNINativeMethod gMethods[] = {
    { "nDrawPath",          "(JJJ)V",          (void*) android_view_GLES20Canvas_drawPath },
    { "nDrawLines",         "(J[FIIJ)V",       (void*) android_view_GLES20Canvas_drawLines },

    { "nSetupPaintFilter",  "(JII)V",          (void*) android_view_GLES20Canvas_setupPaintFilter },
    { "nResetPaintFilter",  "(J)V",            (void*) android_view_GLES20Canvas_resetPaintFilter },
    { "nSetDrawFilter",     "(JJ)V",           (void*) android_view_GLES20Canvas_setDrawFilter },

    { "nDrawText",          "(J[CIIFFIJJ)V",   (void*) android_view_GLES20Canvas_drawTextArray },
    { "nDrawText",          "(JLjava/lang/String;IIFFIJJ)V",
+5 −2
Original line number Diff line number Diff line
@@ -24,8 +24,11 @@ package android.graphics;
 */
public class DrawFilter {

    // this is set by subclasses, but don't make it public
    /* package */ long mNativeInt;    // pointer to native object
    /**
     * this is set by subclasses
     * @hide
     */
    public long mNativeInt;

    protected void finalize() throws Throwable {
        try {
+0 −7
Original line number Diff line number Diff line
@@ -17,11 +17,6 @@
package android.graphics;

public class PaintFlagsDrawFilter extends DrawFilter {
    /** @hide **/
    public final int clearBits;
    /** @hide **/
    public final int setBits;

    /**
     * Subclass of DrawFilter that affects every paint by first clearing
     * the specified clearBits in the paint's flags, and then setting the
@@ -31,8 +26,6 @@ public class PaintFlagsDrawFilter extends DrawFilter {
     * @param setBits These bits will be set in the paint's flags
     */
    public PaintFlagsDrawFilter(int clearBits, int setBits) {
        this.clearBits = clearBits;
        this.setBits = setBits;
        // our native constructor can return 0, if the specified bits
        // are effectively a no-op
        mNativeInt = nativeConstructor(clearBits, setBits);
+0 −20
Original line number Diff line number Diff line
@@ -235,26 +235,6 @@ public:
            return false;
        }

        /* Draw Modifiers compatibility check
         *
         * Shadows are ignored, as only text uses them, and in that case they are drawn
         * per-DrawTextOp, before the unified text draw. Because of this, it's always safe to merge
         * text UNLESS a later draw's shadow should overlays a previous draw's text. This is covered
         * above with the intersection check.
         *
         * OverrideLayerAlpha is also ignored, as it's only used for drawing layers, which are never
         * merged.
         *
         * These ignore cases prevent us from simply memcmp'ing the drawModifiers
         */
        const DrawModifiers& lhsMod = lhs->mDrawModifiers;
        const DrawModifiers& rhsMod = rhs->mDrawModifiers;

        // Draw filter testing expects bit fields to be clear if filter not set.
        if (lhsMod.mHasDrawFilter != rhsMod.mHasDrawFilter) return false;
        if (lhsMod.mPaintFilterClearBits != rhsMod.mPaintFilterClearBits) return false;
        if (lhsMod.mPaintFilterSetBits != rhsMod.mPaintFilterSetBits) return false;

        return true;
    }

Loading