| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/extended_mouse_warp_controller.h" | 5 #include "ash/display/extended_mouse_warp_controller.h" |
| 6 | 6 |
| 7 #include "ash/display/display_layout_builder.h" |
| 7 #include "ash/display/display_layout_store.h" | 8 #include "ash/display/display_layout_store.h" |
| 8 #include "ash/display/display_manager.h" | 9 #include "ash/display/display_manager.h" |
| 9 #include "ash/display/mouse_cursor_event_filter.h" | 10 #include "ash/display/mouse_cursor_event_filter.h" |
| 10 #include "ash/shell.h" | 11 #include "ash/shell.h" |
| 11 #include "ash/test/ash_test_base.h" | 12 #include "ash/test/ash_test_base.h" |
| 12 #include "ash/test/display_manager_test_api.h" | 13 #include "ash/test/display_manager_test_api.h" |
| 13 #include "ui/events/test/event_generator.h" | 14 #include "ui/events/test/event_generator.h" |
| 14 #include "ui/gfx/display.h" | 15 #include "ui/gfx/display.h" |
| 15 #include "ui/gfx/screen.h" | 16 #include "ui/gfx/screen.h" |
| 16 | 17 |
| 17 namespace ash { | 18 namespace ash { |
| 18 | 19 |
| 19 class ExtendedMouseWarpControllerTest : public test::AshTestBase { | 20 class ExtendedMouseWarpControllerTest : public test::AshTestBase { |
| 20 public: | 21 public: |
| 21 ExtendedMouseWarpControllerTest() {} | 22 ExtendedMouseWarpControllerTest() {} |
| 22 ~ExtendedMouseWarpControllerTest() override {} | 23 ~ExtendedMouseWarpControllerTest() override {} |
| 23 | 24 |
| 24 protected: | 25 protected: |
| 25 MouseCursorEventFilter* event_filter() { | 26 MouseCursorEventFilter* event_filter() { |
| 26 return Shell::GetInstance()->mouse_cursor_filter(); | 27 return Shell::GetInstance()->mouse_cursor_filter(); |
| 27 } | 28 } |
| 28 | 29 |
| 29 ExtendedMouseWarpController* mouse_warp_controller() { | 30 ExtendedMouseWarpController* mouse_warp_controller() { |
| 30 return static_cast<ExtendedMouseWarpController*>( | 31 return static_cast<ExtendedMouseWarpController*>( |
| 31 event_filter()->mouse_warp_controller_for_test()); | 32 event_filter()->mouse_warp_controller_for_test()); |
| 32 } | 33 } |
| 33 | 34 |
| 35 size_t GetWarpRegionsCount() { |
| 36 return mouse_warp_controller()->warp_regions_.size(); |
| 37 } |
| 38 |
| 39 const ExtendedMouseWarpController::WarpRegion* GetWarpRegion(size_t index) { |
| 40 return mouse_warp_controller()->warp_regions_[index].get(); |
| 41 } |
| 42 |
| 43 const gfx::Rect& GetIndicatorBounds(int64_t id) { |
| 44 return GetWarpRegion(0)->GetIndicatorBoundsForTest(id); |
| 45 } |
| 46 |
| 34 private: | 47 private: |
| 35 DISALLOW_COPY_AND_ASSIGN(ExtendedMouseWarpControllerTest); | 48 DISALLOW_COPY_AND_ASSIGN(ExtendedMouseWarpControllerTest); |
| 36 }; | 49 }; |
| 37 | 50 |
| 38 // Verifies if MouseCursorEventFilter's bounds calculation works correctly. | 51 // Verifies if MouseCursorEventFilter's bounds calculation works correctly. |
| 39 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) { | 52 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnRight) { |
| 40 if (!SupportsMultipleDisplays()) | 53 if (!SupportsMultipleDisplays()) |
| 41 return; | 54 return; |
| 42 | 55 |
| 43 UpdateDisplay("360x360,700x700"); | 56 UpdateDisplay("360x360,700x700"); |
| 44 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 57 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 58 int64_t display_0_id = |
| 59 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id(); |
| 60 int64_t display_1_id = |
| 61 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id(); |
| 45 | 62 |
| 46 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 63 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 47 scoped_ptr<DisplayLayout> layout( | 64 scoped_ptr<DisplayLayout> layout( |
| 48 test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0)); | 65 test::CreateDisplayLayout(DisplayPlacement::RIGHT, 0)); |
| 66 |
| 49 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 67 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 50 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 68 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 51 | 69 |
| 52 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 70 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 53 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), | 71 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id)); |
| 54 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 72 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id)); |
| 55 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), | 73 |
| 56 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 57 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 74 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 58 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), | 75 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id)); |
| 59 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 76 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), GetIndicatorBounds(display_1_id)); |
| 60 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), | |
| 61 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 62 | 77 |
| 63 // Move 2nd display downwards a bit. | 78 // Move 2nd display downwards a bit. |
| 64 layout->placement_list[0].offset = 5; | 79 layout->placement_list[0].offset = 5; |
| 65 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 80 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 66 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 81 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 67 // This is same as before because the 2nd display's y is above | 82 // This is same as before because the 2nd display's y is above |
| 68 // the indicator's x. | 83 // the indicator's x. |
| 69 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 84 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 70 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), | 85 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id)); |
| 71 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 86 EXPECT_EQ(gfx::Rect(360, 5, 1, 355), GetIndicatorBounds(display_1_id)); |
| 72 EXPECT_EQ(gfx::Rect(360, 5, 1, 355), | 87 |
| 73 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 74 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 88 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 75 EXPECT_EQ(gfx::Rect(360, 21, 1, 339), | 89 EXPECT_EQ(gfx::Rect(359, 5, 1, 355), GetIndicatorBounds(display_0_id)); |
| 76 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 90 EXPECT_EQ(gfx::Rect(360, 21, 1, 339), GetIndicatorBounds(display_1_id)); |
| 77 EXPECT_EQ(gfx::Rect(359, 5, 1, 355), | |
| 78 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 79 | 91 |
| 80 // Move it down further so that the shared edge is shorter than | 92 // Move it down further so that the shared edge is shorter than |
| 81 // minimum hole size (160). | 93 // minimum hole size (160). |
| 82 layout->placement_list[0].offset = 200; | 94 layout->placement_list[0].offset = 200; |
| 83 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 95 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 84 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 96 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 85 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 97 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 86 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), | 98 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id)); |
| 87 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 99 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id)); |
| 88 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), | 100 |
| 89 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 90 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 101 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 91 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 102 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 92 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), | 103 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), GetIndicatorBounds(display_0_id)); |
| 93 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 104 EXPECT_EQ(gfx::Rect(360, 200, 1, 160), GetIndicatorBounds(display_1_id)); |
| 94 EXPECT_EQ(gfx::Rect(359, 200, 1, 160), | |
| 95 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 96 | 105 |
| 97 // Now move 2nd display upwards | 106 // Now move 2nd display upwards |
| 98 layout->placement_list[0].offset = -5; | 107 layout->placement_list[0].offset = -5; |
| 99 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 108 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 100 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 109 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 101 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 110 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 102 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), | 111 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), GetIndicatorBounds(display_0_id)); |
| 103 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 112 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), GetIndicatorBounds(display_1_id)); |
| 104 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), | |
| 105 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 106 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 113 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 107 // 16 px are reserved on 2nd display from top, so y must be | 114 // 16 px are reserved on 2nd display from top, so y must be |
| 108 // (16 - 5) = 11 | 115 // (16 - 5) = 11 |
| 109 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 116 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 110 EXPECT_EQ(gfx::Rect(360, 11, 1, 349), | 117 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), GetIndicatorBounds(display_0_id)); |
| 111 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 118 EXPECT_EQ(gfx::Rect(360, 11, 1, 349), GetIndicatorBounds(display_1_id)); |
| 112 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), | |
| 113 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 114 | 119 |
| 115 event_filter()->HideSharedEdgeIndicator(); | 120 event_filter()->HideSharedEdgeIndicator(); |
| 116 } | 121 } |
| 117 | 122 |
| 118 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) { | 123 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnLeft) { |
| 119 if (!SupportsMultipleDisplays()) | 124 if (!SupportsMultipleDisplays()) |
| 120 return; | 125 return; |
| 121 | 126 |
| 122 UpdateDisplay("360x360,700x700"); | 127 UpdateDisplay("360x360,700x700"); |
| 123 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 128 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 124 | 129 |
| 130 int64_t display_0_id = |
| 131 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id(); |
| 132 int64_t display_1_id = |
| 133 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id(); |
| 134 |
| 125 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 135 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 126 scoped_ptr<DisplayLayout> layout( | 136 scoped_ptr<DisplayLayout> layout( |
| 127 test::CreateDisplayLayout(DisplayPlacement::LEFT, 0)); | 137 test::CreateDisplayLayout(DisplayPlacement::LEFT, 0)); |
| 128 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 138 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 139 |
| 129 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 140 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 130 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 141 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 131 EXPECT_EQ(gfx::Rect(0, 16, 1, 344), | 142 EXPECT_EQ(gfx::Rect(0, 16, 1, 344), GetIndicatorBounds(display_0_id)); |
| 132 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 143 EXPECT_EQ(gfx::Rect(-1, 0, 1, 360), GetIndicatorBounds(display_1_id)); |
| 133 EXPECT_EQ(gfx::Rect(-1, 0, 1, 360), | 144 |
| 134 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 135 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 145 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 136 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 146 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 137 EXPECT_EQ(gfx::Rect(-1, 16, 1, 344), | 147 EXPECT_EQ(gfx::Rect(0, 0, 1, 360), GetIndicatorBounds(display_0_id)); |
| 138 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 148 EXPECT_EQ(gfx::Rect(-1, 16, 1, 344), GetIndicatorBounds(display_1_id)); |
| 139 EXPECT_EQ(gfx::Rect(0, 0, 1, 360), | |
| 140 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 141 | 149 |
| 142 layout->placement_list[0].offset = 250; | 150 layout->placement_list[0].offset = 250; |
| 143 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 151 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 144 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 152 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 145 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 153 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 146 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), | 154 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id)); |
| 147 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 155 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id)); |
| 148 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), | 156 |
| 149 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 150 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 157 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 151 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 158 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 152 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), | 159 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), GetIndicatorBounds(display_0_id)); |
| 153 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 160 EXPECT_EQ(gfx::Rect(-1, 250, 1, 110), GetIndicatorBounds(display_1_id)); |
| 154 EXPECT_EQ(gfx::Rect(0, 250, 1, 110), | 161 |
| 155 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 156 event_filter()->HideSharedEdgeIndicator(); | 162 event_filter()->HideSharedEdgeIndicator(); |
| 157 } | 163 } |
| 158 | 164 |
| 159 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) { | 165 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestOnTopBottom) { |
| 160 if (!SupportsMultipleDisplays()) | 166 if (!SupportsMultipleDisplays()) |
| 161 return; | 167 return; |
| 162 | 168 |
| 163 UpdateDisplay("360x360,700x700"); | 169 UpdateDisplay("360x360,700x700"); |
| 164 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 170 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 171 int64_t display_0_id = |
| 172 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[0]).id(); |
| 173 int64_t display_1_id = |
| 174 gfx::Screen::GetScreen()->GetDisplayNearestWindow(root_windows[1]).id(); |
| 165 | 175 |
| 166 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 176 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 167 scoped_ptr<DisplayLayout> layout( | 177 scoped_ptr<DisplayLayout> layout( |
| 168 test::CreateDisplayLayout(DisplayPlacement::TOP, 0)); | 178 test::CreateDisplayLayout(DisplayPlacement::TOP, 0)); |
| 169 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 179 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 170 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 180 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 171 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 181 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 172 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), | 182 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id)); |
| 173 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 183 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id)); |
| 174 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), | 184 |
| 175 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 176 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 185 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 177 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 186 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 178 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), | 187 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), GetIndicatorBounds(display_0_id)); |
| 179 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 188 EXPECT_EQ(gfx::Rect(0, -1, 360, 1), GetIndicatorBounds(display_1_id)); |
| 180 EXPECT_EQ(gfx::Rect(0, 0, 360, 1), | |
| 181 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 182 | 189 |
| 183 layout->placement_list[0].offset = 250; | 190 layout->placement_list[0].offset = 250; |
| 184 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 191 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 185 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 192 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 186 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 193 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 187 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), | 194 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id)); |
| 188 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 195 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id)); |
| 189 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), | 196 |
| 190 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 191 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 197 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 192 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 198 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 193 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), | 199 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), GetIndicatorBounds(display_0_id)); |
| 194 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 200 EXPECT_EQ(gfx::Rect(250, -1, 110, 1), GetIndicatorBounds(display_1_id)); |
| 195 EXPECT_EQ(gfx::Rect(250, 0, 110, 1), | |
| 196 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 197 | 201 |
| 198 layout->placement_list[0].position = DisplayPlacement::BOTTOM; | 202 layout->placement_list[0].position = DisplayPlacement::BOTTOM; |
| 199 layout->placement_list[0].offset = 0; | 203 layout->placement_list[0].offset = 0; |
| 200 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); | 204 display_manager->SetLayoutForCurrentDisplays(layout->Copy()); |
| 201 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); | 205 event_filter()->ShowSharedEdgeIndicator(root_windows[0] /* primary */); |
| 202 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 206 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 203 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), | 207 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id)); |
| 204 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 208 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id)); |
| 205 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), | 209 |
| 206 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 207 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); | 210 event_filter()->ShowSharedEdgeIndicator(root_windows[1] /* secondary */); |
| 208 ASSERT_EQ(1U, mouse_warp_controller()->warp_regions_.size()); | 211 ASSERT_EQ(1U, GetWarpRegionsCount()); |
| 209 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), | 212 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), GetIndicatorBounds(display_0_id)); |
| 210 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 213 EXPECT_EQ(gfx::Rect(0, 360, 360, 1), GetIndicatorBounds(display_1_id)); |
| 211 EXPECT_EQ(gfx::Rect(0, 359, 360, 1), | |
| 212 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | |
| 213 | 214 |
| 214 event_filter()->HideSharedEdgeIndicator(); | 215 event_filter()->HideSharedEdgeIndicator(); |
| 215 } | 216 } |
| 216 | 217 |
| 217 // Verify indicators show up as expected with 3+ displays. | 218 // Verify indicators show up as expected with 3+ displays. |
| 218 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) { | 219 TEST_F(ExtendedMouseWarpControllerTest, IndicatorBoundsTestThreeDisplays) { |
| 219 if (!SupportsMultipleDisplays()) | 220 if (!SupportsMultipleDisplays()) |
| 220 return; | 221 return; |
| 221 | 222 |
| 222 auto run_test = [this] { | 223 UpdateDisplay("360x360,700x700,1000x1000"); |
| 223 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 224 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 225 gfx::Screen* screen = gfx::Screen::GetScreen(); |
| 226 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id(); |
| 227 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id(); |
| 228 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id(); |
| 224 | 229 |
| 225 // Left most display | 230 // Drag from left most display |
| 226 event_filter()->ShowSharedEdgeIndicator(root_windows[0]); | 231 event_filter()->ShowSharedEdgeIndicator(root_windows[0]); |
| 227 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); | 232 ASSERT_EQ(2U, GetWarpRegionsCount()); |
| 228 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), | 233 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0); |
| 229 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 234 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1); |
| 230 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), | 235 EXPECT_EQ(gfx::Rect(359, 16, 1, 344), |
| 231 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | 236 region_1->GetIndicatorBoundsForTest(display_0_id)); |
| 232 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684), | 237 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), |
| 233 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); | 238 region_1->GetIndicatorBoundsForTest(display_1_id)); |
| 234 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), | 239 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), |
| 235 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); | 240 region_0->GetIndicatorBoundsForTest(display_1_id)); |
| 241 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700), |
| 242 region_0->GetIndicatorBoundsForTest(display_2_id)); |
| 236 | 243 |
| 237 // Middle display | 244 // Drag from middle display |
| 238 event_filter()->ShowSharedEdgeIndicator(root_windows[1]); | 245 event_filter()->ShowSharedEdgeIndicator(root_windows[1]); |
| 239 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); | 246 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); |
| 240 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), | 247 region_0 = GetWarpRegion(0); |
| 241 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 248 region_1 = GetWarpRegion(1); |
| 242 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), | 249 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), |
| 243 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | 250 region_1->GetIndicatorBoundsForTest(display_0_id)); |
| 244 EXPECT_EQ(gfx::Rect(1059, 16, 1, 684), | 251 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), |
| 245 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); | 252 region_1->GetIndicatorBoundsForTest(display_1_id)); |
| 246 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700), | 253 EXPECT_EQ(gfx::Rect(1059, 16, 1, 684), |
| 247 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); | 254 region_0->GetIndicatorBoundsForTest(display_1_id)); |
| 255 EXPECT_EQ(gfx::Rect(1060, 0, 1, 700), |
| 256 region_0->GetIndicatorBoundsForTest(display_2_id)); |
| 248 | 257 |
| 249 // Right most display | 258 // Right most display |
| 250 event_filter()->ShowSharedEdgeIndicator(root_windows[2]); | 259 event_filter()->ShowSharedEdgeIndicator(root_windows[2]); |
| 251 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); | 260 ASSERT_EQ(2U, mouse_warp_controller()->warp_regions_.size()); |
| 252 EXPECT_EQ(gfx::Rect(360, 16, 1, 344), | 261 region_0 = GetWarpRegion(0); |
| 253 mouse_warp_controller()->warp_regions_[0]->a_indicator_bounds()); | 262 region_1 = GetWarpRegion(1); |
| 254 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), | 263 EXPECT_EQ(gfx::Rect(359, 0, 1, 360), |
| 255 mouse_warp_controller()->warp_regions_[0]->b_indicator_bounds()); | 264 region_1->GetIndicatorBoundsForTest(display_0_id)); |
| 256 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684), | 265 EXPECT_EQ(gfx::Rect(360, 0, 1, 360), |
| 257 mouse_warp_controller()->warp_regions_[1]->a_indicator_bounds()); | 266 region_1->GetIndicatorBoundsForTest(display_1_id)); |
| 258 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), | 267 EXPECT_EQ(gfx::Rect(1059, 0, 1, 700), |
| 259 mouse_warp_controller()->warp_regions_[1]->b_indicator_bounds()); | 268 region_0->GetIndicatorBoundsForTest(display_1_id)); |
| 269 EXPECT_EQ(gfx::Rect(1060, 16, 1, 684), |
| 270 region_0->GetIndicatorBoundsForTest(display_2_id)); |
| 271 event_filter()->HideSharedEdgeIndicator(); |
| 272 // TODO(oshima): Add test cases primary swap. |
| 273 } |
| 260 | 274 |
| 261 event_filter()->HideSharedEdgeIndicator(); | 275 TEST_F(ExtendedMouseWarpControllerTest, |
| 262 }; | 276 IndicatorBoundsTestThreeDisplaysWithLayout) { |
| 277 if (!SupportsMultipleDisplays()) |
| 278 return; |
| 279 UpdateDisplay("700x500,500x500,1000x1000"); |
| 280 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 281 gfx::Screen* screen = gfx::Screen::GetScreen(); |
| 282 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id(); |
| 283 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id(); |
| 284 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id(); |
| 263 | 285 |
| 264 UpdateDisplay("360x360,700x700,1000x1000"); | 286 // Layout so that all displays touches togter like this: |
| 265 run_test(); | 287 // +-----+---+ |
| 288 // | 0 | 1 | |
| 289 // +-+---+--++ |
| 290 // | 2 | |
| 291 // +------+ |
| 292 ash::DisplayLayoutBuilder builder(display_0_id); |
| 293 builder.AddDisplayPlacement(display_1_id, display_0_id, |
| 294 ash::DisplayPlacement::RIGHT, 0); |
| 295 builder.AddDisplayPlacement(display_2_id, display_0_id, |
| 296 ash::DisplayPlacement::BOTTOM, 100); |
| 266 | 297 |
| 267 // TODO(oshima): Add test cases with layouts, primary swap. | 298 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 299 display_manager->SetLayoutForCurrentDisplays(builder.Build()); |
| 300 ASSERT_EQ(3U, GetWarpRegionsCount()); |
| 301 |
| 302 // Drag from 0. |
| 303 event_filter()->ShowSharedEdgeIndicator(root_windows[0]); |
| 304 ASSERT_EQ(3U, GetWarpRegionsCount()); |
| 305 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0); |
| 306 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1); |
| 307 const ExtendedMouseWarpController::WarpRegion* region_2 = GetWarpRegion(2); |
| 308 // between 2 and 0 |
| 309 EXPECT_EQ(gfx::Rect(100, 499, 600, 1), |
| 310 region_0->GetIndicatorBoundsForTest(display_0_id)); |
| 311 EXPECT_EQ(gfx::Rect(100, 500, 600, 1), |
| 312 region_0->GetIndicatorBoundsForTest(display_2_id)); |
| 313 // between 2 and 1 |
| 314 EXPECT_EQ(gfx::Rect(700, 499, 400, 1), |
| 315 region_1->GetIndicatorBoundsForTest(display_1_id)); |
| 316 EXPECT_EQ(gfx::Rect(700, 500, 400, 1), |
| 317 region_1->GetIndicatorBoundsForTest(display_2_id)); |
| 318 // between 1 and 0 |
| 319 EXPECT_EQ(gfx::Rect(699, 16, 1, 484), |
| 320 region_2->GetIndicatorBoundsForTest(display_0_id)); |
| 321 EXPECT_EQ(gfx::Rect(700, 0, 1, 500), |
| 322 region_2->GetIndicatorBoundsForTest(display_1_id)); |
| 323 event_filter()->HideSharedEdgeIndicator(); |
| 324 } |
| 325 |
| 326 TEST_F(ExtendedMouseWarpControllerTest, |
| 327 IndicatorBoundsTestThreeDisplaysWithLayout2) { |
| 328 if (!SupportsMultipleDisplays()) |
| 329 return; |
| 330 UpdateDisplay("700x500,500x500,1000x1000"); |
| 331 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 332 gfx::Screen* screen = gfx::Screen::GetScreen(); |
| 333 int64_t display_0_id = screen->GetDisplayNearestWindow(root_windows[0]).id(); |
| 334 int64_t display_1_id = screen->GetDisplayNearestWindow(root_windows[1]).id(); |
| 335 int64_t display_2_id = screen->GetDisplayNearestWindow(root_windows[2]).id(); |
| 336 |
| 337 // Layout so that 0 and 1 displays are disconnected. |
| 338 // +-----+ +---+ |
| 339 // | 0 | |1 | |
| 340 // +-+---+-+++ |
| 341 // | 2 | |
| 342 // +------+ |
| 343 ash::DisplayLayoutBuilder builder(display_0_id); |
| 344 builder.AddDisplayPlacement(display_2_id, display_0_id, |
| 345 ash::DisplayPlacement::BOTTOM, 100); |
| 346 builder.AddDisplayPlacement(display_1_id, display_2_id, |
| 347 ash::DisplayPlacement::TOP, 800); |
| 348 |
| 349 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 350 display_manager->SetLayoutForCurrentDisplays(builder.Build()); |
| 351 ASSERT_EQ(2U, GetWarpRegionsCount()); |
| 352 |
| 353 // Drag from 0. |
| 354 event_filter()->ShowSharedEdgeIndicator(root_windows[0]); |
| 355 ASSERT_EQ(2U, GetWarpRegionsCount()); |
| 356 const ExtendedMouseWarpController::WarpRegion* region_0 = GetWarpRegion(0); |
| 357 const ExtendedMouseWarpController::WarpRegion* region_1 = GetWarpRegion(1); |
| 358 // between 2 and 0 |
| 359 EXPECT_EQ(gfx::Rect(100, 499, 600, 1), |
| 360 region_0->GetIndicatorBoundsForTest(display_0_id)); |
| 361 EXPECT_EQ(gfx::Rect(100, 500, 600, 1), |
| 362 region_0->GetIndicatorBoundsForTest(display_2_id)); |
| 363 // between 2 and 1 |
| 364 EXPECT_EQ(gfx::Rect(900, 499, 200, 1), |
| 365 region_1->GetIndicatorBoundsForTest(display_1_id)); |
| 366 EXPECT_EQ(gfx::Rect(900, 500, 200, 1), |
| 367 region_1->GetIndicatorBoundsForTest(display_2_id)); |
| 368 event_filter()->HideSharedEdgeIndicator(); |
| 268 } | 369 } |
| 269 | 370 |
| 270 } // namespace ash | 371 } // namespace ash |
| OLD | NEW |