| 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 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 aura::Window* window, | 120 aura::Window* window, |
| 121 const gfx::Point& point_in_parent, | 121 const gfx::Point& point_in_parent, |
| 122 int window_component) { | 122 int window_component) { |
| 123 return CreateWindowResizer( | 123 return CreateWindowResizer( |
| 124 window, | 124 window, |
| 125 point_in_parent, | 125 point_in_parent, |
| 126 window_component, | 126 window_component, |
| 127 aura::client::WINDOW_MOVE_SOURCE_MOUSE).release(); | 127 aura::client::WINDOW_MOVE_SOURCE_MOUSE).release(); |
| 128 } | 128 } |
| 129 | 129 |
| 130 bool WarpMouseCursorIfNecessary(aura::RootWindow* target_root, | 130 bool WarpMouseCursorIfNecessary(aura::Window* target_root, |
| 131 const gfx::Point& point_in_screen) { | 131 const gfx::Point& point_in_screen) { |
| 132 MouseCursorEventFilter* event_filter = | 132 MouseCursorEventFilter* event_filter = |
| 133 Shell::GetInstance()->mouse_cursor_filter(); | 133 Shell::GetInstance()->mouse_cursor_filter(); |
| 134 bool is_warped = event_filter->WarpMouseCursorIfNecessary(target_root, | 134 bool is_warped = event_filter->WarpMouseCursorIfNecessary(target_root, |
| 135 point_in_screen); | 135 point_in_screen); |
| 136 event_filter->reset_was_mouse_warped_for_test(); | 136 event_filter->reset_was_mouse_warped_for_test(); |
| 137 return is_warped; | 137 return is_warped; |
| 138 } | 138 } |
| 139 | 139 |
| 140 aura::test::TestWindowDelegate delegate_; | 140 aura::test::TestWindowDelegate delegate_; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 156 }; | 156 }; |
| 157 | 157 |
| 158 // Verifies a window can be moved from the primary display to another. | 158 // Verifies a window can be moved from the primary display to another. |
| 159 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) { | 159 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplays) { |
| 160 if (!SupportsMultipleDisplays()) | 160 if (!SupportsMultipleDisplays()) |
| 161 return; | 161 return; |
| 162 | 162 |
| 163 // The secondary display is logically on the right, but on the system (e.g. X) | 163 // The secondary display is logically on the right, but on the system (e.g. X) |
| 164 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 164 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
| 165 UpdateDisplay("800x600,800x600"); | 165 UpdateDisplay("800x600,800x600"); |
| 166 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 166 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 167 ASSERT_EQ(2U, root_windows.size()); | 167 ASSERT_EQ(2U, root_windows.size()); |
| 168 | 168 |
| 169 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 169 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
| 170 Shell::GetScreen()->GetPrimaryDisplay()); | 170 Shell::GetScreen()->GetPrimaryDisplay()); |
| 171 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 171 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
| 172 { | 172 { |
| 173 // Grab (0, 0) of the window. | 173 // Grab (0, 0) of the window. |
| 174 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( | 174 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( |
| 175 window_.get(), gfx::Point(), HTCAPTION)); | 175 window_.get(), gfx::Point(), HTCAPTION)); |
| 176 ASSERT_TRUE(resizer.get()); | 176 ASSERT_TRUE(resizer.get()); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 227 | 227 |
| 228 // Verifies that dragging the active window to another display makes the new | 228 // Verifies that dragging the active window to another display makes the new |
| 229 // root window the active root window. | 229 // root window the active root window. |
| 230 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysActiveRoot) { | 230 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysActiveRoot) { |
| 231 if (!SupportsMultipleDisplays()) | 231 if (!SupportsMultipleDisplays()) |
| 232 return; | 232 return; |
| 233 | 233 |
| 234 // The secondary display is logically on the right, but on the system (e.g. X) | 234 // The secondary display is logically on the right, but on the system (e.g. X) |
| 235 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 235 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
| 236 UpdateDisplay("800x600,800x600"); | 236 UpdateDisplay("800x600,800x600"); |
| 237 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 237 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 238 ASSERT_EQ(2U, root_windows.size()); | 238 ASSERT_EQ(2U, root_windows.size()); |
| 239 | 239 |
| 240 aura::test::TestWindowDelegate delegate; | 240 aura::test::TestWindowDelegate delegate; |
| 241 scoped_ptr<aura::Window> window(new aura::Window(&delegate)); | 241 scoped_ptr<aura::Window> window(new aura::Window(&delegate)); |
| 242 window->SetType(aura::client::WINDOW_TYPE_NORMAL); | 242 window->SetType(aura::client::WINDOW_TYPE_NORMAL); |
| 243 window->Init(ui::LAYER_TEXTURED); | 243 window->Init(ui::LAYER_TEXTURED); |
| 244 ParentWindowInPrimaryRootWindow(window.get()); | 244 ParentWindowInPrimaryRootWindow(window.get()); |
| 245 window->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 245 window->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
| 246 Shell::GetScreen()->GetPrimaryDisplay()); | 246 Shell::GetScreen()->GetPrimaryDisplay()); |
| 247 window->Show(); | 247 window->Show(); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 264 EXPECT_EQ(root_windows[1], ash::Shell::GetTargetRootWindow()); | 264 EXPECT_EQ(root_windows[1], ash::Shell::GetTargetRootWindow()); |
| 265 } | 265 } |
| 266 } | 266 } |
| 267 | 267 |
| 268 // Verifies a window can be moved from the secondary display to primary. | 268 // Verifies a window can be moved from the secondary display to primary. |
| 269 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysRightToLeft) { | 269 TEST_F(DragWindowResizerTest, WindowDragWithMultiDisplaysRightToLeft) { |
| 270 if (!SupportsMultipleDisplays()) | 270 if (!SupportsMultipleDisplays()) |
| 271 return; | 271 return; |
| 272 | 272 |
| 273 UpdateDisplay("800x600,800x600"); | 273 UpdateDisplay("800x600,800x600"); |
| 274 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 274 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 275 ASSERT_EQ(2U, root_windows.size()); | 275 ASSERT_EQ(2U, root_windows.size()); |
| 276 | 276 |
| 277 window_->SetBoundsInScreen( | 277 window_->SetBoundsInScreen( |
| 278 gfx::Rect(800, 00, 50, 60), | 278 gfx::Rect(800, 00, 50, 60), |
| 279 Shell::GetScreen()->GetDisplayNearestWindow(root_windows[1])); | 279 Shell::GetScreen()->GetDisplayNearestWindow(root_windows[1])); |
| 280 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); | 280 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); |
| 281 { | 281 { |
| 282 // Grab (0, 0) of the window. | 282 // Grab (0, 0) of the window. |
| 283 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( | 283 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( |
| 284 window_.get(), gfx::Point(), HTCAPTION)); | 284 window_.get(), gfx::Point(), HTCAPTION)); |
| 285 ASSERT_TRUE(resizer.get()); | 285 ASSERT_TRUE(resizer.get()); |
| 286 // Move the mouse near the right edge, (798, 0), of the primary display. | 286 // Move the mouse near the right edge, (798, 0), of the primary display. |
| 287 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN); | 287 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN); |
| 288 resizer->CompleteDrag(0); | 288 resizer->CompleteDrag(0); |
| 289 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 289 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
| 290 // Window origin should be adjusted for minimum visibility (10px). | 290 // Window origin should be adjusted for minimum visibility (10px). |
| 291 int expected_x = 800 - 10; | 291 int expected_x = 800 - 10; |
| 292 EXPECT_EQ(base::IntToString(expected_x) + ",0 50x60", | 292 EXPECT_EQ(base::IntToString(expected_x) + ",0 50x60", |
| 293 window_->bounds().ToString()); | 293 window_->bounds().ToString()); |
| 294 } | 294 } |
| 295 } | 295 } |
| 296 | 296 |
| 297 // Verifies the drag window is shown correctly. | 297 // Verifies the drag window is shown correctly. |
| 298 TEST_F(DragWindowResizerTest, DragWindowController) { | 298 TEST_F(DragWindowResizerTest, DragWindowController) { |
| 299 if (!SupportsMultipleDisplays()) | 299 if (!SupportsMultipleDisplays()) |
| 300 return; | 300 return; |
| 301 | 301 |
| 302 UpdateDisplay("800x600,800x600"); | 302 UpdateDisplay("800x600,800x600"); |
| 303 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 303 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 304 ASSERT_EQ(2U, root_windows.size()); | 304 ASSERT_EQ(2U, root_windows.size()); |
| 305 | 305 |
| 306 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 306 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
| 307 Shell::GetScreen()->GetPrimaryDisplay()); | 307 Shell::GetScreen()->GetPrimaryDisplay()); |
| 308 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 308 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
| 309 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); | 309 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); |
| 310 { | 310 { |
| 311 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( | 311 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( |
| 312 window_.get(), gfx::Point(), HTCAPTION)); | 312 window_.get(), gfx::Point(), HTCAPTION)); |
| 313 ASSERT_TRUE(resizer.get()); | 313 ASSERT_TRUE(resizer.get()); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 429 | 429 |
| 430 // Verifies cursor's device scale factor is updated whe a window is moved across | 430 // Verifies cursor's device scale factor is updated whe a window is moved across |
| 431 // root windows with different device scale factors (http://crbug.com/154183). | 431 // root windows with different device scale factors (http://crbug.com/154183). |
| 432 TEST_F(DragWindowResizerTest, CursorDeviceScaleFactor) { | 432 TEST_F(DragWindowResizerTest, CursorDeviceScaleFactor) { |
| 433 if (!SupportsMultipleDisplays()) | 433 if (!SupportsMultipleDisplays()) |
| 434 return; | 434 return; |
| 435 | 435 |
| 436 // The secondary display is logically on the right, but on the system (e.g. X) | 436 // The secondary display is logically on the right, but on the system (e.g. X) |
| 437 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 437 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
| 438 UpdateDisplay("400x400,800x800*2"); | 438 UpdateDisplay("400x400,800x800*2"); |
| 439 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 439 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 440 ASSERT_EQ(2U, root_windows.size()); | 440 ASSERT_EQ(2U, root_windows.size()); |
| 441 | 441 |
| 442 test::CursorManagerTestApi cursor_test_api( | 442 test::CursorManagerTestApi cursor_test_api( |
| 443 Shell::GetInstance()->cursor_manager()); | 443 Shell::GetInstance()->cursor_manager()); |
| 444 // Move window from the root window with 1.0 device scale factor to the root | 444 // Move window from the root window with 1.0 device scale factor to the root |
| 445 // window with 2.0 device scale factor. | 445 // window with 2.0 device scale factor. |
| 446 { | 446 { |
| 447 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 447 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
| 448 Shell::GetScreen()->GetPrimaryDisplay()); | 448 Shell::GetScreen()->GetPrimaryDisplay()); |
| 449 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); | 449 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 481 | 481 |
| 482 // Verifies several kinds of windows can be moved across displays. | 482 // Verifies several kinds of windows can be moved across displays. |
| 483 TEST_F(DragWindowResizerTest, MoveWindowAcrossDisplays) { | 483 TEST_F(DragWindowResizerTest, MoveWindowAcrossDisplays) { |
| 484 if (!SupportsMultipleDisplays()) | 484 if (!SupportsMultipleDisplays()) |
| 485 return; | 485 return; |
| 486 | 486 |
| 487 // The secondary display is logically on the right, but on the system (e.g. X) | 487 // The secondary display is logically on the right, but on the system (e.g. X) |
| 488 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. | 488 // layer, it's below the primary one. See UpdateDisplay() in ash_test_base.cc. |
| 489 UpdateDisplay("400x400,400x400"); | 489 UpdateDisplay("400x400,400x400"); |
| 490 | 490 |
| 491 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 491 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 492 ASSERT_EQ(2U, root_windows.size()); | 492 ASSERT_EQ(2U, root_windows.size()); |
| 493 | 493 |
| 494 // Normal window can be moved across display. | 494 // Normal window can be moved across display. |
| 495 { | 495 { |
| 496 aura::Window* window = window_.get(); | 496 aura::Window* window = window_.get(); |
| 497 window->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), | 497 window->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), |
| 498 Shell::GetScreen()->GetPrimaryDisplay()); | 498 Shell::GetScreen()->GetPrimaryDisplay()); |
| 499 // Grab (0, 0) of the window. | 499 // Grab (0, 0) of the window. |
| 500 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( | 500 scoped_ptr<WindowResizer> resizer(CreateDragWindowResizer( |
| 501 window, gfx::Point(), HTCAPTION)); | 501 window, gfx::Point(), HTCAPTION)); |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 665 resizer->CompleteDrag(0); | 665 resizer->CompleteDrag(0); |
| 666 EXPECT_EQ(1, session_delegate->num_transfer_to_desktop_of_user_calls()); | 666 EXPECT_EQ(1, session_delegate->num_transfer_to_desktop_of_user_calls()); |
| 667 EXPECT_NE(initial_bounds.ToString(), window->bounds().ToString()); | 667 EXPECT_NE(initial_bounds.ToString(), window->bounds().ToString()); |
| 668 } | 668 } |
| 669 } | 669 } |
| 670 #endif | 670 #endif |
| 671 | 671 |
| 672 | 672 |
| 673 } // namespace internal | 673 } // namespace internal |
| 674 } // namespace ash | 674 } // namespace ash |
| OLD | NEW |