diff options
author | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-08 17:07:17 +0000 |
---|---|---|
committer | stevenjb@google.com <stevenjb@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-08 17:07:17 +0000 |
commit | 2091d29164986936cc90eeb9f139f6bf0ee4b70b (patch) | |
tree | 1ec48736eb06b963e3bc295d21d1e86978189126 /ash | |
parent | 708bfade92371f332193719397c26f8568363cdb (diff) | |
download | chromium_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.cc | 35 | ||||
-rw-r--r-- | ash/system/status_area_widget.h | 9 | ||||
-rw-r--r-- | ash/system/status_area_widget_delegate.cc | 2 | ||||
-rw-r--r-- | ash/system/tray/system_tray_unittest.cc | 18 | ||||
-rw-r--r-- | ash/system/tray/tray_background_view.cc | 26 | ||||
-rw-r--r-- | ash/system/tray/tray_background_view.h | 6 |
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_; |