Chromium Code Reviews| Index: ui/app_list/views/app_list_view.cc |
| diff --git a/ui/app_list/views/app_list_view.cc b/ui/app_list/views/app_list_view.cc |
| index 0233aaa9c3ee987ea52935f6048b8c73631b97e0..4924eb94504f515821c1d83c180ae4488c036d45 100644 |
| --- a/ui/app_list/views/app_list_view.cc |
| +++ b/ui/app_list/views/app_list_view.cc |
| @@ -28,9 +28,11 @@ |
| #include "ui/compositor/layer.h" |
| #include "ui/compositor/layer_animation_observer.h" |
| #include "ui/compositor/scoped_layer_animation_settings.h" |
| +#include "ui/gfx/display.h" |
| #include "ui/gfx/image/image_skia.h" |
| #include "ui/gfx/insets.h" |
| #include "ui/gfx/path.h" |
| +#include "ui/gfx/screen.h" |
| #include "ui/gfx/skia_util.h" |
| #include "ui/views/bubble/bubble_frame_view.h" |
| #include "ui/views/bubble/bubble_window_targeter.h" |
| @@ -129,7 +131,8 @@ AppListView::AppListView(AppListViewDelegate* delegate) |
| app_list_main_view_(NULL), |
| signin_view_(NULL), |
| speech_view_(NULL), |
| - animation_observer_(new HideViewAnimationObserver()) { |
| + animation_observer_(new HideViewAnimationObserver()), |
| + screen_to_keep_centered_on_(NULL) { |
| CHECK(delegate); |
| delegate_->AddObserver(this); |
| @@ -154,6 +157,7 @@ void AppListView::InitAsBubbleAttachedToAnchor( |
| SetAnchorView(anchor); |
| InitAsBubbleInternal( |
| parent, pagination_model, arrow, border_accepts_events, anchor_offset); |
| + screen_to_keep_centered_on_ = NULL; |
| } |
| void AppListView::InitAsBubbleAtFixedLocation( |
| @@ -166,6 +170,20 @@ void AppListView::InitAsBubbleAtFixedLocation( |
| SetAnchorRect(gfx::Rect(anchor_point_in_screen, gfx::Size())); |
| InitAsBubbleInternal( |
| parent, pagination_model, arrow, border_accepts_events, gfx::Vector2d()); |
| + screen_to_keep_centered_on_ = NULL; |
| +} |
| + |
| +void AppListView::InitAsBubbleCenteredOnPrimaryDisplay( |
| + gfx::NativeView parent, |
| + PaginationModel* pagination_model, |
| + gfx::Screen* screen_to_keep_centered_on, |
| + views::BubbleBorder::Arrow arrow, |
| + bool border_accepts_events) { |
| + screen_to_keep_centered_on_ = screen_to_keep_centered_on; |
| + SetAnchorView(NULL); |
| + SetAnchorRect(gfx::Rect(GetCenterPoint(), gfx::Size())); |
| + InitAsBubbleInternal( |
| + parent, pagination_model, arrow, border_accepts_events, gfx::Vector2d()); |
| } |
| void AppListView::SetBubbleArrow(views::BubbleBorder::Arrow arrow) { |
| @@ -193,6 +211,8 @@ void AppListView::Close() { |
| } |
| void AppListView::UpdateBounds() { |
| + if (screen_to_keep_centered_on_) |
| + SetAnchorRect(gfx::Rect(GetCenterPoint(), gfx::Size())); |
| SizeToContents(); |
| } |
| @@ -337,6 +357,12 @@ void AppListView::InitAsBubbleInternal(gfx::NativeView parent, |
| delegate_->ViewInitialized(); |
| } |
| +gfx::Point AppListView::GetCenterPoint() { |
|
Matt Giuca
2014/04/24 10:03:19
Note: It may seem a bit trivial to abstract out th
|
| + DCHECK(screen_to_keep_centered_on_); |
| + gfx::Rect bounds = screen_to_keep_centered_on_->GetPrimaryDisplay().bounds(); |
| + return bounds.CenterPoint(); |
| +} |
| + |
| void AppListView::OnBeforeBubbleWidgetInit( |
| views::Widget::InitParams* params, |
| views::Widget* widget) const { |