OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/profiles/profile_avatar_icon_util.h" | 5 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
6 | 6 |
7 #include "base/format_macros.h" | 7 #include "base/format_macros.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/string_number_conversions.h" | 9 #include "base/strings/string_number_conversions.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
170 paint.setColor(highlight_color); | 170 paint.setColor(highlight_color); |
171 canvas->DrawPath(path, paint); | 171 canvas->DrawPath(path, paint); |
172 } | 172 } |
173 } | 173 } |
174 | 174 |
175 } // namespace | 175 } // namespace |
176 | 176 |
177 namespace profiles { | 177 namespace profiles { |
178 | 178 |
179 const int kAvatarIconWidth = 38; | 179 const int kAvatarIconWidth = 38; |
180 const int kAvatarIconHeight = 31; | 180 const int kAvatarIconHeight = 38; |
181 const int kAvatarIconPadding = 2; | 181 const int kAvatarIconPadding = 2; |
182 const SkColor kAvatarTutorialBackgroundColor = SkColorSetRGB(0x42, 0x85, 0xf4); | 182 const SkColor kAvatarTutorialBackgroundColor = SkColorSetRGB(0x42, 0x85, 0xf4); |
183 const SkColor kAvatarTutorialContentTextColor = SkColorSetRGB(0xc6, 0xda, 0xfc); | 183 const SkColor kAvatarTutorialContentTextColor = SkColorSetRGB(0xc6, 0xda, 0xfc); |
184 | 184 |
185 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_"; | 185 const char kDefaultUrlPrefix[] = "chrome://theme/IDR_PROFILE_AVATAR_"; |
186 const char kGAIAPictureFileName[] = "Google Profile Picture.png"; | 186 const char kGAIAPictureFileName[] = "Google Profile Picture.png"; |
187 const char kHighResAvatarFolderName[] = "Avatars"; | 187 const char kHighResAvatarFolderName[] = "Avatars"; |
188 | 188 |
189 const int kDefaultAvatarIconResources[] = { | 189 // This avatar does not exist on the server, the high res copy is in the build. |
190 IDR_PROFILE_AVATAR_0, | 190 const char kNoHighResAvatar[] = "NothingToDownload"; |
191 IDR_PROFILE_AVATAR_1, | |
192 IDR_PROFILE_AVATAR_2, | |
193 IDR_PROFILE_AVATAR_3, | |
194 IDR_PROFILE_AVATAR_4, | |
195 IDR_PROFILE_AVATAR_5, | |
196 IDR_PROFILE_AVATAR_6, | |
197 IDR_PROFILE_AVATAR_7, | |
198 IDR_PROFILE_AVATAR_8, | |
199 IDR_PROFILE_AVATAR_9, | |
200 IDR_PROFILE_AVATAR_10, | |
201 IDR_PROFILE_AVATAR_11, | |
202 IDR_PROFILE_AVATAR_12, | |
203 IDR_PROFILE_AVATAR_13, | |
204 IDR_PROFILE_AVATAR_14, | |
205 IDR_PROFILE_AVATAR_15, | |
206 IDR_PROFILE_AVATAR_16, | |
207 IDR_PROFILE_AVATAR_17, | |
208 IDR_PROFILE_AVATAR_18, | |
209 IDR_PROFILE_AVATAR_19, | |
210 IDR_PROFILE_AVATAR_20, | |
211 IDR_PROFILE_AVATAR_21, | |
212 IDR_PROFILE_AVATAR_22, | |
213 IDR_PROFILE_AVATAR_23, | |
214 IDR_PROFILE_AVATAR_24, | |
215 IDR_PROFILE_AVATAR_25, | |
216 }; | |
217 | 191 |
218 // File names for the high-res avatar icon resources. In the same order as | 192 // The size of the function-static kDefaultAvatarIconResources array below. |
219 // the avatars in kDefaultAvatarIconResources. | 193 const size_t kDefaultAvatarIconsCount = 27; |
220 const char* kDefaultAvatarIconResourceFileNames[] = { | |
221 "avatar_generic.png", | |
222 "avatar_generic_aqua.png", | |
223 "avatar_generic_blue.png", | |
224 "avatar_generic_green.png", | |
225 "avatar_generic_orange.png", | |
226 "avatar_generic_purple.png", | |
227 "avatar_generic_red.png", | |
228 "avatar_generic_yellow.png", | |
229 "avatar_secret_agent.png", | |
230 "avatar_superhero.png", | |
231 "avatar_volley_ball.png", | |
232 "avatar_businessman.png", | |
233 "avatar_ninja.png", | |
234 "avatar_alien.png", | |
235 "avatar_smiley.png", | |
236 "avatar_flower.png", | |
237 "avatar_pizza.png", | |
238 "avatar_soccer.png", | |
239 "avatar_burger.png", | |
240 "avatar_cat.png", | |
241 "avatar_cupcake.png", | |
242 "avatar_dog.png", | |
243 "avatar_horse.png", | |
244 "avatar_margarita.png", | |
245 "avatar_note.png", | |
246 "avatar_sun_cloud.png", | |
247 }; | |
248 | |
249 const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources); | |
250 | 194 |
251 // The first 8 icons are generic. | 195 // The first 8 icons are generic. |
252 const size_t kGenericAvatarIconsCount = 8; | 196 const size_t kGenericAvatarIconsCount = 8; |
253 | 197 |
198 // The avatar used as a placeholder (grey silhouette). | |
199 const int kPlaceholderAvatarIcon = 26; | |
200 | |
254 gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image, | 201 gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image, |
255 bool is_rectangle, | 202 bool is_gaia_image, |
256 int width, int height) { | 203 int width, int height) { |
257 if (!is_rectangle) | 204 // The image requires no border or resizing. |
205 if (!is_gaia_image && image.Height() <= height) | |
258 return image; | 206 return image; |
259 | 207 |
260 gfx::Size size(width, height); | 208 gfx::Size size(width, height); |
261 | 209 |
262 // Source for a centered, sized icon with a border. | 210 // Source for a centered, sized icon. |
211 // GAIA images get a border. | |
263 scoped_ptr<gfx::ImageSkiaSource> source( | 212 scoped_ptr<gfx::ImageSkiaSource> source( |
264 new AvatarImageSource( | 213 new AvatarImageSource( |
265 *image.ToImageSkia(), | 214 *image.ToImageSkia(), |
266 size, | 215 size, |
267 std::min(width, height), | 216 std::min(width, height), |
268 AvatarImageSource::POSITION_CENTER, | 217 AvatarImageSource::POSITION_CENTER, |
269 AvatarImageSource::BORDER_NORMAL)); | 218 is_gaia_image ? AvatarImageSource::BORDER_NORMAL : |
219 AvatarImageSource::BORDER_NONE)); | |
270 | 220 |
271 return gfx::Image(gfx::ImageSkia(source.release(), size)); | 221 return gfx::Image(gfx::ImageSkia(source.release(), size)); |
272 } | 222 } |
273 | 223 |
274 gfx::Image GetAvatarIconForMenu(const gfx::Image& image, | 224 gfx::Image GetAvatarIconForMenu(const gfx::Image& image, |
275 bool is_rectangle) { | 225 bool is_gaia_image) { |
276 return GetSizedAvatarIconWithBorder( | 226 return GetSizedAvatarIconWithBorder( |
277 image, is_rectangle, kAvatarIconWidth, kAvatarIconHeight); | 227 image, is_gaia_image, kAvatarIconWidth, kAvatarIconHeight); |
278 } | 228 } |
279 | 229 |
280 gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, | 230 gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, |
281 bool is_rectangle) { | 231 bool is_gaia_image) { |
282 if (!is_rectangle) | 232 // The image requires no border or resizing. |
233 if (!is_gaia_image && image.Height() <= kAvatarIconHeight) | |
283 return image; | 234 return image; |
284 | 235 |
285 gfx::Size size(kAvatarIconWidth, kAvatarIconHeight); | 236 gfx::Size size(kAvatarIconWidth, kAvatarIconHeight); |
286 | 237 |
287 // Source for a centered, sized icon. | 238 // Source for a centered, sized icon. |
288 scoped_ptr<gfx::ImageSkiaSource> source( | 239 scoped_ptr<gfx::ImageSkiaSource> source( |
289 new AvatarImageSource( | 240 new AvatarImageSource( |
290 *image.ToImageSkia(), | 241 *image.ToImageSkia(), |
291 size, | 242 size, |
292 std::min(kAvatarIconWidth, kAvatarIconHeight), | 243 std::min(kAvatarIconWidth, kAvatarIconHeight), |
293 AvatarImageSource::POSITION_CENTER, | 244 AvatarImageSource::POSITION_CENTER, |
294 AvatarImageSource::BORDER_NONE)); | 245 AvatarImageSource::BORDER_NONE)); |
295 | 246 |
296 return gfx::Image(gfx::ImageSkia(source.release(), size)); | 247 return gfx::Image(gfx::ImageSkia(source.release(), size)); |
297 } | 248 } |
298 | 249 |
299 gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, | 250 gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, |
300 bool is_rectangle, | 251 bool is_gaia_image, |
301 int dst_width, | 252 int dst_width, |
302 int dst_height) { | 253 int dst_height) { |
303 if (!is_rectangle) | 254 // The image requires no border or resizing. |
255 if (!is_gaia_image && image.Height() <= kAvatarIconHeight) | |
304 return image; | 256 return image; |
305 | 257 |
306 int size = std::min(std::min(kAvatarIconWidth, kAvatarIconHeight), | 258 int size = std::min(std::min(kAvatarIconWidth, kAvatarIconHeight), |
307 std::min(dst_width, dst_height)); | 259 std::min(dst_width, dst_height)); |
308 gfx::Size dst_size(dst_width, dst_height); | 260 gfx::Size dst_size(dst_width, dst_height); |
309 | 261 |
310 // Source for a sized icon drawn at the bottom center of the canvas, | 262 // Source for a sized icon drawn at the bottom center of the canvas, |
311 // with an etched border. | 263 // with an etched border (for GAIA images). |
312 scoped_ptr<gfx::ImageSkiaSource> source( | 264 scoped_ptr<gfx::ImageSkiaSource> source( |
313 new AvatarImageSource( | 265 new AvatarImageSource( |
314 *image.ToImageSkia(), | 266 *image.ToImageSkia(), |
315 dst_size, | 267 dst_size, |
316 size, | 268 size, |
317 AvatarImageSource::POSITION_BOTTOM_CENTER, | 269 AvatarImageSource::POSITION_BOTTOM_CENTER, |
318 AvatarImageSource::BORDER_ETCHED)); | 270 is_gaia_image ? AvatarImageSource::BORDER_ETCHED : |
271 AvatarImageSource::BORDER_NONE)); | |
319 | 272 |
320 return gfx::Image(gfx::ImageSkia(source.release(), dst_size)); | 273 return gfx::Image(gfx::ImageSkia(source.release(), dst_size)); |
321 } | 274 } |
322 | 275 |
323 // Helper methods for accessing, transforming and drawing avatar icons. | 276 // Helper methods for accessing, transforming and drawing avatar icons. |
324 size_t GetDefaultAvatarIconCount() { | 277 size_t GetDefaultAvatarIconCount() { |
325 return kDefaultAvatarIconsCount; | 278 return kDefaultAvatarIconsCount; |
326 } | 279 } |
327 | 280 |
328 size_t GetGenericAvatarIconCount() { | 281 size_t GetGenericAvatarIconCount() { |
329 return kGenericAvatarIconsCount; | 282 return kGenericAvatarIconsCount; |
330 } | 283 } |
331 | 284 |
285 int GetPlaceholderAvatarIndex() { | |
286 return kPlaceholderAvatarIcon; | |
287 } | |
288 | |
289 int GetPlaceholderAvatarIconResourceID() { | |
290 return IDR_PROFILE_AVATAR_26; | |
291 } | |
292 | |
332 int GetDefaultAvatarIconResourceIDAtIndex(size_t index) { | 293 int GetDefaultAvatarIconResourceIDAtIndex(size_t index) { |
294 | |
295 // If you modify this array, go modify the kDefaultAvatarIconsCount above. | |
296 static const int kDefaultAvatarIconResources[] = { | |
viettrungluu
2014/04/14 20:34:47
I wonder if you shouldn't instead declare this as
Mike Lerman
2014/04/15 15:15:30
Done.
| |
297 IDR_PROFILE_AVATAR_0, | |
298 IDR_PROFILE_AVATAR_1, | |
299 IDR_PROFILE_AVATAR_2, | |
300 IDR_PROFILE_AVATAR_3, | |
301 IDR_PROFILE_AVATAR_4, | |
302 IDR_PROFILE_AVATAR_5, | |
303 IDR_PROFILE_AVATAR_6, | |
304 IDR_PROFILE_AVATAR_7, | |
305 IDR_PROFILE_AVATAR_8, | |
306 IDR_PROFILE_AVATAR_9, | |
307 IDR_PROFILE_AVATAR_10, | |
308 IDR_PROFILE_AVATAR_11, | |
309 IDR_PROFILE_AVATAR_12, | |
310 IDR_PROFILE_AVATAR_13, | |
311 IDR_PROFILE_AVATAR_14, | |
312 IDR_PROFILE_AVATAR_15, | |
313 IDR_PROFILE_AVATAR_16, | |
314 IDR_PROFILE_AVATAR_17, | |
315 IDR_PROFILE_AVATAR_18, | |
316 IDR_PROFILE_AVATAR_19, | |
317 IDR_PROFILE_AVATAR_20, | |
318 IDR_PROFILE_AVATAR_21, | |
319 IDR_PROFILE_AVATAR_22, | |
320 IDR_PROFILE_AVATAR_23, | |
321 IDR_PROFILE_AVATAR_24, | |
322 IDR_PROFILE_AVATAR_25, | |
323 IDR_PROFILE_AVATAR_26, | |
324 }; | |
325 | |
333 DCHECK(IsDefaultAvatarIconIndex(index)); | 326 DCHECK(IsDefaultAvatarIconIndex(index)); |
334 return kDefaultAvatarIconResources[index]; | 327 return kDefaultAvatarIconResources[index]; |
335 } | 328 } |
336 | 329 |
337 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index) { | 330 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index) { |
331 // File names for the high-res avatar icon resources. In the same order as | |
332 // the avatars in kDefaultAvatarIconResources. | |
333 static const char* kDefaultAvatarIconResourceFileNames[] = { | |
viettrungluu
2014/04/14 20:34:47
1) Note that this is one of the (few) times where
Mike Lerman
2014/04/15 15:15:30
The single array (instead of the parallel ones) is
| |
334 "avatar_generic.png", | |
335 "avatar_generic_aqua.png", | |
336 "avatar_generic_blue.png", | |
337 "avatar_generic_green.png", | |
338 "avatar_generic_orange.png", | |
339 "avatar_generic_purple.png", | |
340 "avatar_generic_red.png", | |
341 "avatar_generic_yellow.png", | |
342 "avatar_secret_agent.png", | |
343 "avatar_superhero.png", | |
344 "avatar_volley_ball.png", | |
345 "avatar_businessman.png", | |
346 "avatar_ninja.png", | |
347 "avatar_alien.png", | |
348 "avatar_smiley.png", | |
349 "avatar_flower.png", | |
350 "avatar_pizza.png", | |
351 "avatar_soccer.png", | |
352 "avatar_burger.png", | |
353 "avatar_cat.png", | |
354 "avatar_cupcake.png", | |
355 "avatar_dog.png", | |
356 "avatar_horse.png", | |
357 "avatar_margarita.png", | |
358 "avatar_note.png", | |
359 "avatar_sun_cloud.png", | |
360 kNoHighResAvatar, | |
361 }; | |
362 | |
338 return kDefaultAvatarIconResourceFileNames[index]; | 363 return kDefaultAvatarIconResourceFileNames[index]; |
339 } | 364 } |
340 | 365 |
366 const char* GetNoHighResAvatarFileName() { | |
367 return kNoHighResAvatar; | |
368 } | |
369 | |
341 std::string GetDefaultAvatarIconUrl(size_t index) { | 370 std::string GetDefaultAvatarIconUrl(size_t index) { |
342 DCHECK(IsDefaultAvatarIconIndex(index)); | 371 DCHECK(IsDefaultAvatarIconIndex(index)); |
343 return base::StringPrintf("%s%" PRIuS, kDefaultUrlPrefix, index); | 372 return base::StringPrintf("%s%" PRIuS, kDefaultUrlPrefix, index); |
344 } | 373 } |
345 | 374 |
346 bool IsDefaultAvatarIconIndex(size_t index) { | 375 bool IsDefaultAvatarIconIndex(size_t index) { |
347 return index < kDefaultAvatarIconsCount; | 376 return index < kDefaultAvatarIconsCount; |
348 } | 377 } |
349 | 378 |
350 bool IsDefaultAvatarIconUrl(const std::string& url, | 379 bool IsDefaultAvatarIconUrl(const std::string& url, |
(...skipping 11 matching lines...) Expand all Loading... | |
362 int_value >= static_cast<int>(kDefaultAvatarIconsCount)) | 391 int_value >= static_cast<int>(kDefaultAvatarIconsCount)) |
363 return false; | 392 return false; |
364 *icon_index = int_value; | 393 *icon_index = int_value; |
365 return true; | 394 return true; |
366 } | 395 } |
367 | 396 |
368 return false; | 397 return false; |
369 } | 398 } |
370 | 399 |
371 } // namespace profiles | 400 } // namespace profiles |
OLD | NEW |