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

Side by Side Diff: chrome/browser/profiles/profile_avatar_icon_util.cc

Issue 212603011: Newly created profiles should have the grey silhouette as avatar. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 8 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 | Annotate | Revision Log
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « chrome/browser/profiles/profile_avatar_icon_util.h ('k') | chrome/browser/profiles/profile_info_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698