summaryrefslogtreecommitdiff
path: root/libs/hwui/CanvasTransform.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2018-09-20 16:27:46 -0700
committerJohn Reck <jreck@google.com>2018-09-21 09:56:42 -0700
commit08ee815625770e69146b7899e1701e2b2e85464e (patch)
tree9ae931c890b45e7c377951ba1c3ebb4a4b02f3db /libs/hwui/CanvasTransform.cpp
parent4603406afe2667b1eac5b07bc21d3b44443a9e9a (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.cpp18
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;