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

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: DCHECK and comment 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..48e11a42bb737a59c21ec35d9538f373e3bd9715 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,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:
@@ -85,6 +88,7 @@ class AvatarImageSource : public gfx::CanvasImageSource {
const int height_;
const AvatarPosition position_;
const AvatarBorder border_;
+ const profiles::AvatarShape shape_;
DISALLOW_COPY_AND_ASSIGN(AvatarImageSource);
};
@@ -93,13 +97,17 @@ 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_));
@@ -121,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
Roger Tawa OOO till Jul 10th 2016/06/20 14:04:44 Nit: end comment with period.
Jane 2016/06/27 21:52:16 Done.
+ 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.
@@ -226,7 +253,9 @@ 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)
+{
Roger Tawa OOO till Jul 10th 2016/06/20 14:04:44 { should stay on previous line.
Jane 2016/06/27 21:52:16 Done.
if (!is_rectangle && image.Height() <= height)
return image;
@@ -235,7 +264,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));
}
« no previous file with comments | « chrome/browser/profiles/profile_avatar_icon_util.h ('k') | chrome/browser/ui/views/profiles/profile_chooser_view.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698