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

Unified Diff: chrome/browser/profiles/profile_avatar_icon_util.cc

Issue 2057203002: Bringing back fast user switching on desktop user menu (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added check for guest button Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profiles/profile_avatar_icon_util.cc
diff --git a/chrome/browser/profiles/profile_avatar_icon_util.cc b/chrome/browser/profiles/profile_avatar_icon_util.cc
index 2d82b35a684ce27f9220bf0795ba8455ffd41856..a9e4e90446d30cb6c2b4b016027b4bc3e15349f0 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.cc
+++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -29,6 +29,7 @@
#include "ui/gfx/image/canvas_image_source.h"
#include "ui/gfx/image/image.h"
#include "ui/gfx/image/image_skia_operations.h"
+#include "ui/gfx/path.h"
#include "ui/gfx/skia_util.h"
#include "url/gurl.h"
#include "url/url_canon.h"
@@ -72,7 +73,8 @@ class AvatarImageSource : public gfx::CanvasImageSource {
const gfx::Size& canvas_size,
int width,
AvatarPosition position,
- AvatarBorder border);
+ AvatarBorder border,
+ profiles::AvatarShape shape=profiles::SHAPE_SQUARE);
~AvatarImageSource() override;
// CanvasImageSource override:
@@ -84,8 +86,12 @@ class AvatarImageSource : public gfx::CanvasImageSource {
const int width_;
const int height_;
const AvatarPosition position_;
+#if !defined(OS_ANDROID)
+ const profiles::AvatarShape shape_;
+#endif
const AvatarBorder border_;
+
DISALLOW_COPY_AND_ASSIGN(AvatarImageSource);
};
@@ -93,13 +99,18 @@ AvatarImageSource::AvatarImageSource(gfx::ImageSkia avatar,
const gfx::Size& canvas_size,
int width,
AvatarPosition position,
- AvatarBorder border)
+ AvatarBorder border,
+ profiles::AvatarShape shape)
: gfx::CanvasImageSource(canvas_size, false),
canvas_size_(canvas_size),
width_(width),
height_(GetScaledAvatarHeightForWidth(width, avatar)),
position_(position),
- border_(border) {
+ #if !defined(OS_ANDROID)
+ shape_(shape),
+ #endif
+ border_(border)
+{
avatar_ = gfx::ImageSkiaOperations::CreateResizedImage(
avatar, skia::ImageOperations::RESIZE_BEST,
gfx::Size(width_, height_));
@@ -121,6 +132,22 @@ void AvatarImageSource::Draw(gfx::Canvas* canvas) {
y = canvas_size_.height() - height_ - 1;
}
+#if !defined(OS_ANDROID)
+ if (shape_ == profiles::SHAPE_CIRCLE) {
+ // Draw the avatar on the bottom center of the canvas; overrides the
+ // previous position specification.
+ y = canvas_size_.height() - height_;
+
+ // Calculate the circular mask that will be used to display the avatar
+ // image.
+ gfx::Path circular_mask;
+ circular_mask.addCircle(SkIntToScalar(canvas_size_.width() / 2),
+ SkIntToScalar(canvas_size_.height() / 2),
+ SkIntToScalar(canvas_size_.width() / 2));
+ canvas->ClipPath(circular_mask, true);
+ }
+#endif
+
canvas->DrawImageInt(avatar_, x, y);
// The border should be square.
@@ -226,7 +253,8 @@ const size_t kPlaceholderAvatarIndex = 26;
gfx::Image GetSizedAvatarIcon(const gfx::Image& image,
bool is_rectangle,
- int width, int height) {
+ int width, int height,
+ AvatarShape shape) {
if (!is_rectangle && image.Height() <= height)
return image;
@@ -235,7 +263,8 @@ gfx::Image GetSizedAvatarIcon(const gfx::Image& image,
// Source for a centered, sized icon. GAIA images get a border.
std::unique_ptr<gfx::ImageSkiaSource> source(new AvatarImageSource(
*image.ToImageSkia(), size, std::min(width, height),
- AvatarImageSource::POSITION_CENTER, AvatarImageSource::BORDER_NONE));
+ AvatarImageSource::POSITION_CENTER, AvatarImageSource::BORDER_NONE,
+ shape));
return gfx::Image(gfx::ImageSkia(source.release(), size));
}

Powered by Google App Engine
This is Rietveld 408576698