summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-08 17:07:17 +0000
committerstevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-08 17:07:17 +0000
commit2091d29164986936cc90eeb9f139f6bf0ee4b70b (patch)
tree1ec48736eb06b963e3bc295d21d1e86978189126 /ash
parent708bfade92371f332193719397c26f8568363cdb (diff)
downloadchromium_src-2091d29164986936cc90eeb9f139f6bf0ee4b70b.zip
chromium_src-2091d29164986936cc90eeb9f139f6bf0ee4b70b.tar.gz
chromium_src-2091d29164986936cc90eeb9f139f6bf0ee4b70b.tar.bz2
Fix status area tray spacing.
BUG=140870 Review URL: https://chromiumcodereview.appspot.com/10830190 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150573 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash')
-rw-r--r--ash/system/status_area_widget.cc35
-rw-r--r--ash/system/status_area_widget.h9
-rw-r--r--ash/system/status_area_widget_delegate.cc2
-rw-r--r--ash/system/tray/system_tray_unittest.cc18
-rw-r--r--ash/system/tray/tray_background_view.cc26
-rw-r--r--ash/system/tray/tray_background_view.h6
6 files changed, 55 insertions, 41 deletions
diff --git a/ash/system/status_area_widget.cc b/ash/system/status_area_widget.cc
index ca2a88d..4209f38 100644
--- a/ash/system/status_area_widget.cc
+++ b/ash/system/status_area_widget.cc
@@ -276,20 +276,20 @@ class DummySystemTrayDelegate : public SystemTrayDelegate {
namespace internal {
StatusAreaWidget::StatusAreaWidget()
- : widget_delegate_(new internal::StatusAreaWidgetDelegate),
+ : status_area_widget_delegate_(new internal::StatusAreaWidgetDelegate),
system_tray_(NULL),
web_notification_tray_(NULL),
login_status_(user::LOGGED_IN_NONE) {
views::Widget::InitParams params(
views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
- params.delegate = widget_delegate_;
+ params.delegate = status_area_widget_delegate_;
params.parent =
Shell::GetPrimaryRootWindowController()->GetContainer(
ash::internal::kShellWindowId_StatusContainer);
params.transparent = true;
Init(params);
set_focus_on_creation(false);
- SetContentsView(widget_delegate_);
+ SetContentsView(status_area_widget_delegate_);
GetNativeView()->SetName("StatusAreaWidget");
}
@@ -297,8 +297,11 @@ StatusAreaWidget::~StatusAreaWidget() {
}
void StatusAreaWidget::CreateTrayViews(ShellDelegate* shell_delegate) {
- AddWebNotificationTray(new WebNotificationTray(this));
- AddSystemTray(new SystemTray(this), shell_delegate);
+ AddWebNotificationTray();
+ AddSystemTray(shell_delegate);
+ // SetBorder() must be called after all trays have been created.
+ web_notification_tray_->SetBorder();
+ system_tray_->SetBorder();
}
void StatusAreaWidget::Shutdown() {
@@ -312,36 +315,34 @@ void StatusAreaWidget::Shutdown() {
web_notification_tray_ = NULL;
}
-void StatusAreaWidget::AddSystemTray(SystemTray* system_tray,
- ShellDelegate* shell_delegate) {
- system_tray_ = system_tray;
- widget_delegate_->AddTray(system_tray);
+void StatusAreaWidget::AddSystemTray(ShellDelegate* shell_delegate) {
+ system_tray_ = new SystemTray(this);
+ status_area_widget_delegate_->AddTray(system_tray_);
system_tray_->Initialize(); // Called after added to widget.
if (shell_delegate) {
system_tray_delegate_.reset(
- shell_delegate->CreateSystemTrayDelegate(system_tray));
+ shell_delegate->CreateSystemTrayDelegate(system_tray_));
}
if (!system_tray_delegate_.get())
system_tray_delegate_.reset(new DummySystemTrayDelegate());
- system_tray->CreateItems(); // Called after delegate is created.
+ system_tray_->CreateItems(); // Called after delegate is created.
UpdateAfterLoginStatusChange(system_tray_delegate_->GetUserLoginStatus());
}
-void StatusAreaWidget::AddWebNotificationTray(
- WebNotificationTray* web_notification_tray) {
- web_notification_tray_ = web_notification_tray;
- widget_delegate_->AddTray(web_notification_tray);
+void StatusAreaWidget::AddWebNotificationTray() {
+ web_notification_tray_ = new WebNotificationTray(this);
+ status_area_widget_delegate_->AddTray(web_notification_tray_);
}
void StatusAreaWidget::SetShelfAlignment(ShelfAlignment alignment) {
- widget_delegate_->set_alignment(alignment);
+ status_area_widget_delegate_->set_alignment(alignment);
if (system_tray_)
system_tray_->SetShelfAlignment(alignment);
if (web_notification_tray_)
web_notification_tray_->SetShelfAlignment(alignment);
- widget_delegate_->UpdateLayout();
+ status_area_widget_delegate_->UpdateLayout();
}
void StatusAreaWidget::SetPaintsBackground(
diff --git a/ash/system/status_area_widget.h b/ash/system/status_area_widget.h
index 44dc754..376bbd9 100644
--- a/ash/system/status_area_widget.h
+++ b/ash/system/status_area_widget.h
@@ -56,6 +56,9 @@ class ASH_EXPORT StatusAreaWidget : public views::Widget {
// notification tray.
void UpdateAfterLoginStatusChange(user::LoginStatus login_status);
+ internal::StatusAreaWidgetDelegate* status_area_widget_delegate() {
+ return status_area_widget_delegate_;
+ }
SystemTray* system_tray() { return system_tray_; }
SystemTrayDelegate* system_tray_delegate() {
return system_tray_delegate_.get();
@@ -67,12 +70,12 @@ class ASH_EXPORT StatusAreaWidget : public views::Widget {
user::LoginStatus login_status() const { return login_status_; }
private:
- void AddSystemTray(SystemTray* system_tray, ShellDelegate* shell_delegate);
- void AddWebNotificationTray(WebNotificationTray* web_notification_tray);
+ void AddSystemTray(ShellDelegate* shell_delegate);
+ void AddWebNotificationTray();
scoped_ptr<SystemTrayDelegate> system_tray_delegate_;
// Weak pointers to View classes that are parented to StatusAreaWidget:
- internal::StatusAreaWidgetDelegate* widget_delegate_;
+ internal::StatusAreaWidgetDelegate* status_area_widget_delegate_;
SystemTray* system_tray_;
WebNotificationTray* web_notification_tray_;
user::LoginStatus login_status_;
diff --git a/ash/system/status_area_widget_delegate.cc b/ash/system/status_area_widget_delegate.cc
index 66622cb..0db7b0a 100644
--- a/ash/system/status_area_widget_delegate.cc
+++ b/ash/system/status_area_widget_delegate.cc
@@ -20,7 +20,7 @@
namespace {
-int kTraySpacing = 1;
+int kTraySpacing = 8;
} // namespace
diff --git a/ash/system/tray/system_tray_unittest.cc b/ash/system/tray/system_tray_unittest.cc
index 6577a78..b03c548 100644
--- a/ash/system/tray/system_tray_unittest.cc
+++ b/ash/system/tray/system_tray_unittest.cc
@@ -138,23 +138,27 @@ TEST_F(SystemTrayTest, TrayWidgetAutoResizes) {
SystemTray* tray = GetSystemTray();
ASSERT_TRUE(tray->GetWidget());
- gfx::Size widget_size = tray->GetWidget()->GetWindowBoundsInScreen().size();
+ // Add an initial tray item so that the tray gets laid out correctly.
+ TestItem* initial_item = new TestItem;
+ tray->AddTrayItem(initial_item);
- TestItem* test_item = new TestItem;
- tray->AddTrayItem(test_item);
+ gfx::Size initial_size = tray->GetWidget()->GetWindowBoundsInScreen().size();
+
+ TestItem* new_item = new TestItem;
+ tray->AddTrayItem(new_item);
gfx::Size new_size = tray->GetWidget()->GetWindowBoundsInScreen().size();
// Adding the new item should change the size of the tray.
- EXPECT_NE(widget_size.ToString(), new_size.ToString());
+ EXPECT_NE(initial_size.ToString(), new_size.ToString());
// Hiding the tray view of the new item should also change the size of the
// tray.
- test_item->tray_view()->SetVisible(false);
- EXPECT_EQ(widget_size.ToString(),
+ new_item->tray_view()->SetVisible(false);
+ EXPECT_EQ(initial_size.ToString(),
tray->GetWidget()->GetWindowBoundsInScreen().size().ToString());
- test_item->tray_view()->SetVisible(true);
+ new_item->tray_view()->SetVisible(true);
EXPECT_EQ(new_size.ToString(),
tray->GetWidget()->GetWindowBoundsInScreen().size().ToString());
}
diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc
index 2d629827..824a57c 100644
--- a/ash/system/tray/tray_background_view.cc
+++ b/ash/system/tray/tray_background_view.cc
@@ -7,6 +7,8 @@
#include "ash/launcher/background_animator.h"
#include "ash/shell.h"
#include "ash/shell_window_ids.h"
+#include "ash/system/status_area_widget.h"
+#include "ash/system/status_area_widget_delegate.h"
#include "ash/system/tray/tray_constants.h"
#include "ui/aura/window.h"
#include "ui/gfx/canvas.h"
@@ -137,8 +139,6 @@ TrayBackgroundView::TrayBackgroundView(
hover_background_animator_.SetPaintsBackground(false,
internal::BackgroundAnimator::CHANGE_IMMEDIATE);
- SetBorder();
-
tray_container_ = new TrayContainer(shelf_alignment_);
SetContents(tray_container_);
}
@@ -193,20 +193,24 @@ void TrayBackgroundView::SetShelfAlignment(ShelfAlignment alignment) {
}
void TrayBackgroundView::SetBorder() {
+ views::View* parent = status_area_widget_->status_area_widget_delegate();
+ int child_count = parent->child_count();
+ DCHECK(child_count > 0);
+ int on_edge = (this == parent->child_at(child_count-1));
// Change the border padding for different shelf alignment.
if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) {
- set_border(views::Border::CreateEmptyBorder(0, 0,
- kPaddingFromBottomOfScreenBottomAlignment,
- kPaddingFromRightEdgeOfScreenBottomAlignment));
+ set_border(views::Border::CreateEmptyBorder(
+ 0, 0, kPaddingFromBottomOfScreenBottomAlignment,
+ on_edge ? kPaddingFromRightEdgeOfScreenBottomAlignment : 0));
} else if (shelf_alignment() == SHELF_ALIGNMENT_LEFT) {
- set_border(views::Border::CreateEmptyBorder(0,
- kPaddingFromOuterEdgeOfLauncherVerticalAlignment,
- kPaddingFromBottomOfScreenVerticalAlignment,
+ set_border(views::Border::CreateEmptyBorder(
+ 0, kPaddingFromOuterEdgeOfLauncherVerticalAlignment,
+ on_edge ? kPaddingFromBottomOfScreenVerticalAlignment : 0,
kPaddingFromInnerEdgeOfLauncherVerticalAlignment));
} else {
- set_border(views::Border::CreateEmptyBorder(0,
- kPaddingFromInnerEdgeOfLauncherVerticalAlignment,
- kPaddingFromBottomOfScreenVerticalAlignment,
+ set_border(views::Border::CreateEmptyBorder(
+ 0, kPaddingFromInnerEdgeOfLauncherVerticalAlignment,
+ on_edge ? kPaddingFromBottomOfScreenVerticalAlignment : 0,
kPaddingFromOuterEdgeOfLauncherVerticalAlignment));
}
}
diff --git a/ash/system/tray/tray_background_view.h b/ash/system/tray/tray_background_view.h
index d6ee3ba..123d398 100644
--- a/ash/system/tray/tray_background_view.h
+++ b/ash/system/tray/tray_background_view.h
@@ -81,6 +81,10 @@ class ASH_EXPORT TrayBackgroundView : public internal::ActionableView,
bool value,
internal::BackgroundAnimator::ChangeType change_type);
+ // Called after all status area trays have been created. Sets the border
+ // based on the position of the view.
+ void SetBorder();
+
StatusAreaWidget* status_area_widget() {
return status_area_widget_;
}
@@ -88,8 +92,6 @@ class ASH_EXPORT TrayBackgroundView : public internal::ActionableView,
ShelfAlignment shelf_alignment() const { return shelf_alignment_; }
private:
- void SetBorder();
-
// Unowned pointer to parent widget.
StatusAreaWidget* status_area_widget_;