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/drag_window_resizer.h" | 5 #include "ash/wm/drag_window_resizer.h" |
6 | 6 |
7 #include "ash/display/mouse_cursor_event_filter.h" | 7 #include "ash/display/mouse_cursor_event_filter.h" |
8 #include "ash/root_window_controller.h" | 8 #include "ash/root_window_controller.h" |
9 #include "ash/shelf/shelf_layout_manager.h" | 9 #include "ash/shelf/shelf_layout_manager.h" |
10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 scoped_ptr<aura::Window> panel_window_; | 128 scoped_ptr<aura::Window> panel_window_; |
129 aura::Window* transient_child_; | 129 aura::Window* transient_child_; |
130 scoped_ptr<aura::Window> transient_parent_; | 130 scoped_ptr<aura::Window> transient_parent_; |
131 | 131 |
132 private: | 132 private: |
133 DISALLOW_COPY_AND_ASSIGN(DragWindowResizerTest); | 133 DISALLOW_COPY_AND_ASSIGN(DragWindowResizerTest); |
134 }; | 134 }; |
135 | 135 |
136 // Verifies a window can be moved from the primary display to another. | 136 // Verifies a window can be moved from the primary display to another. |
137 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) { | 137 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) { |
| 138 if (!SupportsMultipleDisplays()) |
| 139 return; |
| 140 |
138 // The secondary display is logically on the right, but on the system (e.g. X) | 141 // The secondary display is logically on the right, but on the system (e.g. X) |
139 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 142 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
140 UpdateDisplay("800x600,800x600"); | 143 UpdateDisplay("800x600,800x600"); |
141 shelf_layout_manager()->LayoutShelf(); | 144 shelf_layout_manager()->LayoutShelf(); |
142 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 145 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
143 ASSERT_EQ(2U, root_windows.size()); | 146 ASSERT_EQ(2U, root_windows.size()); |
144 | 147 |
145 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 148 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
146 Shell::GetScreen()->GetPrimaryDisplay()); | 149 Shell::GetScreen()->GetPrimaryDisplay()); |
147 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 150 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
190 // Since the pointer is on the secondary, the parent should be changed | 193 // Since the pointer is on the secondary, the parent should be changed |
191 // even though only small fraction of the window is within the secondary | 194 // even though only small fraction of the window is within the secondary |
192 // root window's bounds. | 195 // root window's bounds. |
193 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); | 196 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); |
194 EXPECT_EQ("-49,10 50x60", window_->bounds().ToString()); | 197 EXPECT_EQ("-49,10 50x60", window_->bounds().ToString()); |
195 } | 198 } |
196 } | 199 } |
197 | 200 |
198 // Verifies a window can be moved from the secondary display to primary. | 201 // Verifies a window can be moved from the secondary display to primary. |
199 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysRightToLeft) { | 202 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysRightToLeft) { |
| 203 if (!SupportsMultipleDisplays()) |
| 204 return; |
| 205 |
200 UpdateDisplay("800x600,800x600"); | 206 UpdateDisplay("800x600,800x600"); |
201 shelf_layout_manager()->LayoutShelf(); | 207 shelf_layout_manager()->LayoutShelf(); |
202 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 208 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
203 ASSERT_EQ(2U, root_windows.size()); | 209 ASSERT_EQ(2U, root_windows.size()); |
204 | 210 |
205 window_->SetBoundsInScreen( | 211 window_->SetBoundsInScreen( |
206 gfx::Rect(800, 00, 50, 60), | 212 gfx::Rect(800, 00, 50, 60), |
207 Shell::GetScreen()->GetDisplayNearestWindow(root_windows[1])); | 213 Shell::GetScreen()->GetDisplayNearestWindow(root_windows[1])); |
208 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); | 214 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); |
209 { | 215 { |
210 // Grab (0, 0) of the window. | 216 // Grab (0, 0) of the window. |
211 scoped_ptr<DragWindowResizer> resizer(CreateDragWindowResizer( | 217 scoped_ptr<DragWindowResizer> resizer(CreateDragWindowResizer( |
212 window_.get(), gfx::Point(), HTCAPTION)); | 218 window_.get(), gfx::Point(), HTCAPTION)); |
213 ASSERT_TRUE(resizer.get()); | 219 ASSERT_TRUE(resizer.get()); |
214 // Move the mouse near the right edge, (798, 0), of the primary display. | 220 // Move the mouse near the right edge, (798, 0), of the primary display. |
215 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN); | 221 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN); |
216 resizer->CompleteDrag(0); | 222 resizer->CompleteDrag(0); |
217 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 223 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
218 EXPECT_EQ("798,0 50x60", window_->bounds().ToString()); | 224 EXPECT_EQ("798,0 50x60", window_->bounds().ToString()); |
219 } | 225 } |
220 } | 226 } |
221 | 227 |
222 // Verifies the drag window is shown correctly. | 228 // Verifies the drag window is shown correctly. |
223 TEST_F(DragWindowResizerTest, DragWindowController) { | 229 TEST_F(DragWindowResizerTest, DragWindowController) { |
| 230 if (!SupportsMultipleDisplays()) |
| 231 return; |
| 232 |
224 UpdateDisplay("800x600,800x600"); | 233 UpdateDisplay("800x600,800x600"); |
225 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 234 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
226 ASSERT_EQ(2U, root_windows.size()); | 235 ASSERT_EQ(2U, root_windows.size()); |
227 | 236 |
228 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 237 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
229 Shell::GetScreen()->GetPrimaryDisplay()); | 238 Shell::GetScreen()->GetPrimaryDisplay()); |
230 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 239 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
231 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); | 240 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); |
232 { | 241 { |
233 scoped_ptr<DragWindowResizer> resizer(CreateDragWindowResizer( | 242 scoped_ptr<DragWindowResizer> resizer(CreateDragWindowResizer( |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
341 event_filter->mouse_warp_mode_); | 350 event_filter->mouse_warp_mode_); |
342 resizer->RevertDrag(); | 351 resizer->RevertDrag(); |
343 } | 352 } |
344 EXPECT_EQ(MouseCursorEventFilter::WARP_ALWAYS, | 353 EXPECT_EQ(MouseCursorEventFilter::WARP_ALWAYS, |
345 event_filter->mouse_warp_mode_); | 354 event_filter->mouse_warp_mode_); |
346 } | 355 } |
347 | 356 |
348 // Verifies cursor's device scale factor is updated whe a window is moved across | 357 // Verifies cursor's device scale factor is updated whe a window is moved across |
349 // root windows with different device scale factors (http://crbug.com/154183). | 358 // root windows with different device scale factors (http://crbug.com/154183). |
350 TEST_F(DragWindowResizerTest, CursorDeviceScaleFactor) { | 359 TEST_F(DragWindowResizerTest, CursorDeviceScaleFactor) { |
| 360 if (!SupportsMultipleDisplays()) |
| 361 return; |
| 362 |
351 // The secondary display is logically on the right, but on the system (e.g. X) | 363 // The secondary display is logically on the right, but on the system (e.g. X) |
352 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 364 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
353 UpdateDisplay("400x400,800x800*2"); | 365 UpdateDisplay("400x400,800x800*2"); |
354 shelf_layout_manager()->LayoutShelf(); | 366 shelf_layout_manager()->LayoutShelf(); |
355 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 367 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
356 ASSERT_EQ(2U, root_windows.size()); | 368 ASSERT_EQ(2U, root_windows.size()); |
357 | 369 |
358 test::CursorManagerTestApi cursor_test_api( | 370 test::CursorManagerTestApi cursor_test_api( |
359 Shell::GetInstance()->cursor_manager()); | 371 Shell::GetInstance()->cursor_manager()); |
360 MouseCursorEventFilter* event_filter = | 372 MouseCursorEventFilter* event_filter = |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
394 event_filter->WarpMouseCursorIfNecessary(root_windows[1], | 406 event_filter->WarpMouseCursorIfNecessary(root_windows[1], |
395 gfx::Point(400, 200)); | 407 gfx::Point(400, 200)); |
396 EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor()); | 408 EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor()); |
397 resizer->CompleteDrag(0); | 409 resizer->CompleteDrag(0); |
398 EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor()); | 410 EXPECT_EQ(1.0f, cursor_test_api.GetDisplay().device_scale_factor()); |
399 } | 411 } |
400 } | 412 } |
401 | 413 |
402 // Verifies several kinds of windows can be moved across displays. | 414 // Verifies several kinds of windows can be moved across displays. |
403 TEST_F(DragWindowResizerTest, MoveWindowAcrossDisplays) { | 415 TEST_F(DragWindowResizerTest, MoveWindowAcrossDisplays) { |
| 416 if (!SupportsMultipleDisplays()) |
| 417 return; |
| 418 |
404 // The secondary display is logically on the right, but on the system (e.g. X) | 419 // The secondary display is logically on the right, but on the system (e.g. X) |
405 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 420 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
406 UpdateDisplay("400x400,400x400"); | 421 UpdateDisplay("400x400,400x400"); |
407 shelf_layout_manager()->LayoutShelf(); | 422 shelf_layout_manager()->LayoutShelf(); |
408 | 423 |
409 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 424 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
410 ASSERT_EQ(2U, root_windows.size()); | 425 ASSERT_EQ(2U, root_windows.size()); |
411 MouseCursorEventFilter* event_filter = | 426 MouseCursorEventFilter* event_filter = |
412 Shell::GetInstance()->mouse_cursor_filter(); | 427 Shell::GetInstance()->mouse_cursor_filter(); |
413 | 428 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 ASSERT_TRUE(resizer.get()); | 513 ASSERT_TRUE(resizer.get()); |
499 resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); | 514 resizer->Drag(CalculateDragPoint(*resizer, 399, 200), 0); |
500 EXPECT_TRUE(event_filter->WarpMouseCursorIfNecessary(root_windows[0], | 515 EXPECT_TRUE(event_filter->WarpMouseCursorIfNecessary(root_windows[0], |
501 gfx::Point(399, 200))); | 516 gfx::Point(399, 200))); |
502 resizer->CompleteDrag(0); | 517 resizer->CompleteDrag(0); |
503 } | 518 } |
504 } | 519 } |
505 | 520 |
506 } // namespace internal | 521 } // namespace internal |
507 } // namespace ash | 522 } // namespace ash |
OLD | NEW |