Index: ui/gfx/color_utils.cc |
diff --git a/ui/gfx/color_utils.cc b/ui/gfx/color_utils.cc |
index de429495990ae13bcfaaac696953599f87c788ce..3e00326f5223f6181d70fc01c0233a9442bb3bbd 100644 |
--- a/ui/gfx/color_utils.cc |
+++ b/ui/gfx/color_utils.cc |
@@ -151,6 +151,36 @@ SkColor HSLToSkColor(const HSL& hsl, SkAlpha alpha) { |
calcHue(temp1, temp2, hue - 1.0 / 3.0)); |
} |
+bool IsWithinHSLRange(const HSL& hsl, |
+ const HSL& lower_bound, |
+ const HSL& upper_bound) { |
+ DCHECK(hsl.h >= 0 && hsl.h <= 1) << hsl.h; |
+ DCHECK(hsl.s >= 0 && hsl.s <= 1) << hsl.s; |
+ DCHECK(hsl.l >= 0 && hsl.l <= 1) << hsl.l; |
+ DCHECK(lower_bound.h < 0 || upper_bound.h < 0 || |
+ (lower_bound.h <= 1 && upper_bound.h <= lower_bound.h + 1)) |
+ << "lower_bound.h: " << lower_bound.h |
+ << ", upper_bound.h: " << upper_bound.h; |
+ DCHECK(lower_bound.s < 0 || upper_bound.s < 0 || |
+ (lower_bound.s <= upper_bound.s && upper_bound.s <= 1)) |
+ << "lower_bound.s: " << lower_bound.s |
+ << ", upper_bound.s: " << upper_bound.s; |
+ DCHECK(lower_bound.l < 0 || upper_bound.l < 0 || |
+ (lower_bound.l <= upper_bound.l && upper_bound.l <= 1)) |
+ << "lower_bound.l: " << lower_bound.l |
+ << ", upper_bound.l: " << upper_bound.l; |
+ |
+ // If the upper hue is >1, the given hue bounds wrap around at 1. |
+ bool matches_hue = upper_bound.h > 1 |
+ ? hsl.h >= lower_bound.h || hsl.h <= upper_bound.h - 1 |
+ : hsl.h >= lower_bound.h && hsl.h <= upper_bound.h; |
+ return (upper_bound.h < 0 || lower_bound.h < 0 || matches_hue) && |
+ (upper_bound.s < 0 || lower_bound.s < 0 || |
+ (hsl.s >= lower_bound.s && hsl.s <= upper_bound.s)) && |
+ (upper_bound.l < 0 || lower_bound.l < 0 || |
+ (hsl.l >= lower_bound.l && hsl.l <= upper_bound.l)); |
+} |
+ |
SkColor HSLShift(SkColor color, const HSL& shift) { |
HSL hsl; |
int alpha = SkColorGetA(color); |