summaryrefslogtreecommitdiff
path: root/libs/hwui/CanvasTransform.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2018-07-18 16:32:27 -0700
committerJohn Reck <jreck@google.com>2018-07-19 15:58:39 -0700
commit339cf9b3272f8581aa4cae34be368d1ff78e85c8 (patch)
treec15bd2de1eedacf3348c7c1911bdd3c86b1dbaf0 /libs/hwui/CanvasTransform.cpp
parent71fa53f8a548993d30d91343caee0e6269e8c0c5 (diff)
More auto-dark stuff
Initial attempt at selective bitmap inverting Use CIE_LAB colorspace for inverting instead of HSV Test: Manually poking around Change-Id: I014ff31eeae471ee7f6a40a6daa4e7099c2a7ff8
Diffstat (limited to 'libs/hwui/CanvasTransform.cpp')
-rw-r--r--libs/hwui/CanvasTransform.cpp36
1 files changed, 21 insertions, 15 deletions
diff --git a/libs/hwui/CanvasTransform.cpp b/libs/hwui/CanvasTransform.cpp
index bac7a4d17a49..1b15dbd526cc 100644
--- a/libs/hwui/CanvasTransform.cpp
+++ b/libs/hwui/CanvasTransform.cpp
@@ -15,32 +15,38 @@
*/
#include "CanvasTransform.h"
+#include "utils/Color.h"
#include "Properties.h"
+#include <ui/ColorSpace.h>
#include <SkColorFilter.h>
#include <SkPaint.h>
-#include <log/log.h>
+
+#include <algorithm>
+#include <cmath>
namespace android::uirenderer {
static SkColor makeLight(SkColor color) {
- SkScalar hsv[3];
- SkColorToHSV(color, hsv);
- if (hsv[1] > .2f) return color;
- // hsv[1] *= .85f;
- // hsv[2] = std::min(1.0f, std::max(hsv[2], 1 - hsv[2]) * 1.3f);
- hsv[2] = std::max(hsv[2], 1.1f - hsv[2]);
- return SkHSVToColor(SkColorGetA(color), hsv);
+ Lab lab = sRGBToLab(color);
+ float invertedL = std::min(110 - lab.L, 100.0f);
+ if (invertedL > lab.L) {
+ lab.L = invertedL;
+ return LabToSRGB(lab, SkColorGetA(color));
+ } else {
+ return color;
+ }
}
static SkColor makeDark(SkColor color) {
- SkScalar hsv[3];
- SkColorToHSV(color, hsv);
- if (hsv[1] > .2f) return color;
- // hsv[1] *= .85f;
- // hsv[2] = std::max(0.0f, std::min(hsv[2], 1 - hsv[2]) * .7f);
- hsv[2] = std::min(hsv[2], 1.1f - hsv[2]);
- return SkHSVToColor(SkColorGetA(color), hsv);
+ Lab lab = sRGBToLab(color);
+ float invertedL = std::min(110 - lab.L, 100.0f);
+ if (invertedL < lab.L) {
+ lab.L = invertedL;
+ return LabToSRGB(lab, SkColorGetA(color));
+ } else {
+ return color;
+ }
}
static SkColor transformColor(ColorTransform transform, SkColor color) {