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

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: Minor comment and consolidating "Close all windows" change 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 ce3a399f1149a0c21de71d161ef72c6e42960e8e..f4a6c3f879e8ca40ae125c9f71caed1fec82f43a 100644
--- a/chrome/browser/profiles/profile_avatar_icon_util.cc
+++ b/chrome/browser/profiles/profile_avatar_icon_util.cc
@@ -31,6 +31,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"
@@ -74,7 +75,9 @@ 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:
@@ -87,6 +90,7 @@ class AvatarImageSource : public gfx::CanvasImageSource {
const int height_;
const AvatarPosition position_;
const AvatarBorder border_;
+ const profiles::AvatarShape shape_;
DISALLOW_COPY_AND_ASSIGN(AvatarImageSource);
};
@@ -95,13 +99,15 @@ 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) {
+ border_(border),
+ shape_(shape) {
avatar_ = gfx::ImageSkiaOperations::CreateResizedImage(
avatar, skia::ImageOperations::RESIZE_BEST,
gfx::Size(width_, height_));
@@ -123,6 +129,25 @@ void AvatarImageSource::Draw(gfx::Canvas* canvas) {
y = canvas_size_.height() - height_ - 1;
}
+#if defined(OS_ANDROID)
+ // Circular shape is only available on desktop platforms.
+ DCHECK(shape_ != profiles::SHAPE_CIRCLE);
+#else
+ 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.
@@ -228,16 +253,19 @@ 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;
gfx::Size size(width, height);
// 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));
+ std::unique_ptr<gfx::ImageSkiaSource> source(
+ new AvatarImageSource(*image.ToImageSkia(), size, std::min(width, height),
+ AvatarImageSource::POSITION_CENTER,
+ AvatarImageSource::BORDER_NONE, shape));
return gfx::Image(gfx::ImageSkia(source.release(), size));
}

Powered by Google App Engine
This is Rietveld 408576698