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 1c307bad93f610d077a3de4f7010532061f0fa80..c610ee4ace6882ca80b3eaf327b73e00424d9f33 100644 |
--- a/ash/system/tray/tray_background_view.cc |
+++ b/ash/system/tray/tray_background_view.cc |
@@ -37,6 +37,12 @@ |
const int kTrayBackgroundHoverAlpha = 150; |
const SkColor kTrayBackgroundPressedColor = SkColorSetRGB(66, 129, 244); |
+// Adjust the size of TrayContainer with additional padding. |
+const int kTrayContainerVerticalPaddingBottomAlignment = 1; |
+const int kTrayContainerHorizontalPaddingBottomAlignment = 1; |
+const int kTrayContainerVerticalPaddingVerticalAlignment = 1; |
+const int kTrayContainerHorizontalPaddingVerticalAlignment = 1; |
+ |
const int kAnimationDurationForPopupMS = 200; |
} // namespace |
@@ -148,8 +154,7 @@ |
status_area_widget()->GetNativeWindow())->shelf(); |
} |
- // Overridden from views::Background. |
- virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE { |
+ void PaintForAlternateShelf(gfx::Canvas* canvas, views::View* view) const { |
int orientation = kImageHorizontal; |
ShelfWidget* shelf_widget = GetShelfWidget(); |
if (shelf_widget && |
@@ -205,6 +210,23 @@ |
middle_bounds.height()); |
} |
+ // Overridden from views::Background. |
+ virtual void Paint(gfx::Canvas* canvas, views::View* view) const OVERRIDE { |
+ if (ash::switches::UseAlternateShelfLayout()) { |
+ PaintForAlternateShelf(canvas, view); |
+ } else { |
+ SkPaint paint; |
+ paint.setAntiAlias(true); |
+ paint.setStyle(SkPaint::kFill_Style); |
+ paint.setColor(color_); |
+ SkPath path; |
+ gfx::Rect bounds(view->GetLocalBounds()); |
+ SkScalar radius = SkIntToScalar(kTrayRoundedBorderRadius); |
+ path.addRoundRect(gfx::RectToSkRect(bounds), radius, radius); |
+ canvas->DrawPath(path, paint); |
+ } |
+ } |
+ |
SkColor color_; |
// Reference to the TrayBackgroundView for which this is a background. |
TrayBackgroundView* tray_background_view_; |
@@ -256,22 +278,32 @@ |
// empty border. |
if (alignment_ == SHELF_ALIGNMENT_BOTTOM || |
alignment_ == SHELF_ALIGNMENT_TOP) { |
- SetBorder(views::Border::CreateEmptyBorder( |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf)); |
+ int vertical_padding = kTrayContainerVerticalPaddingBottomAlignment; |
+ int horizontal_padding = kTrayContainerHorizontalPaddingBottomAlignment; |
+ if (ash::switches::UseAlternateShelfLayout()) { |
+ vertical_padding = kPaddingFromEdgeOfShelf; |
+ horizontal_padding = kPaddingFromEdgeOfShelf; |
+ } |
+ SetBorder(views::Border::CreateEmptyBorder(vertical_padding, |
+ horizontal_padding, |
+ vertical_padding, |
+ horizontal_padding)); |
views::BoxLayout* layout = |
new views::BoxLayout(views::BoxLayout::kHorizontal, 0, 0, 0); |
layout->set_spread_blank_space(true); |
views::View::SetLayoutManager(layout); |
} else { |
- SetBorder(views::Border::CreateEmptyBorder( |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf, |
- kPaddingFromEdgeOfShelf)); |
+ int vertical_padding = kTrayContainerVerticalPaddingVerticalAlignment; |
+ int horizontal_padding = kTrayContainerHorizontalPaddingVerticalAlignment; |
+ if (ash::switches::UseAlternateShelfLayout()) { |
+ vertical_padding = kPaddingFromEdgeOfShelf; |
+ horizontal_padding = kPaddingFromEdgeOfShelf; |
+ } |
+ SetBorder(views::Border::CreateEmptyBorder(vertical_padding, |
+ horizontal_padding, |
+ vertical_padding, |
+ horizontal_padding)); |
views::BoxLayout* layout = |
new views::BoxLayout(views::BoxLayout::kVertical, 0, 0, 0); |
@@ -325,10 +357,20 @@ |
void TrayBackgroundView::OnMouseEntered(const ui::MouseEvent& event) { |
hovered_ = true; |
+ if (!background_ || draw_background_as_active_ || |
+ ash::switches::UseAlternateShelfLayout()) |
+ return; |
+ hover_background_animator_.SetPaintsBackground( |
+ true, BACKGROUND_CHANGE_ANIMATE); |
} |
void TrayBackgroundView::OnMouseExited(const ui::MouseEvent& event) { |
hovered_ = false; |
+ if (!background_ || draw_background_as_active_ || |
+ ash::switches::UseAlternateShelfLayout()) |
+ return; |
+ hover_background_animator_.SetPaintsBackground( |
+ false, BACKGROUND_CHANGE_ANIMATE); |
} |
void TrayBackgroundView::ChildPreferredSizeChanged(views::View* child) { |
@@ -362,6 +404,7 @@ |
// The animator should never fire when the alternate shelf layout is used. |
if (!background_ || draw_background_as_active_) |
return; |
+ DCHECK(!ash::switches::UseAlternateShelfLayout()); |
background_->set_alpha(hide_background_animator_.alpha() + |
hover_background_animator_.alpha()); |
SchedulePaint(); |
@@ -374,6 +417,7 @@ |
void TrayBackgroundView::SetPaintsBackground( |
bool value, BackgroundAnimatorChangeType change_type) { |
+ DCHECK(!ash::switches::UseAlternateShelfLayout()); |
hide_background_animator_.SetPaintsBackground(value, change_type); |
} |
@@ -397,24 +441,51 @@ |
// Tray views are laid out right-to-left or bottom-to-top |
bool on_edge = (this == parent->child_at(0)); |
int left_edge, top_edge, right_edge, bottom_edge; |
- if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { |
- top_edge = ShelfLayoutManager::kShelfItemInset; |
- left_edge = 0; |
- bottom_edge = kShelfSize - |
- ShelfLayoutManager::kShelfItemInset - ash::kShelfItemHeight; |
- right_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
- } else if (shelf_alignment() == SHELF_ALIGNMENT_LEFT) { |
- top_edge = 0; |
- left_edge = kShelfSize - |
- ShelfLayoutManager::kShelfItemInset - ash::kShelfItemHeight; |
- bottom_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
- right_edge = ShelfLayoutManager::kShelfItemInset; |
- } else { // SHELF_ALIGNMENT_RIGHT |
- top_edge = 0; |
- left_edge = ShelfLayoutManager::kShelfItemInset; |
- bottom_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
- right_edge = kShelfSize - |
- ShelfLayoutManager::kShelfItemInset - ash::kShelfItemHeight; |
+ if (ash::switches::UseAlternateShelfLayout()) { |
+ if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { |
+ top_edge = ShelfLayoutManager::kShelfItemInset; |
+ left_edge = 0; |
+ bottom_edge = ShelfLayoutManager::GetPreferredShelfSize() - |
+ ShelfLayoutManager::kShelfItemInset - GetShelfItemHeight(); |
+ right_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
+ } else if (shelf_alignment() == SHELF_ALIGNMENT_LEFT) { |
+ top_edge = 0; |
+ left_edge = ShelfLayoutManager::GetPreferredShelfSize() - |
+ ShelfLayoutManager::kShelfItemInset - GetShelfItemHeight(); |
+ bottom_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
+ right_edge = ShelfLayoutManager::kShelfItemInset; |
+ } else { // SHELF_ALIGNMENT_RIGHT |
+ top_edge = 0; |
+ left_edge = ShelfLayoutManager::kShelfItemInset; |
+ bottom_edge = on_edge ? kPaddingFromEdgeOfShelf : 0; |
+ right_edge = ShelfLayoutManager::GetPreferredShelfSize() - |
+ ShelfLayoutManager::kShelfItemInset - GetShelfItemHeight(); |
+ } |
+ } else { |
+ // Change the border padding for different shelf alignment. |
+ if (shelf_alignment() == SHELF_ALIGNMENT_BOTTOM) { |
+ top_edge = 0; |
+ left_edge = 0; |
+ bottom_edge = on_edge ? kPaddingFromBottomOfScreenBottomAlignment : |
+ kPaddingFromBottomOfScreenBottomAlignment - 1; |
+ right_edge = on_edge ? kPaddingFromRightEdgeOfScreenBottomAlignment : 0; |
+ } else if (shelf_alignment() == SHELF_ALIGNMENT_TOP) { |
+ top_edge = on_edge ? kPaddingFromBottomOfScreenBottomAlignment : |
+ kPaddingFromBottomOfScreenBottomAlignment - 1; |
+ left_edge = 0; |
+ bottom_edge = 0; |
+ right_edge = on_edge ? kPaddingFromRightEdgeOfScreenBottomAlignment : 0; |
+ } else if (shelf_alignment() == SHELF_ALIGNMENT_LEFT) { |
+ top_edge = 0; |
+ left_edge = kPaddingFromOuterEdgeOfLauncherVerticalAlignment; |
+ bottom_edge = on_edge ? kPaddingFromBottomOfScreenVerticalAlignment : 0; |
+ right_edge = kPaddingFromInnerEdgeOfLauncherVerticalAlignment; |
+ } else { |
+ top_edge = 0; |
+ left_edge = kPaddingFromInnerEdgeOfLauncherVerticalAlignment; |
+ bottom_edge = on_edge ? kPaddingFromBottomOfScreenVerticalAlignment : 0; |
+ right_edge = kPaddingFromOuterEdgeOfLauncherVerticalAlignment; |
+ } |
} |
SetBorder(views::Border::CreateEmptyBorder( |
top_edge, left_edge, bottom_edge, right_edge)); |
@@ -449,22 +520,46 @@ |
if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) { |
if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) { |
bool rtl = base::i18n::IsRTL(); |
- rect.Inset( |
- rtl ? kBubblePaddingHorizontalSide : 0, |
- kBubblePaddingHorizontalBottom, |
- rtl ? 0 : kBubblePaddingHorizontalSide, |
- 0); |
+ if (!ash::switches::UseAlternateShelfLayout()) { |
+ rect.Inset( |
+ rtl ? kPaddingFromRightEdgeOfScreenBottomAlignment : 0, |
+ kTrayBubbleAnchorTopInsetBottomAnchor, |
+ rtl ? 0 : kPaddingFromRightEdgeOfScreenBottomAlignment, |
+ kPaddingFromBottomOfScreenBottomAlignment); |
+ } else { |
+ rect.Inset( |
+ rtl ? kAlternateLayoutBubblePaddingHorizontalSide : 0, |
+ kAlternateLayoutBubblePaddingHorizontalBottom, |
+ rtl ? 0 : kAlternateLayoutBubblePaddingHorizontalSide, |
+ 0); |
+ } |
} else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) { |
- rect.Inset(0, 0, kBubblePaddingVerticalSide + 4, |
- kBubblePaddingVerticalBottom); |
+ if (!ash::switches::UseAlternateShelfLayout()) { |
+ rect.Inset(0, 0, kPaddingFromInnerEdgeOfLauncherVerticalAlignment + 5, |
+ kPaddingFromBottomOfScreenVerticalAlignment); |
+ } else { |
+ rect.Inset(0, 0, kAlternateLayoutBubblePaddingVerticalSide + 4, |
+ kAlternateLayoutBubblePaddingVerticalBottom); |
+ } |
} else { |
- rect.Inset(kBubblePaddingVerticalSide, 0, 0, |
- kBubblePaddingVerticalBottom); |
+ if (!ash::switches::UseAlternateShelfLayout()) { |
+ rect.Inset(kPaddingFromInnerEdgeOfLauncherVerticalAlignment + 1, |
+ 0, 0, kPaddingFromBottomOfScreenVerticalAlignment); |
+ } else { |
+ rect.Inset(kAlternateLayoutBubblePaddingVerticalSide, 0, 0, |
+ kAlternateLayoutBubblePaddingVerticalBottom); |
+ } |
} |
} else if (anchor_type == TrayBubbleView::ANCHOR_TYPE_BUBBLE) { |
// Invert the offsets to align with the bubble below. |
- int vertical_alignment = 0; |
- int horizontal_alignment = kBubblePaddingVerticalBottom; |
+ // Note that with the alternate shelf layout the tips are not shown and |
+ // the offsets for left and right alignment do not need to be applied. |
+ int vertical_alignment = ash::switches::UseAlternateShelfLayout() ? |
+ 0 : |
+ kPaddingFromInnerEdgeOfLauncherVerticalAlignment; |
+ int horizontal_alignment = ash::switches::UseAlternateShelfLayout() ? |
+ kAlternateLayoutBubblePaddingVerticalBottom : |
+ kPaddingFromBottomOfScreenVerticalAlignment; |
if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) |
rect.Inset(vertical_alignment, 0, 0, horizontal_alignment); |
else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) |
@@ -505,7 +600,7 @@ |
void TrayBackgroundView::SetDrawBackgroundAsActive(bool visible) { |
draw_background_as_active_ = visible; |
- if (!background_) |
+ if (!background_ || !switches::UseAlternateShelfLayout()) |
return; |
// Do not change gradually, changing color between grey and blue is weird. |
@@ -520,6 +615,17 @@ |
void TrayBackgroundView::UpdateBubbleViewArrow( |
views::TrayBubbleView* bubble_view) { |
+ if (switches::UseAlternateShelfLayout()) |
+ return; |
+ |
+ aura::Window* root_window = |
+ bubble_view->GetWidget()->GetNativeView()->GetRootWindow(); |
+ ash::internal::ShelfLayoutManager* shelf = |
+ ShelfLayoutManager::ForShelf(root_window); |
+ bubble_view->SetArrowPaintType( |
+ (shelf && shelf->IsVisible()) ? |
+ views::BubbleBorder::PAINT_NORMAL : |
+ views::BubbleBorder::PAINT_TRANSPARENT); |
} |
} // namespace internal |