Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(199)

Side by Side Diff: components/favicon_base/fallback_icon_style.cc

Issue 1761183002: color_utils cleanup: (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/favicon_base/fallback_icon_style.h" 5 #include "components/favicon_base/fallback_icon_style.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ui/gfx/color_analysis.h" 9 #include "ui/gfx/color_analysis.h"
10 #include "ui/gfx/color_utils.h" 10 #include "ui/gfx/color_utils.h"
11 11
12 namespace favicon_base { 12 namespace favicon_base {
13 13
14 namespace { 14 namespace {
15 15
16 // Luminance threshold for background color determine whether to use dark or 16 // Luma threshold for background color determine whether to use dark or light
17 // light text color. 17 // text color.
18 const int kDarkTextLuminanceThreshold = 190; 18 const uint8_t kDarkTextLumaThreshold = 190;
19 19
20 // The maximum luminance of the background color to ensure light text is 20 // The maximum lightness of the background color to ensure light text is
21 // readable. 21 // readable.
22 const double kMaxBackgroundColorLuminance = 0.67; 22 const double kMaxBackgroundColorLightness = 0.67;
23 const double kMinBackgroundColorLuminance = 0.15; 23 const double kMinBackgroundColorLightness = 0.15;
24 24
25 // Default values for FallbackIconStyle. 25 // Default values for FallbackIconStyle.
26 const SkColor kDefaultBackgroundColor = SkColorSetRGB(0x78, 0x78, 0x78); 26 const SkColor kDefaultBackgroundColor = SkColorSetRGB(0x78, 0x78, 0x78);
27 const SkColor kDefaultTextColorDark = SK_ColorBLACK; 27 const SkColor kDefaultTextColorDark = SK_ColorBLACK;
28 const SkColor kDefaultTextColorLight = SK_ColorWHITE; 28 const SkColor kDefaultTextColorLight = SK_ColorWHITE;
29 const double kDefaultFontSizeRatio = 0.44; 29 const double kDefaultFontSizeRatio = 0.44;
30 const double kDefaultRoundness = 0; // Square. Round corners are applied 30 const double kDefaultRoundness = 0; // Square. Round corners are applied
31 // externally (Javascript or Java). 31 // externally (Javascript or Java).
32 32
33 } // namespace 33 } // namespace
(...skipping 10 matching lines...) Expand all
44 44
45 bool FallbackIconStyle::operator==(const FallbackIconStyle& other) const { 45 bool FallbackIconStyle::operator==(const FallbackIconStyle& other) const {
46 return background_color == other.background_color && 46 return background_color == other.background_color &&
47 text_color == other.text_color && 47 text_color == other.text_color &&
48 font_size_ratio == other.font_size_ratio && 48 font_size_ratio == other.font_size_ratio &&
49 roundness == other.roundness; 49 roundness == other.roundness;
50 } 50 }
51 51
52 void MatchFallbackIconTextColorAgainstBackgroundColor( 52 void MatchFallbackIconTextColorAgainstBackgroundColor(
53 FallbackIconStyle* style) { 53 FallbackIconStyle* style) {
54 int luminance = color_utils::GetLuminanceForColor(style->background_color); 54 const uint8_t luma = color_utils::Luma(style->background_color);
55 style->text_color = (luminance >= kDarkTextLuminanceThreshold ? 55 style->text_color = (luma >= kDarkTextLumaThreshold) ?
56 kDefaultTextColorDark : kDefaultTextColorLight); 56 kDefaultTextColorDark : kDefaultTextColorLight;
57 } 57 }
58 58
59 bool ValidateFallbackIconStyle(const FallbackIconStyle& style) { 59 bool ValidateFallbackIconStyle(const FallbackIconStyle& style) {
60 return style.font_size_ratio >= 0.0 && style.font_size_ratio <= 1.0 && 60 return style.font_size_ratio >= 0.0 && style.font_size_ratio <= 1.0 &&
61 style.roundness >= 0.0 && style.roundness <= 1.0; 61 style.roundness >= 0.0 && style.roundness <= 1.0;
62 } 62 }
63 63
64 void SetDominantColorAsBackground( 64 void SetDominantColorAsBackground(
65 const scoped_refptr<base::RefCountedMemory>& bitmap_data, 65 const scoped_refptr<base::RefCountedMemory>& bitmap_data,
66 FallbackIconStyle* style) { 66 FallbackIconStyle* style) {
67 // Try to ensure color's luminance isn't too large so that light text is 67 // Try to ensure color's lightness isn't too large so that light text is
68 // visible. Set an upper bound for the dominant color. 68 // visible. Set an upper bound for the dominant color.
69 const color_utils::HSL lower_bound{-1.0, -1.0, kMinBackgroundColorLuminance}; 69 const color_utils::HSL lower_bound{-1.0, -1.0, kMinBackgroundColorLightness};
70 const color_utils::HSL upper_bound{-1.0, -1.0, kMaxBackgroundColorLuminance}; 70 const color_utils::HSL upper_bound{-1.0, -1.0, kMaxBackgroundColorLightness};
71 color_utils::GridSampler sampler; 71 color_utils::GridSampler sampler;
72 SkColor dominant_color = color_utils::CalculateKMeanColorOfPNG( 72 SkColor dominant_color = color_utils::CalculateKMeanColorOfPNG(
73 bitmap_data, lower_bound, upper_bound, &sampler); 73 bitmap_data, lower_bound, upper_bound, &sampler);
74 // |CalculateKMeanColorOfPNG| will try to return a color that lies within the 74 // |CalculateKMeanColorOfPNG| will try to return a color that lies within the
75 // specified bounds if one exists in the image. If there's no such color, it 75 // specified bounds if one exists in the image. If there's no such color, it
76 // will return the dominant color which may be lighter than our upper bound. 76 // will return the dominant color which may be lighter than our upper bound.
77 // Clamp luminance down to a reasonable maximum value so text is readable. 77 // Clamp lightness down to a reasonable maximum value so text is readable.
78 color_utils::HSL color_hsl; 78 color_utils::HSL color_hsl;
79 color_utils::SkColorToHSL(dominant_color, &color_hsl); 79 color_utils::SkColorToHSL(dominant_color, &color_hsl);
80 color_hsl.l = std::min(color_hsl.l, kMaxBackgroundColorLuminance); 80 color_hsl.l = std::min(color_hsl.l, kMaxBackgroundColorLightness);
81 style->background_color = 81 style->background_color =
82 color_utils::HSLToSkColor(color_hsl, SK_AlphaOPAQUE); 82 color_utils::HSLToSkColor(color_hsl, SK_AlphaOPAQUE);
83 } 83 }
84 84
85 } // namespace favicon_base 85 } // namespace favicon_base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698