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/display/display_manager.h" | 5 #include "ash/display/display_manager.h" |
6 | 6 |
7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
8 #include "ash/display/display_controller.h" | 8 #include "ash/display/display_controller.h" |
9 #include "ash/display/display_info.h" | 9 #include "ash/display/display_info.h" |
10 #include "ash/display/display_layout_store.h" | 10 #include "ash/display/display_layout_store.h" |
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 } | 116 } |
117 void OnDisplayAdded(const gfx::Display& new_display) override { | 117 void OnDisplayAdded(const gfx::Display& new_display) override { |
118 added_.push_back(new_display); | 118 added_.push_back(new_display); |
119 } | 119 } |
120 void OnDisplayRemoved(const gfx::Display& old_display) override { | 120 void OnDisplayRemoved(const gfx::Display& old_display) override { |
121 ++removed_count_; | 121 ++removed_count_; |
122 } | 122 } |
123 | 123 |
124 // aura::WindowObserver overrides: | 124 // aura::WindowObserver overrides: |
125 void OnWindowDestroying(aura::Window* window) override { | 125 void OnWindowDestroying(aura::Window* window) override { |
126 // TODO(oshima): When moving between unified desktop, the | 126 ASSERT_EQ(Shell::GetPrimaryRootWindow(), window); |
127 // primary root window can be deleted. | 127 root_window_destroyed_ = true; |
128 if (!display_manager()->IsInUnifiedMode()) { | |
129 ASSERT_EQ(Shell::GetPrimaryRootWindow(), window); | |
130 root_window_destroyed_ = true; | |
131 } | |
132 } | 128 } |
133 | 129 |
134 private: | 130 private: |
135 vector<gfx::Display> changed_; | 131 vector<gfx::Display> changed_; |
136 vector<gfx::Display> added_; | 132 vector<gfx::Display> added_; |
137 size_t removed_count_; | 133 size_t removed_count_; |
138 bool root_window_destroyed_; | 134 bool root_window_destroyed_; |
139 uint32_t changed_metrics_; | 135 uint32_t changed_metrics_; |
140 | 136 |
141 DISALLOW_COPY_AND_ASSIGN(DisplayManagerTest); | 137 DISALLOW_COPY_AND_ASSIGN(DisplayManagerTest); |
(...skipping 1318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1460 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 1456 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
1461 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); | 1457 EXPECT_EQ("100,200", host0->GetBounds().origin().ToString()); |
1462 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); | 1458 EXPECT_EQ("100x200", host0->GetBounds().size().ToString()); |
1463 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); | 1459 EXPECT_EQ("300,500", host1->GetBounds().origin().ToString()); |
1464 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); | 1460 EXPECT_EQ("200x300", host1->GetBounds().size().ToString()); |
1465 } | 1461 } |
1466 | 1462 |
1467 TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { | 1463 TEST_F(DisplayManagerTest, UnifiedDesktopBasic) { |
1468 if (!SupportsMultipleDisplays()) | 1464 if (!SupportsMultipleDisplays()) |
1469 return; | 1465 return; |
| 1466 // Don't check root window destruction in unified mode. |
| 1467 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
1470 | 1468 |
| 1469 UpdateDisplay("300x200,400x500"); |
| 1470 |
| 1471 // Switch to unified desktop. |
1471 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); | 1472 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); |
1472 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); | 1473 display_manager()->ReconfigureDisplays(); |
1473 UpdateDisplay("300x200,400x500"); | |
1474 | 1474 |
1475 gfx::Screen* screen = | 1475 gfx::Screen* screen = |
1476 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1476 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
1477 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); | 1477 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); |
1478 | 1478 |
1479 display_manager()->SetMirrorMode(true); | 1479 display_manager()->SetMirrorMode(true); |
1480 EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); | 1480 EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); |
1481 | 1481 |
1482 display_manager()->SetMirrorMode(false); | 1482 display_manager()->SetMirrorMode(false); |
1483 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); | 1483 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); |
1484 | 1484 |
1485 // Swithc to single desktop. | 1485 // Switch to single desktop. |
1486 UpdateDisplay("500x300"); | 1486 UpdateDisplay("500x300"); |
1487 EXPECT_EQ("500x300", screen->GetPrimaryDisplay().size().ToString()); | 1487 EXPECT_EQ("500x300", screen->GetPrimaryDisplay().size().ToString()); |
1488 | 1488 |
1489 // Swithc to unified desktop. | 1489 // Switch to unified desktop. |
1490 UpdateDisplay("500x300,400x500"); | 1490 UpdateDisplay("500x300,400x500"); |
1491 EXPECT_EQ("900x500", screen->GetPrimaryDisplay().size().ToString()); | 1491 EXPECT_EQ("900x500", screen->GetPrimaryDisplay().size().ToString()); |
| 1492 |
| 1493 // Switch back to extended desktop. |
| 1494 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::EXTENDED); |
| 1495 display_manager()->ReconfigureDisplays(); |
| 1496 EXPECT_EQ("500x300", screen->GetPrimaryDisplay().size().ToString()); |
| 1497 EXPECT_EQ("400x500", ScreenUtil::GetSecondaryDisplay().size().ToString()); |
1492 } | 1498 } |
1493 | 1499 |
1494 TEST_F(DisplayManagerTest, RotateUnifiedDesktop) { | 1500 TEST_F(DisplayManagerTest, RotateUnifiedDesktop) { |
1495 if (!SupportsMultipleDisplays()) | 1501 if (!SupportsMultipleDisplays()) |
1496 return; | 1502 return; |
| 1503 // Don't check root window destruction in unified mode. |
| 1504 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
1497 | 1505 |
1498 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); | 1506 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); |
1499 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); | 1507 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); |
1500 UpdateDisplay("300x200,400x500"); | 1508 UpdateDisplay("300x200,400x500"); |
1501 | 1509 |
1502 gfx::Screen* screen = | 1510 gfx::Screen* screen = |
1503 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); | 1511 gfx::Screen::GetScreenByType(gfx::SCREEN_TYPE_ALTERNATE); |
1504 const gfx::Display& display = screen->GetPrimaryDisplay(); | 1512 const gfx::Display& display = screen->GetPrimaryDisplay(); |
1505 EXPECT_EQ("700x500", display.size().ToString()); | 1513 EXPECT_EQ("700x500", display.size().ToString()); |
1506 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_90, | 1514 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_90, |
1507 gfx::Display::ROTATION_SOURCE_ACTIVE); | 1515 gfx::Display::ROTATION_SOURCE_ACTIVE); |
1508 EXPECT_EQ("500x700", screen->GetPrimaryDisplay().size().ToString()); | 1516 EXPECT_EQ("500x700", screen->GetPrimaryDisplay().size().ToString()); |
1509 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_0, | 1517 display_manager()->SetDisplayRotation(display.id(), gfx::Display::ROTATE_0, |
1510 gfx::Display::ROTATION_SOURCE_ACTIVE); | 1518 gfx::Display::ROTATION_SOURCE_ACTIVE); |
1511 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); | 1519 EXPECT_EQ("700x500", screen->GetPrimaryDisplay().size().ToString()); |
1512 | 1520 |
1513 UpdateDisplay("300x200"); | 1521 UpdateDisplay("300x200"); |
1514 EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); | 1522 EXPECT_EQ("300x200", screen->GetPrimaryDisplay().size().ToString()); |
1515 } | 1523 } |
1516 | 1524 |
1517 // Makes sure the transition from unified to single won't crash | 1525 // Makes sure the transition from unified to single won't crash |
1518 // with docked wnidows. | 1526 // with docked wnidows. |
1519 TEST_F(DisplayManagerTest, UnifiedWithDockWindows) { | 1527 TEST_F(DisplayManagerTest, UnifiedWithDockWindows) { |
1520 if (!SupportsMultipleDisplays()) | 1528 if (!SupportsMultipleDisplays()) |
1521 return; | 1529 return; |
| 1530 // Don't check root window destruction in unified mode. |
| 1531 Shell::GetPrimaryRootWindow()->RemoveObserver(this); |
1522 | 1532 |
1523 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); | 1533 display_manager()->SetDefaultMultiDisplayMode(DisplayManager::UNIFIED); |
1524 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); | 1534 display_manager()->SetMultiDisplayMode(DisplayManager::UNIFIED); |
1525 UpdateDisplay("300x200,400x500"); | 1535 UpdateDisplay("300x200,400x500"); |
1526 | 1536 |
1527 scoped_ptr<aura::Window> docked( | 1537 scoped_ptr<aura::Window> docked( |
1528 CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 50, 50))); | 1538 CreateTestWindowInShellWithBounds(gfx::Rect(10, 10, 50, 50))); |
1529 docked->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_DOCKED); | 1539 docked->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_DOCKED); |
1530 ASSERT_TRUE(wm::GetWindowState(docked.get())->IsDocked()); | 1540 ASSERT_TRUE(wm::GetWindowState(docked.get())->IsDocked()); |
1531 EXPECT_EQ("0,0 250x453", docked->bounds().ToString()); | 1541 EXPECT_EQ("0,0 250x453", docked->bounds().ToString()); |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1689 1.25f, Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor()); | 1699 1.25f, Shell::GetScreen()->GetPrimaryDisplay().device_scale_factor()); |
1690 EXPECT_TRUE(IsTextSubpixelPositioningEnabled()); | 1700 EXPECT_TRUE(IsTextSubpixelPositioningEnabled()); |
1691 EXPECT_EQ(gfx::FontRenderParams::HINTING_NONE, GetFontHintingParams()); | 1701 EXPECT_EQ(gfx::FontRenderParams::HINTING_NONE, GetFontHintingParams()); |
1692 | 1702 |
1693 DisplayInfo::SetUse125DSFForUIScaling(false); | 1703 DisplayInfo::SetUse125DSFForUIScaling(false); |
1694 } | 1704 } |
1695 | 1705 |
1696 #endif // OS_CHROMEOS | 1706 #endif // OS_CHROMEOS |
1697 | 1707 |
1698 } // namespace ash | 1708 } // namespace ash |
OLD | NEW |