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

Side by Side Diff: ui/gfx/color_utils.cc

Issue 649203003: Type conversion fixes, ui/gfx/ edition. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 6 years, 1 month 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
« no previous file with comments | « ui/gfx/color_analysis.cc ('k') | ui/gfx/display.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "ui/gfx/color_utils.h" 5 #include "ui/gfx/color_utils.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 #if defined(OS_WIN) 8 #if defined(OS_WIN)
9 #include <windows.h> 9 #include <windows.h>
10 #endif 10 #endif
11 11
12 #include <algorithm> 12 #include <algorithm>
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/logging.h" 15 #include "base/logging.h"
16 #include "base/numerics/safe_conversions.h"
16 #include "build/build_config.h" 17 #include "build/build_config.h"
17 #if defined(OS_WIN) 18 #if defined(OS_WIN)
18 #include "skia/ext/skia_utils_win.h" 19 #include "skia/ext/skia_utils_win.h"
19 #endif 20 #endif
20 #include "third_party/skia/include/core/SkBitmap.h" 21 #include "third_party/skia/include/core/SkBitmap.h"
21 22
22 namespace color_utils { 23 namespace color_utils {
23 24
24 25
25 // Helper functions ----------------------------------------------------------- 26 // Helper functions -----------------------------------------------------------
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 (foreground_luminance / background_luminance) : 71 (foreground_luminance / background_luminance) :
71 (background_luminance / foreground_luminance); 72 (background_luminance / foreground_luminance);
72 } 73 }
73 74
74 } // namespace 75 } // namespace
75 76
76 77
77 // ---------------------------------------------------------------------------- 78 // ----------------------------------------------------------------------------
78 79
79 unsigned char GetLuminanceForColor(SkColor color) { 80 unsigned char GetLuminanceForColor(SkColor color) {
80 int luma = static_cast<int>((0.3 * SkColorGetR(color)) + 81 return base::saturated_cast<unsigned char>(
81 (0.59 * SkColorGetG(color)) + 82 (0.3 * SkColorGetR(color)) +
82 (0.11 * SkColorGetB(color))); 83 (0.59 * SkColorGetG(color)) +
83 return std::max(std::min(luma, 255), 0); 84 (0.11 * SkColorGetB(color)));
84 } 85 }
85 86
86 double RelativeLuminance(SkColor color) { 87 double RelativeLuminance(SkColor color) {
87 return (0.2126 * ConvertSRGB(SkColorGetR(color))) + 88 return (0.2126 * ConvertSRGB(SkColorGetR(color))) +
88 (0.7152 * ConvertSRGB(SkColorGetG(color))) + 89 (0.7152 * ConvertSRGB(SkColorGetG(color))) +
89 (0.0722 * ConvertSRGB(SkColorGetB(color))); 90 (0.0722 * ConvertSRGB(SkColorGetB(color)));
90 } 91 }
91 92
92 void SkColorToHSL(SkColor c, HSL* hsl) { 93 void SkColorToHSL(SkColor c, HSL* hsl) {
93 double r = static_cast<double>(SkColorGetR(c)) / 255.0; 94 double r = static_cast<double>(SkColorGetR(c)) / 255.0;
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 // If there's no color, we don't care about hue and can do everything based on 130 // If there's no color, we don't care about hue and can do everything based on
130 // brightness. 131 // brightness.
131 if (!saturation) { 132 if (!saturation) {
132 uint8 light; 133 uint8 light;
133 134
134 if (lightness < 0) 135 if (lightness < 0)
135 light = 0; 136 light = 0;
136 else if (lightness >= 1.0) 137 else if (lightness >= 1.0)
137 light = 255; 138 light = 255;
138 else 139 else
139 light = SkDoubleToFixed(lightness) >> 8; 140 light = static_cast<uint8>(SkDoubleToFixed(lightness) >> 8);
140 141
141 return SkColorSetARGB(alpha, light, light, light); 142 return SkColorSetARGB(alpha, light, light, light);
142 } 143 }
143 144
144 double temp2 = (lightness < 0.5) ? 145 double temp2 = (lightness < 0.5) ?
145 (lightness * (1.0 + saturation)) : 146 (lightness * (1.0 + saturation)) :
146 (lightness + saturation - (lightness * saturation)); 147 (lightness + saturation - (lightness * saturation));
147 double temp1 = 2.0 * lightness - temp2; 148 double temp1 = 2.0 * lightness - temp2;
148 return SkColorSetARGB(alpha, 149 return SkColorSetARGB(alpha,
149 calcHue(temp1, temp2, hue + 1.0 / 3.0), 150 calcHue(temp1, temp2, hue + 1.0 / 3.0),
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
191 : hsl.h >= lower_bound.h && hsl.h <= upper_bound.h; 192 : hsl.h >= lower_bound.h && hsl.h <= upper_bound.h;
192 return (upper_bound.h < 0 || lower_bound.h < 0 || matches_hue) && 193 return (upper_bound.h < 0 || lower_bound.h < 0 || matches_hue) &&
193 (upper_bound.s < 0 || lower_bound.s < 0 || 194 (upper_bound.s < 0 || lower_bound.s < 0 ||
194 (hsl.s >= lower_bound.s && hsl.s <= upper_bound.s)) && 195 (hsl.s >= lower_bound.s && hsl.s <= upper_bound.s)) &&
195 (upper_bound.l < 0 || lower_bound.l < 0 || 196 (upper_bound.l < 0 || lower_bound.l < 0 ||
196 (hsl.l >= lower_bound.l && hsl.l <= upper_bound.l)); 197 (hsl.l >= lower_bound.l && hsl.l <= upper_bound.l));
197 } 198 }
198 199
199 SkColor HSLShift(SkColor color, const HSL& shift) { 200 SkColor HSLShift(SkColor color, const HSL& shift) {
200 HSL hsl; 201 HSL hsl;
201 int alpha = SkColorGetA(color); 202 SkAlpha alpha = SkColorGetA(color);
202 SkColorToHSL(color, &hsl); 203 SkColorToHSL(color, &hsl);
203 204
204 // Replace the hue with the tint's hue. 205 // Replace the hue with the tint's hue.
205 if (shift.h >= 0) 206 if (shift.h >= 0)
206 hsl.h = shift.h; 207 hsl.h = shift.h;
207 208
208 // Change the saturation. 209 // Change the saturation.
209 if (shift.s >= 0) { 210 if (shift.s >= 0) {
210 if (shift.s <= 0.5) 211 if (shift.s <= 0.5)
211 hsl.s *= shift.s * 2.0; 212 hsl.s *= shift.s * 2.0;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 SkColor GetSysSkColor(int which) { 308 SkColor GetSysSkColor(int which) {
308 #if defined(OS_WIN) 309 #if defined(OS_WIN)
309 return skia::COLORREFToSkColor(GetSysColor(which)); 310 return skia::COLORREFToSkColor(GetSysColor(which));
310 #else 311 #else
311 NOTIMPLEMENTED(); 312 NOTIMPLEMENTED();
312 return SK_ColorLTGRAY; 313 return SK_ColorLTGRAY;
313 #endif 314 #endif
314 } 315 }
315 316
316 } // namespace color_utils 317 } // namespace color_utils
OLDNEW
« no previous file with comments | « ui/gfx/color_analysis.cc ('k') | ui/gfx/display.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698