diff options
author | John Reck <jreck@google.com> | 2018-09-20 16:27:46 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2018-09-21 09:56:42 -0700 |
commit | 08ee815625770e69146b7899e1701e2b2e85464e (patch) | |
tree | 9ae931c890b45e7c377951ba1c3ebb4a4b02f3db /libs/hwui/CanvasTransform.cpp | |
parent | 4603406afe2667b1eac5b07bc21d3b44443a9e9a (diff) |
Support auto-dark for VectorDrawable
Also fixes a bug where non-animatable properties (colorfilter)
weren't captured at record-time
Test: poked around, quick settings doesn't look awful
Change-Id: I57312dd5eb70f477814a4d898963ee010153c243
Diffstat (limited to 'libs/hwui/CanvasTransform.cpp')
-rw-r--r-- | libs/hwui/CanvasTransform.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/libs/hwui/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp index a03b31723808..06e937ab66f4 100644 --- a/libs/hwui/CanvasTransform.cpp +++ b/libs/hwui/CanvasTransform.cpp @@ -79,7 +79,6 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { info.fColors = _colorStorage.data(); info.fColorOffsets = _offsetStorage.data(); SkShader::GradientType type = paint.getShader()->asAGradient(&info); - ALOGW_IF(type, "Found gradient of type = %d", type); if (info.fColorCount <= 10) { switch (type) { @@ -108,6 +107,22 @@ static void applyColorTransform(ColorTransform transform, SkPaint& paint) { } } +static BitmapPalette paletteForColorHSV(SkColor color) { + float hsv[3]; + SkColorToHSV(color, hsv); + return hsv[2] >= .5f ? BitmapPalette::Light : BitmapPalette::Dark; +} + +static BitmapPalette filterPalette(const SkPaint* paint, BitmapPalette palette) { + if (palette == BitmapPalette::Unknown || !paint || !paint->getColorFilter()) { + return palette; + } + + SkColor color = palette == BitmapPalette::Light ? SK_ColorWHITE : SK_ColorBLACK; + color = paint->getColorFilter()->filterColor(color); + return paletteForColorHSV(color); +} + bool transformPaint(ColorTransform transform, SkPaint* paint) { // TODO applyColorTransform(transform, *paint); @@ -115,6 +130,7 @@ bool transformPaint(ColorTransform transform, SkPaint* paint) { } bool transformPaint(ColorTransform transform, SkPaint* paint, BitmapPalette palette) { + palette = filterPalette(paint, palette); bool shouldInvert = false; if (palette == BitmapPalette::Light && transform == ColorTransform::Dark) { shouldInvert = true; |