summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 01:50:06 +0000
committerflackr@chromium.org <flackr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-03-22 01:50:06 +0000
commit25d1370b9a0686cdde8e9af43533bc887899517a (patch)
treec26c3eda42c63abd48cfc7f05abfef9dab24b287 /ash
parent95975561626a84492d80252ce344640092e4ee7e (diff)
downloadchromium_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.cc6
-rw-r--r--ash/system/user/tray_user.cc71
-rw-r--r--ash/system/user/tray_user.h3
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);
};