diff options
author | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 01:50:06 +0000 |
---|---|---|
committer | flackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-03-22 01:50:06 +0000 |
commit | 25d1370b9a0686cdde8e9af43533bc887899517a (patch) | |
tree | c26c3eda42c63abd48cfc7f05abfef9dab24b287 /ash | |
parent | 95975561626a84492d80252ce344640092e4ee7e (diff) | |
download | chromium_src-25d1370b9a0686cdde8e9af43533bc887899517a.zip chromium_src-25d1370b9a0686cdde8e9af43533bc887899517a.tar.gz chromium_src-25d1370b9a0686cdde8e9af43533bc887899517a.tar.bz2 |
Adjust uber tray spacing around avatar and draw avatar using rounded rectangle.
BUG=117213
TEST=None.
Review URL: http://codereview.chromium.org/9813020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@128138 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r-- | ash/system/tray/system_tray.cc | 6 | ||||
-rw-r--r-- | ash/system/user/tray_user.cc | 71 | ||||
-rw-r--r-- | ash/system/user/tray_user.h | 3 |
3 files changed, 75 insertions, 5 deletions
diff --git a/ash/system/tray/system_tray.cc b/ash/system/tray/system_tray.cc index 7e44215..2a93faf 100644 --- a/ash/system/tray/system_tray.cc +++ b/ash/system/tray/system_tray.cc @@ -258,7 +258,7 @@ class SystemTrayBackground : public views::Background { paint.setStyle(SkPaint::kFill_Style); paint.setColor(SkColorSetARGB(alpha_, 0, 0, 0)); SkPath path; - gfx::Rect bounds(view->GetContentsBounds()); + gfx::Rect bounds(view->bounds()); SkScalar radius = SkIntToScalar(4); path.addRoundRect(gfx::RectToSkRect(bounds), radius, radius); canvas->sk_canvas()->drawPath(path, paint); @@ -411,8 +411,10 @@ SystemTray::SystemTray() background_animator_(this, 0, kTrayBackgroundAlpha)) { container_ = new views::View; container_->SetLayoutManager(new views::BoxLayout( - views::BoxLayout::kHorizontal, 5, 0, kTrayPaddingBetweenItems)); + views::BoxLayout::kHorizontal, 0, 0, kTrayPaddingBetweenItems)); container_->set_background(background_); + container_->set_border( + views::Border::CreateEmptyBorder(1, kTrayPaddingBetweenItems, 1, 1)); set_border(views::Border::CreateEmptyBorder(0, 0, kPaddingFromBottomOfScreen, kPaddingFromRightEdgeOfScreen)); set_notify_enter_exit_on_child(true); diff --git a/ash/system/user/tray_user.cc b/ash/system/user/tray_user.cc index b8064c9..892dfd0 100644 --- a/ash/system/user/tray_user.cc +++ b/ash/system/user/tray_user.cc @@ -9,10 +9,15 @@ #include "ash/system/tray/tray_constants.h" #include "base/utf_string_conversions.h" #include "grit/ash_strings.h" +#include "third_party/skia/include/core/SkCanvas.h" +#include "third_party/skia/include/core/SkPaint.h" +#include "third_party/skia/include/core/SkPath.h" +#include "third_party/skia/include/core/SkShader.h" #include "ui/base/resource/resource_bundle.h" #include "ui/gfx/canvas.h" #include "ui/gfx/image/image.h" #include "ui/gfx/size.h" +#include "ui/gfx/skia_util.h" #include "ui/views/controls/button/button.h" #include "ui/views/controls/button/text_button.h" #include "ui/views/controls/image_view.h" @@ -28,7 +33,8 @@ const int kUserInfoHorizontalPadding = 14; const int kUserInfoVerticalPadding = 10; const int kUserInfoPaddingBetweenItems = 3; -const int kUserIconSize = 32; +const int kUserIconSize = 27; +const int kUserIconCornerRadius = 2; const SkColor kButtonStrokeColor = SkColorSetRGB(0xdd, 0xdd, 0xdd); @@ -260,6 +266,67 @@ class UserView : public views::View, DISALLOW_COPY_AND_ASSIGN(UserView); }; +// A custom image view with rounded edges. +class RoundedImageView : public views::View { + public: + // Constructs a new rounded image view with rounded corners of radius + // |corner_radius|. + explicit RoundedImageView(int corner_radius) : corner_radius_(corner_radius) { + } + + virtual ~RoundedImageView() { + } + + // Set the bitmap that should be displayed from a pointer. The pointer + // contents is copied in the receiver's bitmap. + void SetImage(const SkBitmap& bm) { + image_ = bm; + SetImageSize(gfx::Size(bm.width(), bm.height())); + } + + // Set the desired image size. + void SetImageSize(const gfx::Size& image_size) { + image_size_ = image_size; + PreferredSizeChanged(); + } + + // Overridden from views::View. + virtual gfx::Size GetPreferredSize() OVERRIDE { + return image_size_; + } + + virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { + View::OnPaint(canvas); + gfx::Rect image_bounds(image_size_); + const SkScalar kRadius = SkIntToScalar(corner_radius_); + SkPath path; + path.addRoundRect(gfx::RectToSkRect(image_bounds), kRadius, kRadius); + + SkPaint paint; + SkShader* shader = SkShader::CreateBitmapShader(image_, + SkShader::kRepeat_TileMode, + SkShader::kRepeat_TileMode); + SkMatrix shader_scale; + shader_scale.setScale(SkFloatToScalar( + static_cast<float>(image_bounds.width()) / image_.width()), + SkFloatToScalar(static_cast<float>( + image_bounds.height()) / image_.height())); + shader->setLocalMatrix(shader_scale); + + paint.setShader(shader); + paint.setXfermodeMode(SkXfermode::kSrcOver_Mode); + shader->unref(); + canvas->sk_canvas()->drawPath(path, paint); + } + + private: + SkBitmap image_; + gfx::Size image_size_; + int corner_radius_; + + DISALLOW_COPY_AND_ASSIGN(RoundedImageView); +}; + } // namespace tray TrayUser::TrayUser() { @@ -269,7 +336,7 @@ TrayUser::~TrayUser() { } views::View* TrayUser::CreateTrayView(user::LoginStatus status) { - avatar_.reset(new views::ImageView); + avatar_.reset(new tray::RoundedImageView(kUserIconCornerRadius)); if (status == user::LOGGED_IN_USER || status == user::LOGGED_IN_OWNER) { avatar_->SetImage( ash::Shell::GetInstance()->tray_delegate()->GetUserImage()); diff --git a/ash/system/user/tray_user.h b/ash/system/user/tray_user.h index 6a85d48..0a3afbc 100644 --- a/ash/system/user/tray_user.h +++ b/ash/system/user/tray_user.h @@ -19,6 +19,7 @@ namespace internal { namespace tray { class UserView; +class RoundedImageView; } class TrayUser : public SystemTrayItem, @@ -44,7 +45,7 @@ class TrayUser : public SystemTrayItem, virtual void OnUserUpdate() OVERRIDE; scoped_ptr<tray::UserView> user_; - scoped_ptr<views::ImageView> avatar_; + scoped_ptr<tray::RoundedImageView> avatar_; DISALLOW_COPY_AND_ASSIGN(TrayUser); }; |