| 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_controller.h" | 5 #include "ash/display/display_controller.h" |
| 6 | 6 |
| 7 #include "ash/display/display_info.h" | 7 #include "ash/display/display_info.h" |
| 8 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" |
| 9 #include "ash/launcher/launcher.h" | 9 #include "ash/launcher/launcher.h" |
| 10 #include "ash/screen_ash.h" | 10 #include "ash/screen_ash.h" |
| 11 #include "ash/shelf/shelf_widget.h" | 11 #include "ash/shelf/shelf_widget.h" |
| 12 #include "ash/shell.h" | 12 #include "ash/shell.h" |
| 13 #include "ash/test/ash_test_base.h" | 13 #include "ash/test/ash_test_base.h" |
| 14 #include "ash/test/cursor_manager_test_api.h" | 14 #include "ash/test/cursor_manager_test_api.h" |
| 15 #include "ui/aura/env.h" | 15 #include "ui/aura/env.h" |
| 16 #include "ui/aura/root_window.h" | 16 #include "ui/aura/root_window.h" |
| 17 #include "ui/aura/test/event_generator.h" | 17 #include "ui/aura/test/event_generator.h" |
| 18 #include "ui/aura/window_tracker.h" | 18 #include "ui/aura/window_tracker.h" |
| 19 #include "ui/base/events/event_handler.h" | 19 #include "ui/base/events/event_handler.h" |
| 20 #include "ui/gfx/display.h" | 20 #include "ui/gfx/display.h" |
| 21 #include "ui/gfx/screen.h" | 21 #include "ui/gfx/screen.h" |
| 22 #include "ui/views/widget/widget.h" | 22 #include "ui/views/widget/widget.h" |
| 23 | 23 |
| 24 namespace ash { | 24 namespace ash { |
| 25 namespace test { | 25 namespace test { |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 class TestObserver : public DisplayController::Observer { | 28 class TestObserver : public DisplayController::Observer { |
| 29 public: | 29 public: |
| 30 TestObserver() : count_(0) { | 30 TestObserver() : changing_count_(0), changed_count_(0) { |
| 31 Shell::GetInstance()->display_controller()->AddObserver(this); | 31 Shell::GetInstance()->display_controller()->AddObserver(this); |
| 32 } | 32 } |
| 33 | 33 |
| 34 virtual ~TestObserver() { | 34 virtual ~TestObserver() { |
| 35 Shell::GetInstance()->display_controller()->RemoveObserver(this); | 35 Shell::GetInstance()->display_controller()->RemoveObserver(this); |
| 36 } | 36 } |
| 37 | 37 |
| 38 virtual void OnDisplayConfigurationChanging() OVERRIDE { | 38 virtual void OnDisplayConfigurationChanging() OVERRIDE { |
| 39 ++count_; | 39 ++changing_count_; |
| 40 } |
| 41 |
| 42 virtual void OnDisplayConfigurationChanged() OVERRIDE { |
| 43 ++changed_count_; |
| 40 } | 44 } |
| 41 | 45 |
| 42 int CountAndReset() { | 46 int CountAndReset() { |
| 43 int c = count_; | 47 EXPECT_EQ(changing_count_, changed_count_); |
| 44 count_ = 0; | 48 int c = changing_count_; |
| 49 changing_count_ = changed_count_ = 0; |
| 45 return c; | 50 return c; |
| 46 } | 51 } |
| 47 | 52 |
| 48 private: | 53 private: |
| 49 int count_; | 54 int changing_count_; |
| 55 int changed_count_; |
| 50 | 56 |
| 51 DISALLOW_COPY_AND_ASSIGN(TestObserver); | 57 DISALLOW_COPY_AND_ASSIGN(TestObserver); |
| 52 }; | 58 }; |
| 53 | 59 |
| 54 gfx::Display GetPrimaryDisplay() { | 60 gfx::Display GetPrimaryDisplay() { |
| 55 return Shell::GetScreen()->GetDisplayNearestWindow( | 61 return Shell::GetScreen()->GetDisplayNearestWindow( |
| 56 Shell::GetAllRootWindows()[0]); | 62 Shell::GetAllRootWindows()[0]); |
| 57 } | 63 } |
| 58 | 64 |
| 59 gfx::Display GetSecondaryDisplay() { | 65 gfx::Display GetSecondaryDisplay() { |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 | 126 |
| 121 typedef test::AshTestBase DisplayControllerTest; | 127 typedef test::AshTestBase DisplayControllerTest; |
| 122 | 128 |
| 123 TEST_F(DisplayControllerShutdownTest, Shutdown) { | 129 TEST_F(DisplayControllerShutdownTest, Shutdown) { |
| 124 UpdateDisplay("444x333, 200x200"); | 130 UpdateDisplay("444x333, 200x200"); |
| 125 } | 131 } |
| 126 | 132 |
| 127 TEST_F(DisplayControllerTest, SecondaryDisplayLayout) { | 133 TEST_F(DisplayControllerTest, SecondaryDisplayLayout) { |
| 128 TestObserver observer; | 134 TestObserver observer; |
| 129 UpdateDisplay("500x500,400x400"); | 135 UpdateDisplay("500x500,400x400"); |
| 130 EXPECT_EQ(2, observer.CountAndReset()); // resize and add | 136 EXPECT_EQ(1, observer.CountAndReset()); // resize and add |
| 131 gfx::Display* secondary_display = | 137 gfx::Display* secondary_display = |
| 132 Shell::GetInstance()->display_manager()->GetDisplayAt(1); | 138 Shell::GetInstance()->display_manager()->GetDisplayAt(1); |
| 133 gfx::Insets insets(5, 5, 5, 5); | 139 gfx::Insets insets(5, 5, 5, 5); |
| 134 secondary_display->UpdateWorkAreaFromInsets(insets); | 140 secondary_display->UpdateWorkAreaFromInsets(insets); |
| 135 | 141 |
| 136 // Default layout is RIGHT. | 142 // Default layout is RIGHT. |
| 137 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); | 143 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); |
| 138 EXPECT_EQ("500,0 400x400", GetSecondaryDisplay().bounds().ToString()); | 144 EXPECT_EQ("500,0 400x400", GetSecondaryDisplay().bounds().ToString()); |
| 139 EXPECT_EQ("505,5 390x390", GetSecondaryDisplay().work_area().ToString()); | 145 EXPECT_EQ("505,5 390x390", GetSecondaryDisplay().work_area().ToString()); |
| 140 | 146 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 SetSecondaryDisplayLayoutAndOffset(DisplayLayout::BOTTOM, -400); | 197 SetSecondaryDisplayLayoutAndOffset(DisplayLayout::BOTTOM, -400); |
| 192 EXPECT_EQ(1, observer.CountAndReset()); // resize and add | 198 EXPECT_EQ(1, observer.CountAndReset()); // resize and add |
| 193 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); | 199 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); |
| 194 EXPECT_EQ("-300,500 400x400", GetSecondaryDisplay().bounds().ToString()); | 200 EXPECT_EQ("-300,500 400x400", GetSecondaryDisplay().bounds().ToString()); |
| 195 } | 201 } |
| 196 | 202 |
| 197 TEST_F(DisplayControllerTest, BoundsUpdated) { | 203 TEST_F(DisplayControllerTest, BoundsUpdated) { |
| 198 TestObserver observer; | 204 TestObserver observer; |
| 199 SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); | 205 SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); |
| 200 UpdateDisplay("200x200,300x300"); // layout, resize and add. | 206 UpdateDisplay("200x200,300x300"); // layout, resize and add. |
| 201 EXPECT_EQ(3, observer.CountAndReset()); | 207 EXPECT_EQ(2, observer.CountAndReset()); |
| 202 | 208 |
| 203 gfx::Display* secondary_display = | 209 internal::DisplayManager* display_manager = |
| 204 Shell::GetInstance()->display_manager()->GetDisplayAt(1); | 210 Shell::GetInstance()->display_manager(); |
| 211 gfx::Display* secondary_display = display_manager->GetDisplayAt(1); |
| 205 gfx::Insets insets(5, 5, 5, 5); | 212 gfx::Insets insets(5, 5, 5, 5); |
| 206 secondary_display->UpdateWorkAreaFromInsets(insets); | 213 secondary_display->UpdateWorkAreaFromInsets(insets); |
| 207 | 214 |
| 208 EXPECT_EQ("0,0 200x200", GetPrimaryDisplay().bounds().ToString()); | 215 EXPECT_EQ("0,0 200x200", GetPrimaryDisplay().bounds().ToString()); |
| 209 EXPECT_EQ("0,200 300x300", GetSecondaryDisplay().bounds().ToString()); | 216 EXPECT_EQ("0,200 300x300", GetSecondaryDisplay().bounds().ToString()); |
| 210 EXPECT_EQ("5,205 290x290", GetSecondaryDisplay().work_area().ToString()); | 217 EXPECT_EQ("5,205 290x290", GetSecondaryDisplay().work_area().ToString()); |
| 211 | 218 |
| 212 UpdateDisplay("400x400,200x200"); | 219 UpdateDisplay("400x400,200x200"); |
| 213 EXPECT_EQ(2, observer.CountAndReset()); // two resizes | 220 EXPECT_EQ(1, observer.CountAndReset()); // two resizes |
| 214 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); | 221 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); |
| 215 EXPECT_EQ("0,400 200x200", GetSecondaryDisplay().bounds().ToString()); | 222 EXPECT_EQ("0,400 200x200", GetSecondaryDisplay().bounds().ToString()); |
| 216 if (!ash::Shell::IsLauncherPerDisplayEnabled()) | 223 if (!ash::Shell::IsLauncherPerDisplayEnabled()) |
| 217 EXPECT_EQ("5,405 190x190", GetSecondaryDisplay().work_area().ToString()); | 224 EXPECT_EQ("5,405 190x190", GetSecondaryDisplay().work_area().ToString()); |
| 218 | 225 |
| 219 UpdateDisplay("400x400,300x300"); | 226 UpdateDisplay("400x400,300x300"); |
| 220 EXPECT_EQ(1, observer.CountAndReset()); | 227 EXPECT_EQ(1, observer.CountAndReset()); |
| 221 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); | 228 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); |
| 222 EXPECT_EQ("0,400 300x300", GetSecondaryDisplay().bounds().ToString()); | 229 EXPECT_EQ("0,400 300x300", GetSecondaryDisplay().bounds().ToString()); |
| 223 if (!ash::Shell::IsLauncherPerDisplayEnabled()) | 230 if (!ash::Shell::IsLauncherPerDisplayEnabled()) |
| 224 EXPECT_EQ("5,405 290x290", GetSecondaryDisplay().work_area().ToString()); | 231 EXPECT_EQ("5,405 290x290", GetSecondaryDisplay().work_area().ToString()); |
| 225 | 232 |
| 226 UpdateDisplay("400x400"); | 233 UpdateDisplay("400x400"); |
| 227 EXPECT_EQ(1, observer.CountAndReset()); | 234 EXPECT_EQ(1, observer.CountAndReset()); |
| 228 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); | 235 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); |
| 229 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); | 236 EXPECT_EQ(1, Shell::GetScreen()->GetNumDisplays()); |
| 230 | 237 |
| 231 UpdateDisplay("500x500,700x700"); | 238 UpdateDisplay("400x500,700x700*2"); |
| 232 EXPECT_EQ(2, observer.CountAndReset()); | 239 EXPECT_EQ(1, observer.CountAndReset()); |
| 233 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 240 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 234 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); | 241 EXPECT_EQ("0,0 400x500", GetPrimaryDisplay().bounds().ToString()); |
| 235 EXPECT_EQ("0,500 700x700", GetSecondaryDisplay().bounds().ToString()); | 242 EXPECT_EQ("0,500 350x350", GetSecondaryDisplay().bounds().ToString()); |
| 243 |
| 244 // No change |
| 245 UpdateDisplay("400x500,700x700*2"); |
| 246 EXPECT_EQ(0, observer.CountAndReset()); |
| 247 |
| 248 // Rotation |
| 249 int64 primary_id = GetPrimaryDisplay().id(); |
| 250 display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_90); |
| 251 EXPECT_EQ(1, observer.CountAndReset()); |
| 252 display_manager->SetDisplayRotation(primary_id, gfx::Display::ROTATE_90); |
| 253 EXPECT_EQ(0, observer.CountAndReset()); |
| 254 |
| 255 // UI scale |
| 256 int64 secondary_id = GetSecondaryDisplay().id(); |
| 257 gfx::Display::SetInternalDisplayId(secondary_id); |
| 258 display_manager->SetDisplayUIScale(secondary_id, 1.25f); |
| 259 EXPECT_EQ(1, observer.CountAndReset()); |
| 260 display_manager->SetDisplayUIScale(secondary_id, 1.25f); |
| 261 EXPECT_EQ(0, observer.CountAndReset()); |
| 236 } | 262 } |
| 237 | 263 |
| 238 TEST_F(DisplayControllerTest, InvertLayout) { | 264 TEST_F(DisplayControllerTest, InvertLayout) { |
| 239 EXPECT_EQ("left, 0", | 265 EXPECT_EQ("left, 0", |
| 240 DisplayLayout(DisplayLayout::RIGHT, 0).Invert().ToString()); | 266 DisplayLayout(DisplayLayout::RIGHT, 0).Invert().ToString()); |
| 241 EXPECT_EQ("left, -100", | 267 EXPECT_EQ("left, -100", |
| 242 DisplayLayout(DisplayLayout::RIGHT, 100).Invert().ToString()); | 268 DisplayLayout(DisplayLayout::RIGHT, 100).Invert().ToString()); |
| 243 EXPECT_EQ("left, 50", | 269 EXPECT_EQ("left, 50", |
| 244 DisplayLayout(DisplayLayout::RIGHT, -50).Invert().ToString()); | 270 DisplayLayout(DisplayLayout::RIGHT, -50).Invert().ToString()); |
| 245 | 271 |
| (...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 700 | 726 |
| 701 aura::test::EventGenerator generator(root_windows[0]); | 727 aura::test::EventGenerator generator(root_windows[0]); |
| 702 generator.MoveMouseTo(599, 200); | 728 generator.MoveMouseTo(599, 200); |
| 703 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); | 729 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); |
| 704 | 730 |
| 705 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 731 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
| 706 } | 732 } |
| 707 | 733 |
| 708 } // namespace test | 734 } // namespace test |
| 709 } // namespace ash | 735 } // namespace ash |
| OLD | NEW |