OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "ash/wm/shelf_layout_manager.h" | 5 #include "ash/wm/shelf_layout_manager.h" |
6 | 6 |
7 #include "ash/focus_cycler.h" | 7 #include "ash/focus_cycler.h" |
8 #include "ash/launcher/launcher.h" | 8 #include "ash/launcher/launcher.h" |
9 #include "ash/screen_ash.h" | 9 #include "ash/screen_ash.h" |
10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
11 #include "ash/shell_delegate.h" | 11 #include "ash/shell_delegate.h" |
12 #include "ash/shell_window_ids.h" | 12 #include "ash/shell_window_ids.h" |
13 #include "ash/system/tray/system_tray.h" | 13 #include "ash/system/tray/system_tray.h" |
14 #include "ash/test/ash_test_base.h" | 14 #include "ash/test/ash_test_base.h" |
15 #include "ui/aura/client/aura_constants.h" | 15 #include "ui/aura/client/aura_constants.h" |
16 #include "ui/aura/env.h" | 16 #include "ui/aura/env.h" |
17 #include "ui/aura/monitor_manager.h" | 17 #include "ui/aura/monitor_manager.h" |
18 #include "ui/aura/root_window.h" | 18 #include "ui/aura/root_window.h" |
19 #include "ui/aura/test/event_generator.h" | 19 #include "ui/aura/test/event_generator.h" |
20 #include "ui/aura/window.h" | 20 #include "ui/aura/window.h" |
21 #include "ui/base/animation/animation_container_element.h" | 21 #include "ui/base/animation/animation_container_element.h" |
22 #include "ui/compositor/layer.h" | 22 #include "ui/compositor/layer.h" |
23 #include "ui/compositor/layer_animator.h" | 23 #include "ui/compositor/layer_animator.h" |
24 #include "ui/gfx/monitor.h" | 24 #include "ui/gfx/display.h" |
25 #include "ui/gfx/screen.h" | 25 #include "ui/gfx/screen.h" |
26 #include "ui/views/widget/widget.h" | 26 #include "ui/views/widget/widget.h" |
27 | 27 |
28 namespace ash { | 28 namespace ash { |
29 namespace internal { | 29 namespace internal { |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 void StepWidgetLayerAnimatorToEnd(views::Widget* widget) { | 33 void StepWidgetLayerAnimatorToEnd(views::Widget* widget) { |
34 ui::AnimationContainerElement* element = | 34 ui::AnimationContainerElement* element = |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 // Force an initial layout. | 87 // Force an initial layout. |
88 shelf->LayoutShelf(); | 88 shelf->LayoutShelf(); |
89 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); | 89 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); |
90 | 90 |
91 gfx::Rect status_bounds(shelf->status()->GetWindowScreenBounds()); | 91 gfx::Rect status_bounds(shelf->status()->GetWindowScreenBounds()); |
92 gfx::Rect launcher_bounds(shelf->launcher_widget()->GetWindowScreenBounds()); | 92 gfx::Rect launcher_bounds(shelf->launcher_widget()->GetWindowScreenBounds()); |
93 int shelf_height = shelf->GetIdealBounds().height(); | 93 int shelf_height = shelf->GetIdealBounds().height(); |
94 | 94 |
95 const aura::MonitorManager* manager = | 95 const aura::MonitorManager* manager = |
96 aura::Env::GetInstance()->monitor_manager(); | 96 aura::Env::GetInstance()->monitor_manager(); |
97 const gfx::Monitor& monitor = | 97 const gfx::Display& display = |
98 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); | 98 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); |
99 ASSERT_NE(-1, monitor.id()); | 99 ASSERT_NE(-1, display.id()); |
100 // Bottom inset should be the max of widget heights. | 100 // Bottom inset should be the max of widget heights. |
101 EXPECT_EQ(shelf_height, | 101 EXPECT_EQ(shelf_height, |
102 monitor.bounds().bottom() - monitor.work_area().bottom()); | 102 display.bounds().bottom() - display.work_area().bottom()); |
103 | 103 |
104 // Hide the shelf. | 104 // Hide the shelf. |
105 SetState(shelf, ShelfLayoutManager::HIDDEN); | 105 SetState(shelf, ShelfLayoutManager::HIDDEN); |
106 // Run the animation to completion. | 106 // Run the animation to completion. |
107 StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); | 107 StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); |
108 StepWidgetLayerAnimatorToEnd(shelf->status()); | 108 StepWidgetLayerAnimatorToEnd(shelf->status()); |
109 EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); | 109 EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); |
110 EXPECT_EQ(0, | 110 EXPECT_EQ(0, |
111 monitor.bounds().bottom() - monitor.work_area().bottom()); | 111 display.bounds().bottom() - display.work_area().bottom()); |
112 | 112 |
113 // Make sure the bounds of the two widgets changed. | 113 // Make sure the bounds of the two widgets changed. |
114 EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), | 114 EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), |
115 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); | 115 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); |
116 EXPECT_GE(shelf->status()->GetNativeView()->bounds().y(), | 116 EXPECT_GE(shelf->status()->GetNativeView()->bounds().y(), |
117 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); | 117 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); |
118 | 118 |
119 // And show it again. | 119 // And show it again. |
120 SetState(shelf, ShelfLayoutManager::VISIBLE); | 120 SetState(shelf, ShelfLayoutManager::VISIBLE); |
121 // Run the animation to completion. | 121 // Run the animation to completion. |
122 StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); | 122 StepWidgetLayerAnimatorToEnd(shelf->launcher_widget()); |
123 StepWidgetLayerAnimatorToEnd(shelf->status()); | 123 StepWidgetLayerAnimatorToEnd(shelf->status()); |
124 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); | 124 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); |
125 EXPECT_EQ(shelf_height, | 125 EXPECT_EQ(shelf_height, |
126 monitor.bounds().bottom() - monitor.work_area().bottom()); | 126 display.bounds().bottom() - display.work_area().bottom()); |
127 | 127 |
128 // Make sure the bounds of the two widgets changed. | 128 // Make sure the bounds of the two widgets changed. |
129 launcher_bounds = shelf->launcher_widget()->GetNativeView()->bounds(); | 129 launcher_bounds = shelf->launcher_widget()->GetNativeView()->bounds(); |
130 int bottom = gfx::Screen::GetPrimaryMonitor().bounds().bottom() - | 130 int bottom = gfx::Screen::GetPrimaryMonitor().bounds().bottom() - |
131 shelf_height; | 131 shelf_height; |
132 EXPECT_EQ(launcher_bounds.y(), | 132 EXPECT_EQ(launcher_bounds.y(), |
133 bottom + (shelf->GetIdealBounds().height() - | 133 bottom + (shelf->GetIdealBounds().height() - |
134 launcher_bounds.height()) / 2); | 134 launcher_bounds.height()) / 2); |
135 status_bounds = shelf->status()->GetNativeView()->bounds(); | 135 status_bounds = shelf->status()->GetNativeView()->bounds(); |
136 EXPECT_EQ(status_bounds.y(), | 136 EXPECT_EQ(status_bounds.y(), |
137 bottom + shelf_height - status_bounds.height()); | 137 bottom + shelf_height - status_bounds.height()); |
138 } | 138 } |
139 | 139 |
140 // Makes sure LayoutShelf invoked while animating cleans things up. | 140 // Makes sure LayoutShelf invoked while animating cleans things up. |
141 TEST_F(ShelfLayoutManagerTest, LayoutShelfWhileAnimating) { | 141 TEST_F(ShelfLayoutManagerTest, LayoutShelfWhileAnimating) { |
142 ShelfLayoutManager* shelf = GetShelfLayoutManager(); | 142 ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
143 // Force an initial layout. | 143 // Force an initial layout. |
144 shelf->LayoutShelf(); | 144 shelf->LayoutShelf(); |
145 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); | 145 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); |
146 | 146 |
147 const aura::MonitorManager* manager = | 147 const aura::MonitorManager* manager = |
148 aura::Env::GetInstance()->monitor_manager(); | 148 aura::Env::GetInstance()->monitor_manager(); |
149 const gfx::Monitor& monitor = | 149 const gfx::Display& display = |
150 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); | 150 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); |
151 | 151 |
152 // Hide the shelf. | 152 // Hide the shelf. |
153 SetState(shelf, ShelfLayoutManager::HIDDEN); | 153 SetState(shelf, ShelfLayoutManager::HIDDEN); |
154 shelf->LayoutShelf(); | 154 shelf->LayoutShelf(); |
155 EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); | 155 EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state()); |
156 EXPECT_EQ(0, monitor.bounds().bottom() - monitor.work_area().bottom()); | 156 EXPECT_EQ(0, display.bounds().bottom() - display.work_area().bottom()); |
157 | 157 |
158 // Make sure the bounds of the two widgets changed. | 158 // Make sure the bounds of the two widgets changed. |
159 EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), | 159 EXPECT_GE(shelf->launcher_widget()->GetNativeView()->bounds().y(), |
160 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); | 160 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); |
161 EXPECT_GE(shelf->status()->GetNativeView()->bounds().y(), | 161 EXPECT_GE(shelf->status()->GetNativeView()->bounds().y(), |
162 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); | 162 gfx::Screen::GetPrimaryMonitor().bounds().bottom()); |
163 } | 163 } |
164 | 164 |
165 // Makes sure the launcher is initially sized correctly. | 165 // Makes sure the launcher is initially sized correctly. |
166 TEST_F(ShelfLayoutManagerTest, LauncherInitiallySized) { | 166 TEST_F(ShelfLayoutManagerTest, LauncherInitiallySized) { |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 ShelfLayoutManager* shelf = GetShelfLayoutManager(); | 496 ShelfLayoutManager* shelf = GetShelfLayoutManager(); |
497 // Force an initial layout. | 497 // Force an initial layout. |
498 shelf->LayoutShelf(); | 498 shelf->LayoutShelf(); |
499 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); | 499 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state()); |
500 | 500 |
501 shelf->SetAlignment(SHELF_ALIGNMENT_LEFT); | 501 shelf->SetAlignment(SHELF_ALIGNMENT_LEFT); |
502 | 502 |
503 gfx::Rect launcher_bounds(shelf->launcher_widget()->GetWindowScreenBounds()); | 503 gfx::Rect launcher_bounds(shelf->launcher_widget()->GetWindowScreenBounds()); |
504 const aura::MonitorManager* manager = | 504 const aura::MonitorManager* manager = |
505 aura::Env::GetInstance()->monitor_manager(); | 505 aura::Env::GetInstance()->monitor_manager(); |
506 gfx::Monitor monitor = | 506 gfx::Display display = |
507 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); | 507 manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); |
508 ASSERT_NE(-1, monitor.id()); | 508 ASSERT_NE(-1, display.id()); |
509 EXPECT_EQ(shelf->GetIdealBounds().width(), | 509 EXPECT_EQ(shelf->GetIdealBounds().width(), |
510 monitor.GetWorkAreaInsets().left()); | 510 display.GetWorkAreaInsets().left()); |
511 EXPECT_GE( | 511 EXPECT_GE( |
512 launcher_bounds.width(), | 512 launcher_bounds.width(), |
513 shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); | 513 shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); |
514 EXPECT_EQ(SHELF_ALIGNMENT_LEFT, | 514 EXPECT_EQ(SHELF_ALIGNMENT_LEFT, |
515 Shell::GetInstance()->system_tray()->shelf_alignment()); | 515 Shell::GetInstance()->system_tray()->shelf_alignment()); |
516 gfx::Rect status_bounds(shelf->status()->GetWindowScreenBounds()); | 516 gfx::Rect status_bounds(shelf->status()->GetWindowScreenBounds()); |
517 EXPECT_GE(status_bounds.width(), | 517 EXPECT_GE(status_bounds.width(), |
518 shelf->status()->GetContentsView()->GetPreferredSize().width()); | 518 shelf->status()->GetContentsView()->GetPreferredSize().width()); |
519 EXPECT_EQ(shelf->GetIdealBounds().width(), | 519 EXPECT_EQ(shelf->GetIdealBounds().width(), |
520 monitor.GetWorkAreaInsets().left()); | 520 display.GetWorkAreaInsets().left()); |
521 EXPECT_EQ(0, monitor.GetWorkAreaInsets().top()); | 521 EXPECT_EQ(0, display.GetWorkAreaInsets().top()); |
522 EXPECT_EQ(0, monitor.GetWorkAreaInsets().bottom()); | 522 EXPECT_EQ(0, display.GetWorkAreaInsets().bottom()); |
523 EXPECT_EQ(0, monitor.GetWorkAreaInsets().right()); | 523 EXPECT_EQ(0, display.GetWorkAreaInsets().right()); |
524 EXPECT_EQ(monitor.bounds().x(), launcher_bounds.x()); | 524 EXPECT_EQ(display.bounds().x(), launcher_bounds.x()); |
525 EXPECT_EQ(monitor.bounds().y(), launcher_bounds.y()); | 525 EXPECT_EQ(display.bounds().y(), launcher_bounds.y()); |
526 EXPECT_EQ(monitor.bounds().height(), launcher_bounds.height()); | 526 EXPECT_EQ(display.bounds().height(), launcher_bounds.height()); |
527 | 527 |
528 shelf->SetAlignment(SHELF_ALIGNMENT_RIGHT); | 528 shelf->SetAlignment(SHELF_ALIGNMENT_RIGHT); |
529 launcher_bounds = shelf->launcher_widget()->GetWindowScreenBounds(); | 529 launcher_bounds = shelf->launcher_widget()->GetWindowScreenBounds(); |
530 monitor = manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); | 530 display = manager->GetMonitorNearestWindow(Shell::GetPrimaryRootWindow()); |
531 ASSERT_NE(-1, monitor.id()); | 531 ASSERT_NE(-1, display.id()); |
532 EXPECT_EQ(shelf->GetIdealBounds().width(), | 532 EXPECT_EQ(shelf->GetIdealBounds().width(), |
533 monitor.GetWorkAreaInsets().right()); | 533 display.GetWorkAreaInsets().right()); |
534 EXPECT_GE( | 534 EXPECT_GE( |
535 launcher_bounds.width(), | 535 launcher_bounds.width(), |
536 shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); | 536 shelf->launcher_widget()->GetContentsView()->GetPreferredSize().width()); |
537 EXPECT_EQ(SHELF_ALIGNMENT_RIGHT, | 537 EXPECT_EQ(SHELF_ALIGNMENT_RIGHT, |
538 Shell::GetInstance()->system_tray()->shelf_alignment()); | 538 Shell::GetInstance()->system_tray()->shelf_alignment()); |
539 status_bounds = gfx::Rect(shelf->status()->GetWindowScreenBounds()); | 539 status_bounds = gfx::Rect(shelf->status()->GetWindowScreenBounds()); |
540 EXPECT_GE(status_bounds.width(), | 540 EXPECT_GE(status_bounds.width(), |
541 shelf->status()->GetContentsView()->GetPreferredSize().width()); | 541 shelf->status()->GetContentsView()->GetPreferredSize().width()); |
542 EXPECT_EQ(shelf->GetIdealBounds().width(), | 542 EXPECT_EQ(shelf->GetIdealBounds().width(), |
543 monitor.GetWorkAreaInsets().right()); | 543 display.GetWorkAreaInsets().right()); |
544 EXPECT_EQ(0, monitor.GetWorkAreaInsets().top()); | 544 EXPECT_EQ(0, display.GetWorkAreaInsets().top()); |
545 EXPECT_EQ(0, monitor.GetWorkAreaInsets().bottom()); | 545 EXPECT_EQ(0, display.GetWorkAreaInsets().bottom()); |
546 EXPECT_EQ(0, monitor.GetWorkAreaInsets().left()); | 546 EXPECT_EQ(0, display.GetWorkAreaInsets().left()); |
547 EXPECT_EQ(monitor.work_area().right(), launcher_bounds.x()); | 547 EXPECT_EQ(display.work_area().right(), launcher_bounds.x()); |
548 EXPECT_EQ(monitor.bounds().y(), launcher_bounds.y()); | 548 EXPECT_EQ(display.bounds().y(), launcher_bounds.y()); |
549 EXPECT_EQ(monitor.bounds().height(), launcher_bounds.height()); | 549 EXPECT_EQ(display.bounds().height(), launcher_bounds.height()); |
550 } | 550 } |
551 | 551 |
552 } // namespace internal | 552 } // namespace internal |
553 } // namespace ash | 553 } // namespace ash |
OLD | NEW |