| 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));
|
| }
|
|
|