diff options
Diffstat (limited to 'src/com/android/launcher3/FastBitmapDrawable.java')
-rw-r--r-- | src/com/android/launcher3/FastBitmapDrawable.java | 61 |
1 files changed, 59 insertions, 2 deletions
diff --git a/src/com/android/launcher3/FastBitmapDrawable.java b/src/com/android/launcher3/FastBitmapDrawable.java index 85e90202b..ef8d0973d 100644 --- a/src/com/android/launcher3/FastBitmapDrawable.java +++ b/src/com/android/launcher3/FastBitmapDrawable.java @@ -19,15 +19,24 @@ package com.android.launcher3; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.ColorFilter; +import android.graphics.ColorMatrix; +import android.graphics.ColorMatrixColorFilter; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; class FastBitmapDrawable extends Drawable { + + private static final ColorMatrix sTempSaturationMatrix = new ColorMatrix(); + private static final ColorMatrix sTempBrightnessMatrix = new ColorMatrix(); + + private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); private Bitmap mBitmap; private int mAlpha; - private final Paint mPaint = new Paint(Paint.FILTER_BITMAP_FLAG); + + private float mSatutation = 1; + private int mBrightness = 0; FastBitmapDrawable(Bitmap b) { mAlpha = 255; @@ -44,7 +53,7 @@ class FastBitmapDrawable extends Drawable { @Override public void setColorFilter(ColorFilter cf) { - mPaint.setColorFilter(cf); + // No op } @Override @@ -58,6 +67,7 @@ class FastBitmapDrawable extends Drawable { mPaint.setAlpha(alpha); } + @Override public void setFilterBitmap(boolean filterBitmap) { mPaint.setFilterBitmap(filterBitmap); mPaint.setAntiAlias(filterBitmap); @@ -90,4 +100,51 @@ class FastBitmapDrawable extends Drawable { public Bitmap getBitmap() { return mBitmap; } + + public float getSaturation() { + return mSatutation; + } + + public void setSaturation(float saturation) { + mSatutation = saturation; + updateFilter(); + } + + public int getBrightness() { + return mBrightness; + } + + public void addBrightness(int amount) { + mBrightness += amount; + updateFilter(); + } + + public void setBrightness(int brightness) { + mBrightness = brightness; + updateFilter(); + } + + private void updateFilter() { + if (mSatutation != 1 || mBrightness != 0) { + sTempSaturationMatrix.setSaturation(mSatutation); + + if (mBrightness != 0) { + // Brightness: C-new = C-old*(1-amount) + amount + float scale = 1 - mBrightness / 255.0f; + sTempBrightnessMatrix.setScale(scale, scale, scale, 1); + float[] array = sTempBrightnessMatrix.getArray(); + + // Add the amount to RGB components of the matrix, as per the above formula. + // Fifth elements in the array correspond to the constant being added to + // red, blue, green, and alpha channel respectively. + array[4] = mBrightness; + array[9] = mBrightness; + array[14] = mBrightness; + sTempSaturationMatrix.preConcat(sTempBrightnessMatrix); + } + mPaint.setColorFilter(new ColorMatrixColorFilter(sTempSaturationMatrix)); + } else { + mPaint.setColorFilter(null); + } + } } |