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 147c70f55625b17b4bc8e827931fbf8657f14201..ae35fc7909fc165c27bec21dc223e34a3d32ffad 100644 |
| --- a/ash/system/tray/tray_background_view.cc |
| +++ b/ash/system/tray/tray_background_view.cc |
| @@ -10,10 +10,13 @@ |
| #include "ash/system/status_area_widget.h" |
| #include "ash/system/status_area_widget_delegate.h" |
| #include "ash/system/tray/tray_constants.h" |
| +#include "ash/wm/window_animations.h" |
| +#include "ui/aura/event_filter.h" |
| #include "ui/aura/window.h" |
| #include "ui/base/accessibility/accessible_view_state.h" |
| #include "ui/compositor/layer_animation_observer.h" |
| #include "ui/gfx/canvas.h" |
| +#include "ui/gfx/screen.h" |
| #include "ui/gfx/skia_util.h" |
| #include "ui/views/background.h" |
| #include "ui/views/layout/box_layout.h" |
| @@ -29,6 +32,8 @@ const int kTrayContainerHorizontalPaddingBottomAlignment = 1; |
| const int kTrayContainerVerticalPaddingVerticalAlignment = 1; |
| const int kTrayContainerHorizontalPaddingVerticalAlignment = 1; |
| +const int kAnimationDurationForPopupMS = 200; |
| + |
| } // namespace |
| namespace ash { |
| @@ -277,5 +282,83 @@ void TrayBackgroundView::SetBorder() { |
| } |
| } |
|
stevenjb
2012/10/11 17:15:15
Functionality moved from TrayBubbleView
|
| +void TrayBackgroundView::InitializeBubbleAnimations( |
| + views::Widget* bubble_widget) { |
| + ash::SetWindowVisibilityAnimationType( |
| + bubble_widget->GetNativeWindow(), |
| + ash::WINDOW_VISIBILITY_ANIMATION_TYPE_FADE); |
| + ash::SetWindowVisibilityAnimationTransition( |
| + bubble_widget->GetNativeWindow(), |
| + ash::ANIMATE_BOTH); |
| + ash::SetWindowVisibilityAnimationDuration( |
| + bubble_widget->GetNativeWindow(), |
| + base::TimeDelta::FromMilliseconds(kAnimationDurationForPopupMS)); |
| +} |
| + |
| +aura::Window* TrayBackgroundView::GetBubbleWindowContainer() const { |
| + return ash::Shell::GetContainer( |
| + tray_container()->GetWidget()->GetNativeWindow()->GetRootWindow(), |
| + ash::internal::kShellWindowId_SettingBubbleContainer); |
| +} |
| + |
| +gfx::Rect TrayBackgroundView::GetAnchorRect( |
| + views::Widget* anchor_widget, |
| + TrayBubbleView::AnchorType anchor_type, |
| + TrayBubbleView::AnchorAlignment anchor_alignment) const { |
| + gfx::Rect rect; |
| + if (anchor_widget && anchor_widget->IsVisible()) { |
| + rect = anchor_widget->GetWindowBoundsInScreen(); |
| + if (anchor_type == TrayBubbleView::ANCHOR_TYPE_TRAY) { |
| + if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM) { |
| + bool rtl = base::i18n::IsRTL(); |
| + rect.Inset( |
| + rtl ? kPaddingFromRightEdgeOfScreenBottomAlignment : 0, |
| + 0, |
| + rtl ? 0 : kPaddingFromRightEdgeOfScreenBottomAlignment, |
| + kPaddingFromBottomOfScreenBottomAlignment); |
| + } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) { |
| + rect.Inset(0, 0, kPaddingFromInnerEdgeOfLauncherVerticalAlignment, |
| + kPaddingFromBottomOfScreenVerticalAlignment); |
| + } else { |
| + rect.Inset(kPaddingFromInnerEdgeOfLauncherVerticalAlignment, |
| + 0, 0, kPaddingFromBottomOfScreenVerticalAlignment); |
| + } |
| + } else if (anchor_type == TrayBubbleView::ANCHOR_TYPE_BUBBLE) { |
| + // Invert the offsets to align with the bubble below. |
| + if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_LEFT) { |
| + rect.Inset(kPaddingFromInnerEdgeOfLauncherVerticalAlignment, |
| + 0, 0, kPaddingFromBottomOfScreenVerticalAlignment); |
| + } else if (anchor_alignment == TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT) { |
| + rect.Inset(0, 0, kPaddingFromInnerEdgeOfLauncherVerticalAlignment, |
| + kPaddingFromBottomOfScreenVerticalAlignment); |
| + } |
| + } |
| + } |
| + |
| + // TODO(jennyz): May need to add left/right alignment in the following code. |
| + if (rect.IsEmpty()) { |
| + rect = gfx::Screen::GetPrimaryDisplay().bounds(); |
| + rect = gfx::Rect( |
| + base::i18n::IsRTL() ? kPaddingFromRightEdgeOfScreenBottomAlignment : |
| + rect.width() - kPaddingFromRightEdgeOfScreenBottomAlignment, |
| + rect.height() - kPaddingFromBottomOfScreenBottomAlignment, |
| + 0, 0); |
| + } |
| + return rect; |
| +} |
| + |
| +TrayBubbleView::AnchorAlignment TrayBackgroundView::GetAnchorAlignment() const { |
| + switch (shelf_alignment_) { |
| + case SHELF_ALIGNMENT_BOTTOM: |
| + return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM; |
| + case SHELF_ALIGNMENT_LEFT: |
| + return TrayBubbleView::ANCHOR_ALIGNMENT_LEFT; |
| + case SHELF_ALIGNMENT_RIGHT: |
| + return TrayBubbleView::ANCHOR_ALIGNMENT_RIGHT; |
| + } |
| + NOTREACHED(); |
| + return TrayBubbleView::ANCHOR_ALIGNMENT_BOTTOM; |
| +} |
| + |
| } // namespace internal |
| } // namespace ash |