Index: ash/display/mouse_cursor_event_filter_unittest.cc |
diff --git a/ash/display/mouse_cursor_event_filter_unittest.cc b/ash/display/mouse_cursor_event_filter_unittest.cc |
index 2552aa58816ba4dc61187e1c85a82d8f08f57a27..bb2c76521f54c191ce858a3aa3e35b0f9171f8ce 100644 |
--- a/ash/display/mouse_cursor_event_filter_unittest.cc |
+++ b/ash/display/mouse_cursor_event_filter_unittest.cc |
@@ -134,6 +134,54 @@ |
aura::Env::GetInstance()->last_mouse_location().ToString()); |
} |
+#if defined(USE_OZONE) |
+// Verifies if the mouse pointer correctly moves between displays with |
+// different scale factors. |
+TEST_F(MouseCursorEventFilterTest, WarpMouseDifferentScaleDisplays) { |
+ if (!SupportsMultipleDisplays()) |
+ return; |
+ |
+ UpdateDisplay("500x500,600x600*2"); |
+ |
+ ASSERT_EQ( |
+ DisplayLayout::RIGHT, |
+ Shell::GetInstance()->display_manager()-> |
+ GetCurrentDisplayLayout().position); |
+ |
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
+ aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(900, 123)); |
+ |
+ // This emulates the dragging to the 2nd display, which has |
+ // higher scale factor, by having 2nd display's root as target |
+ // but have the edge of 1st display. |
+ EXPECT_TRUE(WarpMouseCursorIfNecessaryWithDragRoot( |
+ root_windows[1], root_windows[1], gfx::Point(498, 123))); |
+ EXPECT_EQ("502,123", |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+ |
+ // Touch the edge of 2nd display again and make sure it warps to |
+ // 1st dislay. |
+ EXPECT_TRUE(WarpMouseCursorIfNecessaryWithDragRoot( |
+ root_windows[1], root_windows[1], gfx::Point(500, 123))); |
+ EXPECT_EQ("496,123", |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+ |
+ // Draging back from 1x to 2x. |
+ EXPECT_TRUE(WarpMouseCursorIfNecessaryWithDragRoot( |
+ root_windows[1], root_windows[0], gfx::Point(500, 123))); |
+ EXPECT_EQ("496,123", |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+ |
+ UpdateDisplay("500x500*2,600x600"); |
+ // Draging back from 1x to 2x. |
+ EXPECT_TRUE(WarpMouseCursorIfNecessaryWithDragRoot( |
+ root_windows[0], root_windows[1], gfx::Point(250, 123))); |
+ EXPECT_EQ("246,123", |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+} |
+#endif |
+ |
+#if !defined(USE_OZONE) |
// Verifies if the mouse pointer correctly moves between displays with |
// different scale factors. In native coords mode, there is no |
// difference between drag and move. |
@@ -166,6 +214,37 @@ |
EXPECT_EQ("498,123", |
aura::Env::GetInstance()->last_mouse_location().ToString()); |
} |
+#endif |
+ |
+#if defined(USE_OZONE) |
+TEST_F(MouseCursorEventFilterTest, DoNotWarpTwice) { |
+ if (!SupportsMultipleDisplays()) |
+ return; |
+ |
+ UpdateDisplay("500x500,600x600"); |
+ |
+ aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
+ aura::Env::GetInstance()->set_last_mouse_location(gfx::Point(623, 123)); |
+ |
+ // Touch the right edge of the primary root window. Pointer should warp. |
+ EXPECT_TRUE(event_filter()->WarpMouseCursorIfNecessaryForTest( |
+ root_windows[0], gfx::Point(499, 11))); |
+ EXPECT_EQ("501,11", // by 2px. |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+ |
+ // Touch the left edge of the secondary root window immediately. This should |
+ // be ignored. |
+ EXPECT_FALSE(event_filter()->WarpMouseCursorIfNecessaryForTest( |
+ root_windows[1], gfx::Point(500, 11))); |
+ |
+ // Touch the left edge of the secondary root window again, pointer should |
+ // warp for this time. |
+ EXPECT_TRUE(event_filter()->WarpMouseCursorIfNecessaryForTest( |
+ root_windows[1], gfx::Point(500, 11))); |
+ EXPECT_EQ("498,11", // by 2px. |
+ aura::Env::GetInstance()->last_mouse_location().ToString()); |
+} |
+#endif |
// Verifies if MouseCursorEventFilter::set_mouse_warp_mode() works as expected. |
TEST_F(MouseCursorEventFilterTest, SetMouseWarpModeFlag) { |