Chromium Code Reviews| 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 const int kDefaultAvatarIconResources[] = { |
| 190 IDR_PROFILE_AVATAR_0, | 190 IDR_PROFILE_AVATAR_0, |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 206 IDR_PROFILE_AVATAR_16, | 206 IDR_PROFILE_AVATAR_16, |
| 207 IDR_PROFILE_AVATAR_17, | 207 IDR_PROFILE_AVATAR_17, |
| 208 IDR_PROFILE_AVATAR_18, | 208 IDR_PROFILE_AVATAR_18, |
| 209 IDR_PROFILE_AVATAR_19, | 209 IDR_PROFILE_AVATAR_19, |
| 210 IDR_PROFILE_AVATAR_20, | 210 IDR_PROFILE_AVATAR_20, |
| 211 IDR_PROFILE_AVATAR_21, | 211 IDR_PROFILE_AVATAR_21, |
| 212 IDR_PROFILE_AVATAR_22, | 212 IDR_PROFILE_AVATAR_22, |
| 213 IDR_PROFILE_AVATAR_23, | 213 IDR_PROFILE_AVATAR_23, |
| 214 IDR_PROFILE_AVATAR_24, | 214 IDR_PROFILE_AVATAR_24, |
| 215 IDR_PROFILE_AVATAR_25, | 215 IDR_PROFILE_AVATAR_25, |
| 216 IDR_PROFILE_AVATAR_26, | |
| 216 }; | 217 }; |
| 217 | 218 |
| 219 // This avatar does not exist on the server, the high res copy is in the build. | |
| 220 const char* kNoHighResAvatar = "NothingToDownload"; | |
|
viettrungluu
2014/04/11 18:08:20
const char kNoHighResAvatar[]
Mike Lerman
2014/04/14 18:51:29
Done.
| |
| 221 | |
| 218 // File names for the high-res avatar icon resources. In the same order as | 222 // File names for the high-res avatar icon resources. In the same order as |
| 219 // the avatars in kDefaultAvatarIconResources. | 223 // the avatars in kDefaultAvatarIconResources. |
| 220 const char* kDefaultAvatarIconResourceFileNames[] = { | 224 const char* kDefaultAvatarIconResourceFileNames[] = { |
|
viettrungluu
2014/04/11 18:08:20
const char* const
Mike Lerman
2014/04/14 18:51:29
Done.
| |
| 221 "avatar_generic.png", | 225 "avatar_generic.png", |
| 222 "avatar_generic_aqua.png", | 226 "avatar_generic_aqua.png", |
| 223 "avatar_generic_blue.png", | 227 "avatar_generic_blue.png", |
| 224 "avatar_generic_green.png", | 228 "avatar_generic_green.png", |
| 225 "avatar_generic_orange.png", | 229 "avatar_generic_orange.png", |
| 226 "avatar_generic_purple.png", | 230 "avatar_generic_purple.png", |
| 227 "avatar_generic_red.png", | 231 "avatar_generic_red.png", |
| 228 "avatar_generic_yellow.png", | 232 "avatar_generic_yellow.png", |
| 229 "avatar_secret_agent.png", | 233 "avatar_secret_agent.png", |
| 230 "avatar_superhero.png", | 234 "avatar_superhero.png", |
| 231 "avatar_volley_ball.png", | 235 "avatar_volley_ball.png", |
| 232 "avatar_businessman.png", | 236 "avatar_businessman.png", |
| 233 "avatar_ninja.png", | 237 "avatar_ninja.png", |
| 234 "avatar_alien.png", | 238 "avatar_alien.png", |
| 235 "avatar_smiley.png", | 239 "avatar_smiley.png", |
| 236 "avatar_flower.png", | 240 "avatar_flower.png", |
| 237 "avatar_pizza.png", | 241 "avatar_pizza.png", |
| 238 "avatar_soccer.png", | 242 "avatar_soccer.png", |
| 239 "avatar_burger.png", | 243 "avatar_burger.png", |
| 240 "avatar_cat.png", | 244 "avatar_cat.png", |
| 241 "avatar_cupcake.png", | 245 "avatar_cupcake.png", |
| 242 "avatar_dog.png", | 246 "avatar_dog.png", |
| 243 "avatar_horse.png", | 247 "avatar_horse.png", |
| 244 "avatar_margarita.png", | 248 "avatar_margarita.png", |
| 245 "avatar_note.png", | 249 "avatar_note.png", |
| 246 "avatar_sun_cloud.png", | 250 "avatar_sun_cloud.png", |
| 251 kNoHighResAvatar, | |
| 247 }; | 252 }; |
| 248 | 253 |
| 249 const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources); | 254 const size_t kDefaultAvatarIconsCount = arraysize(kDefaultAvatarIconResources); |
| 250 | 255 |
| 251 // The first 8 icons are generic. | 256 // The first 8 icons are generic. |
| 252 const size_t kGenericAvatarIconsCount = 8; | 257 const size_t kGenericAvatarIconsCount = 8; |
| 253 | 258 |
| 259 // The avatar used as a placeholder (grey silhouette). | |
| 260 const int kPlaceholderAvatarIcon = 26; | |
| 261 | |
| 254 gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image, | 262 gfx::Image GetSizedAvatarIconWithBorder(const gfx::Image& image, |
| 255 bool is_rectangle, | 263 bool is_gaia_image, |
| 256 int width, int height) { | 264 int width, int height) { |
| 257 if (!is_rectangle) | 265 // The image requires no border or resizing. |
| 266 if (!is_gaia_image && image.Height() <= height) | |
| 258 return image; | 267 return image; |
| 259 | 268 |
| 260 gfx::Size size(width, height); | 269 gfx::Size size(width, height); |
| 261 | 270 |
| 262 // Source for a centered, sized icon with a border. | 271 // Source for a centered, sized icon. |
| 272 // GAIA images get a border. | |
| 263 scoped_ptr<gfx::ImageSkiaSource> source( | 273 scoped_ptr<gfx::ImageSkiaSource> source( |
| 264 new AvatarImageSource( | 274 new AvatarImageSource( |
| 265 *image.ToImageSkia(), | 275 *image.ToImageSkia(), |
| 266 size, | 276 size, |
| 267 std::min(width, height), | 277 std::min(width, height), |
| 268 AvatarImageSource::POSITION_CENTER, | 278 AvatarImageSource::POSITION_CENTER, |
| 269 AvatarImageSource::BORDER_NORMAL)); | 279 is_gaia_image ? AvatarImageSource::BORDER_NORMAL : |
| 280 AvatarImageSource::BORDER_NONE)); | |
| 270 | 281 |
| 271 return gfx::Image(gfx::ImageSkia(source.release(), size)); | 282 return gfx::Image(gfx::ImageSkia(source.release(), size)); |
| 272 } | 283 } |
| 273 | 284 |
| 274 gfx::Image GetAvatarIconForMenu(const gfx::Image& image, | 285 gfx::Image GetAvatarIconForMenu(const gfx::Image& image, |
| 275 bool is_rectangle) { | 286 bool is_gaia_image) { |
| 276 return GetSizedAvatarIconWithBorder( | 287 return GetSizedAvatarIconWithBorder( |
| 277 image, is_rectangle, kAvatarIconWidth, kAvatarIconHeight); | 288 image, is_gaia_image, kAvatarIconWidth, kAvatarIconHeight); |
| 278 } | 289 } |
| 279 | 290 |
| 280 gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, | 291 gfx::Image GetAvatarIconForWebUI(const gfx::Image& image, |
| 281 bool is_rectangle) { | 292 bool is_gaia_image) { |
| 282 if (!is_rectangle) | 293 // The image requires no border or resizing. |
| 294 if (!is_gaia_image && image.Height() <= kAvatarIconHeight) | |
| 283 return image; | 295 return image; |
| 284 | 296 |
| 285 gfx::Size size(kAvatarIconWidth, kAvatarIconHeight); | 297 gfx::Size size(kAvatarIconWidth, kAvatarIconHeight); |
| 286 | 298 |
| 287 // Source for a centered, sized icon. | 299 // Source for a centered, sized icon. |
| 288 scoped_ptr<gfx::ImageSkiaSource> source( | 300 scoped_ptr<gfx::ImageSkiaSource> source( |
| 289 new AvatarImageSource( | 301 new AvatarImageSource( |
| 290 *image.ToImageSkia(), | 302 *image.ToImageSkia(), |
| 291 size, | 303 size, |
| 292 std::min(kAvatarIconWidth, kAvatarIconHeight), | 304 std::min(kAvatarIconWidth, kAvatarIconHeight), |
| 293 AvatarImageSource::POSITION_CENTER, | 305 AvatarImageSource::POSITION_CENTER, |
| 294 AvatarImageSource::BORDER_NONE)); | 306 AvatarImageSource::BORDER_NONE)); |
| 295 | 307 |
| 296 return gfx::Image(gfx::ImageSkia(source.release(), size)); | 308 return gfx::Image(gfx::ImageSkia(source.release(), size)); |
| 297 } | 309 } |
| 298 | 310 |
| 299 gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, | 311 gfx::Image GetAvatarIconForTitleBar(const gfx::Image& image, |
| 300 bool is_rectangle, | 312 bool is_gaia_image, |
| 301 int dst_width, | 313 int dst_width, |
| 302 int dst_height) { | 314 int dst_height) { |
| 303 if (!is_rectangle) | 315 // The image requires no border or resizing. |
| 316 if (!is_gaia_image && image.Height() <= kAvatarIconHeight) | |
| 304 return image; | 317 return image; |
| 305 | 318 |
| 306 int size = std::min(std::min(kAvatarIconWidth, kAvatarIconHeight), | 319 int size = std::min(std::min(kAvatarIconWidth, kAvatarIconHeight), |
| 307 std::min(dst_width, dst_height)); | 320 std::min(dst_width, dst_height)); |
| 308 gfx::Size dst_size(dst_width, dst_height); | 321 gfx::Size dst_size(dst_width, dst_height); |
| 309 | 322 |
| 310 // Source for a sized icon drawn at the bottom center of the canvas, | 323 // Source for a sized icon drawn at the bottom center of the canvas, |
| 311 // with an etched border. | 324 // with an etched border (for GAIA images). |
| 312 scoped_ptr<gfx::ImageSkiaSource> source( | 325 scoped_ptr<gfx::ImageSkiaSource> source( |
| 313 new AvatarImageSource( | 326 new AvatarImageSource( |
| 314 *image.ToImageSkia(), | 327 *image.ToImageSkia(), |
| 315 dst_size, | 328 dst_size, |
| 316 size, | 329 size, |
| 317 AvatarImageSource::POSITION_BOTTOM_CENTER, | 330 AvatarImageSource::POSITION_BOTTOM_CENTER, |
| 318 AvatarImageSource::BORDER_ETCHED)); | 331 is_gaia_image ? AvatarImageSource::BORDER_ETCHED : |
| 332 AvatarImageSource::BORDER_NONE)); | |
| 319 | 333 |
| 320 return gfx::Image(gfx::ImageSkia(source.release(), dst_size)); | 334 return gfx::Image(gfx::ImageSkia(source.release(), dst_size)); |
| 321 } | 335 } |
| 322 | 336 |
| 323 // Helper methods for accessing, transforming and drawing avatar icons. | 337 // Helper methods for accessing, transforming and drawing avatar icons. |
| 324 size_t GetDefaultAvatarIconCount() { | 338 size_t GetDefaultAvatarIconCount() { |
| 325 return kDefaultAvatarIconsCount; | 339 return kDefaultAvatarIconsCount; |
| 326 } | 340 } |
| 327 | 341 |
| 328 size_t GetGenericAvatarIconCount() { | 342 size_t GetGenericAvatarIconCount() { |
| 329 return kGenericAvatarIconsCount; | 343 return kGenericAvatarIconsCount; |
| 330 } | 344 } |
| 331 | 345 |
| 346 int GetPlaceholderAvatarIndex() { | |
| 347 return kPlaceholderAvatarIcon; | |
| 348 } | |
| 349 | |
| 350 int GetPlaceholderAvatarIconResourceID() { | |
| 351 return IDR_PROFILE_AVATAR_26; | |
| 352 } | |
| 353 | |
| 332 int GetDefaultAvatarIconResourceIDAtIndex(size_t index) { | 354 int GetDefaultAvatarIconResourceIDAtIndex(size_t index) { |
| 333 DCHECK(IsDefaultAvatarIconIndex(index)); | 355 DCHECK(IsDefaultAvatarIconIndex(index)); |
| 334 return kDefaultAvatarIconResources[index]; | 356 return kDefaultAvatarIconResources[index]; |
| 335 } | 357 } |
| 336 | 358 |
| 337 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index) { | 359 const char* GetDefaultAvatarIconFileNameAtIndex(size_t index) { |
| 338 return kDefaultAvatarIconResourceFileNames[index]; | 360 return kDefaultAvatarIconResourceFileNames[index]; |
| 339 } | 361 } |
| 340 | 362 |
| 363 const char* GetNoHighResAvatarFileName() { | |
| 364 return kNoHighResAvatar; | |
| 365 } | |
| 366 | |
| 341 std::string GetDefaultAvatarIconUrl(size_t index) { | 367 std::string GetDefaultAvatarIconUrl(size_t index) { |
| 342 DCHECK(IsDefaultAvatarIconIndex(index)); | 368 DCHECK(IsDefaultAvatarIconIndex(index)); |
| 343 return base::StringPrintf("%s%" PRIuS, kDefaultUrlPrefix, index); | 369 return base::StringPrintf("%s%" PRIuS, kDefaultUrlPrefix, index); |
| 344 } | 370 } |
| 345 | 371 |
| 346 bool IsDefaultAvatarIconIndex(size_t index) { | 372 bool IsDefaultAvatarIconIndex(size_t index) { |
| 347 return index < kDefaultAvatarIconsCount; | 373 return index < kDefaultAvatarIconsCount; |
| 348 } | 374 } |
| 349 | 375 |
| 350 bool IsDefaultAvatarIconUrl(const std::string& url, | 376 bool IsDefaultAvatarIconUrl(const std::string& url, |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 362 int_value >= static_cast<int>(kDefaultAvatarIconsCount)) | 388 int_value >= static_cast<int>(kDefaultAvatarIconsCount)) |
| 363 return false; | 389 return false; |
| 364 *icon_index = int_value; | 390 *icon_index = int_value; |
| 365 return true; | 391 return true; |
| 366 } | 392 } |
| 367 | 393 |
| 368 return false; | 394 return false; |
| 369 } | 395 } |
| 370 | 396 |
| 371 } // namespace profiles | 397 } // namespace profiles |
| OLD | NEW |