| 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/panels/panel_layout_manager.h" | 5 #include "ash/wm/panels/panel_layout_manager.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/screen_util.h" | 8 #include "ash/screen_util.h" |
| 9 #include "ash/shelf/shelf.h" | 9 #include "ash/shelf/shelf.h" |
| 10 #include "ash/shelf/shelf_button.h" | 10 #include "ash/shelf/shelf_button.h" |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 143 switch (alignment) { | 143 switch (alignment) { |
| 144 case SHELF_ALIGNMENT_BOTTOM: | 144 case SHELF_ALIGNMENT_BOTTOM: |
| 145 EXPECT_EQ(shelf_bounds.y(), window_bounds.bottom()); | 145 EXPECT_EQ(shelf_bounds.y(), window_bounds.bottom()); |
| 146 break; | 146 break; |
| 147 case SHELF_ALIGNMENT_LEFT: | 147 case SHELF_ALIGNMENT_LEFT: |
| 148 EXPECT_EQ(shelf_bounds.right(), window_bounds.x()); | 148 EXPECT_EQ(shelf_bounds.right(), window_bounds.x()); |
| 149 break; | 149 break; |
| 150 case SHELF_ALIGNMENT_RIGHT: | 150 case SHELF_ALIGNMENT_RIGHT: |
| 151 EXPECT_EQ(shelf_bounds.x(), window_bounds.right()); | 151 EXPECT_EQ(shelf_bounds.x(), window_bounds.right()); |
| 152 break; | 152 break; |
| 153 case SHELF_ALIGNMENT_TOP: | |
| 154 EXPECT_EQ(shelf_bounds.bottom(), window_bounds.y()); | |
| 155 break; | |
| 156 } | 153 } |
| 157 } | 154 } |
| 158 | 155 |
| 159 void IsCalloutAboveLauncherIcon(aura::Window* panel) { | 156 void IsCalloutAboveLauncherIcon(aura::Window* panel) { |
| 160 // Flush the message loop, since callout updates use a delayed task. | 157 // Flush the message loop, since callout updates use a delayed task. |
| 161 base::RunLoop().RunUntilIdle(); | 158 base::RunLoop().RunUntilIdle(); |
| 162 views::Widget* widget = GetCalloutWidgetForPanel(panel); | 159 views::Widget* widget = GetCalloutWidgetForPanel(panel); |
| 163 | 160 |
| 164 Shelf* shelf = Shelf::ForWindow(panel); | 161 Shelf* shelf = Shelf::ForWindow(panel); |
| 165 gfx::Rect icon_bounds = shelf->GetScreenBoundsOfItemIconForWindow(panel); | 162 gfx::Rect icon_bounds = shelf->GetScreenBoundsOfItemIconForWindow(panel); |
| 166 ASSERT_FALSE(icon_bounds.IsEmpty()); | 163 ASSERT_FALSE(icon_bounds.IsEmpty()); |
| 167 | 164 |
| 168 gfx::Rect panel_bounds = panel->GetBoundsInScreen(); | 165 gfx::Rect panel_bounds = panel->GetBoundsInScreen(); |
| 169 gfx::Rect callout_bounds = widget->GetWindowBoundsInScreen(); | 166 gfx::Rect callout_bounds = widget->GetWindowBoundsInScreen(); |
| 170 ASSERT_FALSE(icon_bounds.IsEmpty()); | 167 ASSERT_FALSE(icon_bounds.IsEmpty()); |
| 171 | 168 |
| 172 EXPECT_TRUE(widget->IsVisible()); | 169 EXPECT_TRUE(widget->IsVisible()); |
| 173 | 170 |
| 174 ShelfAlignment alignment = GetAlignment(panel->GetRootWindow()); | 171 ShelfAlignment alignment = GetAlignment(panel->GetRootWindow()); |
| 175 switch (alignment) { | 172 switch (alignment) { |
| 176 case SHELF_ALIGNMENT_BOTTOM: | 173 case SHELF_ALIGNMENT_BOTTOM: |
| 177 EXPECT_EQ(panel_bounds.bottom(), callout_bounds.y()); | 174 EXPECT_EQ(panel_bounds.bottom(), callout_bounds.y()); |
| 178 break; | 175 break; |
| 179 case SHELF_ALIGNMENT_LEFT: | 176 case SHELF_ALIGNMENT_LEFT: |
| 180 EXPECT_EQ(panel_bounds.x(), callout_bounds.right()); | 177 EXPECT_EQ(panel_bounds.x(), callout_bounds.right()); |
| 181 break; | 178 break; |
| 182 case SHELF_ALIGNMENT_RIGHT: | 179 case SHELF_ALIGNMENT_RIGHT: |
| 183 EXPECT_EQ(panel_bounds.right(), callout_bounds.x()); | 180 EXPECT_EQ(panel_bounds.right(), callout_bounds.x()); |
| 184 break; | 181 break; |
| 185 case SHELF_ALIGNMENT_TOP: | |
| 186 EXPECT_EQ(panel_bounds.y(), callout_bounds.bottom()); | |
| 187 break; | |
| 188 } | 182 } |
| 189 | 183 |
| 190 if (IsHorizontal(alignment)) { | 184 if (IsHorizontal(alignment)) { |
| 191 EXPECT_NEAR(icon_bounds.CenterPoint().x(), | 185 EXPECT_NEAR(icon_bounds.CenterPoint().x(), |
| 192 widget->GetWindowBoundsInScreen().CenterPoint().x(), | 186 widget->GetWindowBoundsInScreen().CenterPoint().x(), |
| 193 1); | 187 1); |
| 194 } else { | 188 } else { |
| 195 EXPECT_NEAR(icon_bounds.CenterPoint().y(), | 189 EXPECT_NEAR(icon_bounds.CenterPoint().y(), |
| 196 widget->GetWindowBoundsInScreen().CenterPoint().y(), | 190 widget->GetWindowBoundsInScreen().CenterPoint().y(), |
| 197 1); | 191 1); |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 } | 243 } |
| 250 | 244 |
| 251 ShelfView* GetShelfView(Shelf* shelf) { | 245 ShelfView* GetShelfView(Shelf* shelf) { |
| 252 return test::ShelfTestAPI(shelf).shelf_view(); | 246 return test::ShelfTestAPI(shelf).shelf_view(); |
| 253 } | 247 } |
| 254 | 248 |
| 255 private: | 249 private: |
| 256 scoped_ptr<test::ShelfViewTestAPI> shelf_view_test_; | 250 scoped_ptr<test::ShelfViewTestAPI> shelf_view_test_; |
| 257 | 251 |
| 258 bool IsHorizontal(ShelfAlignment alignment) { | 252 bool IsHorizontal(ShelfAlignment alignment) { |
| 259 return alignment == SHELF_ALIGNMENT_BOTTOM || | 253 return alignment == SHELF_ALIGNMENT_BOTTOM; |
| 260 alignment == SHELF_ALIGNMENT_TOP; | |
| 261 } | 254 } |
| 262 | 255 |
| 263 DISALLOW_COPY_AND_ASSIGN(PanelLayoutManagerTest); | 256 DISALLOW_COPY_AND_ASSIGN(PanelLayoutManagerTest); |
| 264 }; | 257 }; |
| 265 | 258 |
| 266 class PanelLayoutManagerTextDirectionTest | 259 class PanelLayoutManagerTextDirectionTest |
| 267 : public PanelLayoutManagerTest, | 260 : public PanelLayoutManagerTest, |
| 268 public testing::WithParamInterface<bool> { | 261 public testing::WithParamInterface<bool> { |
| 269 public: | 262 public: |
| 270 PanelLayoutManagerTextDirectionTest() : is_rtl_(GetParam()) {} | 263 PanelLayoutManagerTextDirectionTest() : is_rtl_(GetParam()) {} |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 692 | 685 |
| 693 IsPanelAboveLauncherIcon(p1_d2.get()); | 686 IsPanelAboveLauncherIcon(p1_d2.get()); |
| 694 IsCalloutAboveLauncherIcon(p1_d2.get()); | 687 IsCalloutAboveLauncherIcon(p1_d2.get()); |
| 695 | 688 |
| 696 SetAlignment(root_windows[1], SHELF_ALIGNMENT_RIGHT); | 689 SetAlignment(root_windows[1], SHELF_ALIGNMENT_RIGHT); |
| 697 IsPanelAboveLauncherIcon(p1_d2.get()); | 690 IsPanelAboveLauncherIcon(p1_d2.get()); |
| 698 IsCalloutAboveLauncherIcon(p1_d2.get()); | 691 IsCalloutAboveLauncherIcon(p1_d2.get()); |
| 699 SetAlignment(root_windows[1], SHELF_ALIGNMENT_LEFT); | 692 SetAlignment(root_windows[1], SHELF_ALIGNMENT_LEFT); |
| 700 IsPanelAboveLauncherIcon(p1_d2.get()); | 693 IsPanelAboveLauncherIcon(p1_d2.get()); |
| 701 IsCalloutAboveLauncherIcon(p1_d2.get()); | 694 IsCalloutAboveLauncherIcon(p1_d2.get()); |
| 702 SetAlignment(root_windows[1], SHELF_ALIGNMENT_TOP); | |
| 703 IsPanelAboveLauncherIcon(p1_d2.get()); | |
| 704 IsCalloutAboveLauncherIcon(p1_d2.get()); | |
| 705 } | 695 } |
| 706 | 696 |
| 707 TEST_F(PanelLayoutManagerTest, AlignmentLeft) { | 697 TEST_F(PanelLayoutManagerTest, AlignmentLeft) { |
| 708 gfx::Rect bounds(0, 0, 201, 201); | 698 gfx::Rect bounds(0, 0, 201, 201); |
| 709 scoped_ptr<aura::Window> w(CreatePanelWindow(bounds)); | 699 scoped_ptr<aura::Window> w(CreatePanelWindow(bounds)); |
| 710 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_LEFT); | 700 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_LEFT); |
| 711 IsPanelAboveLauncherIcon(w.get()); | 701 IsPanelAboveLauncherIcon(w.get()); |
| 712 IsCalloutAboveLauncherIcon(w.get()); | 702 IsCalloutAboveLauncherIcon(w.get()); |
| 713 } | 703 } |
| 714 | 704 |
| 715 TEST_F(PanelLayoutManagerTest, AlignmentRight) { | 705 TEST_F(PanelLayoutManagerTest, AlignmentRight) { |
| 716 gfx::Rect bounds(0, 0, 201, 201); | 706 gfx::Rect bounds(0, 0, 201, 201); |
| 717 scoped_ptr<aura::Window> w(CreatePanelWindow(bounds)); | 707 scoped_ptr<aura::Window> w(CreatePanelWindow(bounds)); |
| 718 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_RIGHT); | 708 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_RIGHT); |
| 719 IsPanelAboveLauncherIcon(w.get()); | 709 IsPanelAboveLauncherIcon(w.get()); |
| 720 IsCalloutAboveLauncherIcon(w.get()); | 710 IsCalloutAboveLauncherIcon(w.get()); |
| 721 } | 711 } |
| 722 | 712 |
| 723 TEST_F(PanelLayoutManagerTest, AlignmentTop) { | |
| 724 gfx::Rect bounds(0, 0, 201, 201); | |
| 725 scoped_ptr<aura::Window> w(CreatePanelWindow(bounds)); | |
| 726 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_TOP); | |
| 727 IsPanelAboveLauncherIcon(w.get()); | |
| 728 IsCalloutAboveLauncherIcon(w.get()); | |
| 729 } | |
| 730 | |
| 731 // Tests that panels will hide and restore their state with the shelf visibility | 713 // Tests that panels will hide and restore their state with the shelf visibility |
| 732 // state. This ensures that entering full-screen mode will hide your panels | 714 // state. This ensures that entering full-screen mode will hide your panels |
| 733 // until you leave it. | 715 // until you leave it. |
| 734 TEST_F(PanelLayoutManagerTest, PanelsHideAndRestoreWithShelf) { | 716 TEST_F(PanelLayoutManagerTest, PanelsHideAndRestoreWithShelf) { |
| 735 gfx::Rect bounds(0, 0, 201, 201); | 717 gfx::Rect bounds(0, 0, 201, 201); |
| 736 | 718 |
| 737 scoped_ptr<aura::Window> w1(CreatePanelWindow(bounds)); | 719 scoped_ptr<aura::Window> w1(CreatePanelWindow(bounds)); |
| 738 scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds)); | 720 scoped_ptr<aura::Window> w2(CreatePanelWindow(bounds)); |
| 739 scoped_ptr<aura::Window> w3; | 721 scoped_ptr<aura::Window> w3; |
| 740 // Minimize w2. | 722 // Minimize w2. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 824 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_LEFT); | 806 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_LEFT); |
| 825 bounds = w->bounds(); | 807 bounds = w->bounds(); |
| 826 touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6)); | 808 touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6)); |
| 827 target = targeter->FindTargetForEvent(root, &touch); | 809 target = targeter->FindTargetForEvent(root, &touch); |
| 828 EXPECT_EQ(w.get(), target); | 810 EXPECT_EQ(w.get(), target); |
| 829 | 811 |
| 830 // Hit test outside the left edge with a left-aligned shelf. | 812 // Hit test outside the left edge with a left-aligned shelf. |
| 831 touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5)); | 813 touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5)); |
| 832 target = targeter->FindTargetForEvent(root, &touch); | 814 target = targeter->FindTargetForEvent(root, &touch); |
| 833 EXPECT_NE(w.get(), target); | 815 EXPECT_NE(w.get(), target); |
| 834 | |
| 835 // Hit test outside the left edge with a top-aligned shelf. | |
| 836 SetAlignment(Shell::GetPrimaryRootWindow(), SHELF_ALIGNMENT_TOP); | |
| 837 bounds = w->bounds(); | |
| 838 touch.set_location(gfx::Point(bounds.x() - 1, bounds.y() + 5)); | |
| 839 target = targeter->FindTargetForEvent(root, &touch); | |
| 840 EXPECT_EQ(w.get(), target); | |
| 841 | |
| 842 // Hit test outside the top edge with a top-aligned shelf. | |
| 843 touch.set_location(gfx::Point(bounds.x() + 4, bounds.y() - 6)); | |
| 844 target = targeter->FindTargetForEvent(root, &touch); | |
| 845 EXPECT_NE(w.get(), target); | |
| 846 } | 816 } |
| 847 | 817 |
| 848 INSTANTIATE_TEST_CASE_P(LtrRtl, PanelLayoutManagerTextDirectionTest, | 818 INSTANTIATE_TEST_CASE_P(LtrRtl, PanelLayoutManagerTextDirectionTest, |
| 849 testing::Bool()); | 819 testing::Bool()); |
| 850 | 820 |
| 851 } // namespace ash | 821 } // namespace ash |
| OLD | NEW |