Chromium Code Reviews| Index: ash/system/tray/tray_background_view.cc |
| diff --git a/ash/system/tray/tray_background_view.cc b/ash/system/tray/tray_background_view.cc |
| index 6a8566bd892de022c1f5429a308030b7d5fe1f1d..542f90cf77d76ee0f22d70df467ab235cf8c1729 100644 |
| --- a/ash/system/tray/tray_background_view.cc |
| +++ b/ash/system/tray/tray_background_view.cc |
| @@ -19,6 +19,12 @@ namespace { |
| const SkColor kTrayBackgroundAlpha = 100; |
| const SkColor kTrayBackgroundHoverAlpha = 150; |
| +// Adjust the size of SystemTrayContainer with additional padding. |
|
jennyz
2012/08/03 00:32:33
SystemTrayContainer -> TrayContainer.
stevenjb
2012/08/03 01:34:10
Done.
|
| +const int kTrayContainerVerticalPaddingBottomAlignment = 1; |
| +const int kTrayContainerHorizontalPaddingBottomAlignment = 1; |
| +const int kTrayContainerVerticalPaddingVerticalAlignment = 1; |
| +const int kTrayContainerHorizontalPaddingVerticalAlignment = 1; |
| + |
| } // namespace |
| namespace ash { |
| @@ -50,11 +56,75 @@ class TrayBackground : public views::Background { |
| DISALLOW_COPY_AND_ASSIGN(TrayBackground); |
| }; |
| +TrayBackgroundView::TrayContainer::TrayContainer(ShelfAlignment alignment) |
| + : alignment_(alignment) { |
| + UpdateLayout(); |
| +} |
| + |
| +void TrayBackgroundView::TrayContainer::SetAlignment(ShelfAlignment alignment) { |
| + if (alignment_ == alignment) |
| + return; |
| + alignment_ = alignment; |
| + UpdateLayout(); |
| +} |
| + |
| +gfx::Size TrayBackgroundView::TrayContainer::GetPreferredSize() { |
| + if (size_.IsEmpty()) |
| + return views::View::GetPreferredSize(); |
| + return size_; |
| +} |
| + |
| +void TrayBackgroundView::TrayContainer::ChildPreferredSizeChanged( |
| + views::View* child) { |
| + PreferredSizeChanged(); |
| +} |
| + |
| +void TrayBackgroundView::TrayContainer::ChildVisibilityChanged(View* child) { |
| + PreferredSizeChanged(); |
| +} |
| + |
| +void TrayBackgroundView::TrayContainer::ViewHierarchyChanged(bool is_add, |
| + View* parent, |
| + View* child) { |
| + if (parent == this) |
| + PreferredSizeChanged(); |
| +} |
| + |
| +void TrayBackgroundView::TrayContainer::UpdateLayout() { |
| + // Adjust the size of status tray dark background by adding additional |
| + // empty border. |
| + if (alignment_ == SHELF_ALIGNMENT_BOTTOM) { |
| + set_border(views::Border::CreateEmptyBorder( |
| + kTrayContainerVerticalPaddingBottomAlignment, |
| + kTrayContainerHorizontalPaddingBottomAlignment, |
| + kTrayContainerVerticalPaddingBottomAlignment, |
| + kTrayContainerHorizontalPaddingBottomAlignment)); |
| + views::BoxLayout* layout = |
| + new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
| + layout->set_spread_blank_space(true); |
| + views::View::SetLayoutManager(layout); |
| + } else { |
| + set_border(views::Border::CreateEmptyBorder( |
| + kTrayContainerVerticalPaddingVerticalAlignment, |
| + kTrayContainerHorizontalPaddingVerticalAlignment, |
| + kTrayContainerVerticalPaddingVerticalAlignment, |
| + kTrayContainerHorizontalPaddingVerticalAlignment)); |
| + views::BoxLayout* layout = |
| + new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); |
| + layout->set_spread_blank_space(true); |
| + views::View::SetLayoutManager(layout); |
| + } |
| + PreferredSizeChanged(); |
| +} |
| + |
| //////////////////////////////////////////////////////////////////////////////// |
| // TrayBackgroundView |
| -TrayBackgroundView::TrayBackgroundView() |
| - : shelf_alignment_(SHELF_ALIGNMENT_BOTTOM), |
| +TrayBackgroundView::TrayBackgroundView( |
| + internal::StatusAreaWidget* status_area_widget) |
| + : status_area_widget_(status_area_widget), |
| + tray_container_(NULL), |
| + shelf_alignment_(SHELF_ALIGNMENT_BOTTOM), |
| background_(NULL), |
| ALLOW_THIS_IN_INITIALIZER_LIST(hide_background_animator_( |
| this, 0, kTrayBackgroundAlpha)), |
| @@ -66,6 +136,11 @@ TrayBackgroundView::TrayBackgroundView() |
| SetPaintsBackground(true, internal::BackgroundAnimator::CHANGE_IMMEDIATE); |
| hover_background_animator_.SetPaintsBackground(false, |
| internal::BackgroundAnimator::CHANGE_IMMEDIATE); |
| + |
| + SetBorder(); |
| + |
| + tray_container_ = new TrayContainer(shelf_alignment_); |
| + SetContents(tray_container_); |
| } |
| TrayBackgroundView::~TrayBackgroundView() { |
| @@ -113,6 +188,27 @@ void TrayBackgroundView::SetPaintsBackground( |
| void TrayBackgroundView::SetShelfAlignment(ShelfAlignment alignment) { |
| shelf_alignment_ = alignment; |
| + SetBorder(); |
| + tray_container_->SetAlignment(alignment); |
| +} |
| + |
| +void TrayBackgroundView::SetBorder() { |
| + // Change the border padding for different shelf alignment. |
| + if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { |
| + set_border(views::Border::CreateEmptyBorder(0, 0, |
| + kPaddingFromBottomOfScreenBottomAlignment, |
| + kPaddingFromRightEdgeOfScreenBottomAlignment)); |
| + } else if (shelf_alignment() == SHELF_ALIGNMENT_LEFT) { |
| + set_border(views::Border::CreateEmptyBorder(0, |
| + kPaddingFromOuterEdgeOfLauncherVerticalAlignment, |
| + kPaddingFromBottomOfScreenVerticalAlignment, |
| + kPaddingFromInnerEdgeOfLauncherVerticalAlignment)); |
| + } else { |
| + set_border(views::Border::CreateEmptyBorder(0, |
| + kPaddingFromInnerEdgeOfLauncherVerticalAlignment, |
| + kPaddingFromBottomOfScreenVerticalAlignment, |
| + kPaddingFromOuterEdgeOfLauncherVerticalAlignment)); |
| + } |
| } |
| } // namespace internal |