From 377d1337a321ac41ab3ffe92d7c4eee6a5319581 Mon Sep 17 00:00:00 2001 From: Lucas Dupin Date: Thu, 5 Nov 2020 02:29:43 +0000 Subject: [PATCH] Support tinting blur drawable In order to achieve the look and feel of colored surfaces, the blur drawable should be able to receive a color and draw it on top of the blur region. Test: manual Fixes: 172372852 Change-Id: I4cab21e337ca18f617780531368ba70154027b72 --- .../graphics/drawable/BackgroundBlurDrawable.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/core/java/com/android/internal/graphics/drawable/BackgroundBlurDrawable.java b/core/java/com/android/internal/graphics/drawable/BackgroundBlurDrawable.java index 6ea9e665c009e..9eab6211dd438 100644 --- a/core/java/com/android/internal/graphics/drawable/BackgroundBlurDrawable.java +++ b/core/java/com/android/internal/graphics/drawable/BackgroundBlurDrawable.java @@ -20,6 +20,7 @@ import android.annotation.NonNull; import android.annotation.Nullable; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Path; @@ -75,7 +76,8 @@ public final class BackgroundBlurDrawable extends Drawable { private BackgroundBlurDrawable(Aggregator aggregator) { mAggregator = aggregator; - mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); + mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC)); + mPaint.setColor(Color.TRANSPARENT); mRenderNode = new RenderNode("BackgroundBlurDrawable"); mRenderNode.addPositionUpdateListener(mPositionUpdateListener); } @@ -85,10 +87,16 @@ public final class BackgroundBlurDrawable extends Drawable { if (mRectPath.isEmpty() || !isVisible() || getAlpha() == 0) { return; } + canvas.drawPath(mRectPath, mPaint); canvas.drawRenderNode(mRenderNode); } + @Override + public void setTint(int tintColor) { + mPaint.setColor(tintColor); + } + @Override public boolean setVisible(boolean visible, boolean restart) { boolean changed = super.setVisible(visible, restart);