| 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/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/display/display_info.h" | 8 #include "ash/display/display_info.h" |
| 9 #include "ash/display/display_layout_store.h" | 9 #include "ash/display/display_layout_store.h" |
| 10 #include "ash/display/display_manager.h" | 10 #include "ash/display/display_manager.h" |
| 11 #include "ash/screen_util.h" | 11 #include "ash/screen_util.h" |
| 12 #include "ash/shelf/shelf.h" | 12 #include "ash/shelf/shelf.h" |
| 13 #include "ash/shelf/shelf_widget.h" | 13 #include "ash/shelf/shelf_widget.h" |
| 14 #include "ash/shell.h" | 14 #include "ash/shell.h" |
| 15 #include "ash/test/ash_test_base.h" | 15 #include "ash/test/ash_test_base.h" |
| 16 #include "ash/test/ash_test_helper.h" | 16 #include "ash/test/ash_test_helper.h" |
| 17 #include "ash/test/cursor_manager_test_api.h" | 17 #include "ash/test/cursor_manager_test_api.h" |
| 18 #include "ash/test/display_manager_test_api.h" | 18 #include "ash/test/display_manager_test_api.h" |
| 19 #include "ash/test/test_shell_delegate.h" | 19 #include "ash/test/test_shell_delegate.h" |
| 20 #include "ash/wm/window_state.h" | 20 #include "ash/wm/window_state.h" |
| 21 #include "ash/wm/wm_event.h" | 21 #include "ash/wm/wm_event.h" |
| 22 #include "base/command_line.h" | 22 #include "base/command_line.h" |
| 23 #include "ui/aura/client/focus_change_observer.h" | 23 #include "ui/aura/client/focus_change_observer.h" |
| 24 #include "ui/aura/client/focus_client.h" | 24 #include "ui/aura/client/focus_client.h" |
| 25 #include "ui/aura/env.h" | 25 #include "ui/aura/env.h" |
| 26 #include "ui/aura/test/event_generator.h" | |
| 27 #include "ui/aura/window_tracker.h" | 26 #include "ui/aura/window_tracker.h" |
| 28 #include "ui/aura/window_tree_host.h" | 27 #include "ui/aura/window_tree_host.h" |
| 29 #include "ui/events/event_handler.h" | 28 #include "ui/events/event_handler.h" |
| 29 #include "ui/events/test/event_generator.h" |
| 30 #include "ui/gfx/display.h" | 30 #include "ui/gfx/display.h" |
| 31 #include "ui/gfx/screen.h" | 31 #include "ui/gfx/screen.h" |
| 32 #include "ui/views/widget/widget.h" | 32 #include "ui/views/widget/widget.h" |
| 33 #include "ui/wm/public/activation_change_observer.h" | 33 #include "ui/wm/public/activation_change_observer.h" |
| 34 #include "ui/wm/public/activation_client.h" | 34 #include "ui/wm/public/activation_client.h" |
| 35 | 35 |
| 36 #if defined(USE_X11) | 36 #if defined(USE_X11) |
| 37 #include <X11/Xlib.h> | 37 #include <X11/Xlib.h> |
| 38 #include "ui/gfx/x/x11_types.h" | 38 #include "ui/gfx/x/x11_types.h" |
| 39 #undef RootWindow | 39 #undef RootWindow |
| (...skipping 974 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1014 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 1014 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); |
| 1015 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1015 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1016 | 1016 |
| 1017 display_controller->SetOverscanInsets(display1.id(), | 1017 display_controller->SetOverscanInsets(display1.id(), |
| 1018 gfx::Insets(10, 15, 20, 25)); | 1018 gfx::Insets(10, 15, 20, 25)); |
| 1019 EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString()); | 1019 EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString()); |
| 1020 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 1020 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); |
| 1021 EXPECT_EQ("80,0 150x200", | 1021 EXPECT_EQ("80,0 150x200", |
| 1022 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1022 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| 1023 | 1023 |
| 1024 aura::test::EventGenerator generator(root_windows[0]); | 1024 ui::test::EventGenerator generator(root_windows[0]); |
| 1025 generator.MoveMouseToInHost(20, 25); | 1025 generator.MoveMouseToInHost(20, 25); |
| 1026 EXPECT_EQ("5,15", event_handler.GetLocationAndReset()); | 1026 EXPECT_EQ("5,15", event_handler.GetLocationAndReset()); |
| 1027 | 1027 |
| 1028 display_controller->SetOverscanInsets(display1.id(), gfx::Insets()); | 1028 display_controller->SetOverscanInsets(display1.id(), gfx::Insets()); |
| 1029 EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString()); | 1029 EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString()); |
| 1030 EXPECT_EQ("120,0 150x200", | 1030 EXPECT_EQ("120,0 150x200", |
| 1031 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1031 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| 1032 | 1032 |
| 1033 generator.MoveMouseToInHost(30, 20); | 1033 generator.MoveMouseToInHost(30, 20); |
| 1034 EXPECT_EQ("30,20", event_handler.GetLocationAndReset()); | 1034 EXPECT_EQ("30,20", event_handler.GetLocationAndReset()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1056 return; | 1056 return; |
| 1057 | 1057 |
| 1058 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 1058 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 1059 TestEventHandler event_handler; | 1059 TestEventHandler event_handler; |
| 1060 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 1060 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
| 1061 | 1061 |
| 1062 UpdateDisplay("120x200,300x400*2"); | 1062 UpdateDisplay("120x200,300x400*2"); |
| 1063 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 1063 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); |
| 1064 int64 display2_id = ScreenUtil::GetSecondaryDisplay().id(); | 1064 int64 display2_id = ScreenUtil::GetSecondaryDisplay().id(); |
| 1065 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1065 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1066 aura::test::EventGenerator generator1(root_windows[0]); | 1066 ui::test::EventGenerator generator1(root_windows[0]); |
| 1067 | 1067 |
| 1068 TestObserver observer; | 1068 TestObserver observer; |
| 1069 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 1069 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); |
| 1070 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 1070 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); |
| 1071 EXPECT_EQ("120,0 150x200", | 1071 EXPECT_EQ("120,0 150x200", |
| 1072 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1072 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| 1073 generator1.MoveMouseToInHost(50, 40); | 1073 generator1.MoveMouseToInHost(50, 40); |
| 1074 EXPECT_EQ("50,40", event_handler.GetLocationAndReset()); | 1074 EXPECT_EQ("50,40", event_handler.GetLocationAndReset()); |
| 1075 EXPECT_EQ(gfx::Display::ROTATE_0, GetStoredRotation(display1.id())); | 1075 EXPECT_EQ(gfx::Display::ROTATE_0, GetStoredRotation(display1.id())); |
| 1076 EXPECT_EQ(gfx::Display::ROTATE_0, GetStoredRotation(display2_id)); | 1076 EXPECT_EQ(gfx::Display::ROTATE_0, GetStoredRotation(display2_id)); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 1097 gfx::Display::ROTATE_270); | 1097 gfx::Display::ROTATE_270); |
| 1098 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); | 1098 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); |
| 1099 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 1099 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); |
| 1100 EXPECT_EQ("50,120 200x150", | 1100 EXPECT_EQ("50,120 200x150", |
| 1101 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1101 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| 1102 EXPECT_EQ(gfx::Display::ROTATE_90, GetStoredRotation(display1.id())); | 1102 EXPECT_EQ(gfx::Display::ROTATE_90, GetStoredRotation(display1.id())); |
| 1103 EXPECT_EQ(gfx::Display::ROTATE_270, GetStoredRotation(display2_id)); | 1103 EXPECT_EQ(gfx::Display::ROTATE_270, GetStoredRotation(display2_id)); |
| 1104 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); | 1104 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); |
| 1105 | 1105 |
| 1106 #if !defined(OS_WIN) | 1106 #if !defined(OS_WIN) |
| 1107 aura::test::EventGenerator generator2(root_windows[1]); | 1107 ui::test::EventGenerator generator2(root_windows[1]); |
| 1108 generator2.MoveMouseToInHost(50, 40); | 1108 generator2.MoveMouseToInHost(50, 40); |
| 1109 EXPECT_EQ("179,25", event_handler.GetLocationAndReset()); | 1109 EXPECT_EQ("179,25", event_handler.GetLocationAndReset()); |
| 1110 display_manager->SetDisplayRotation(display1.id(), | 1110 display_manager->SetDisplayRotation(display1.id(), |
| 1111 gfx::Display::ROTATE_180); | 1111 gfx::Display::ROTATE_180); |
| 1112 | 1112 |
| 1113 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 1113 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); |
| 1114 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 1114 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); |
| 1115 // Dislay must share at least 100, so the x's offset becomes 20. | 1115 // Dislay must share at least 100, so the x's offset becomes 20. |
| 1116 EXPECT_EQ("20,200 200x150", | 1116 EXPECT_EQ("20,200 200x150", |
| 1117 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1117 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1139 gfx::Display::SetInternalDisplayId(display1.id()); | 1139 gfx::Display::SetInternalDisplayId(display1.id()); |
| 1140 | 1140 |
| 1141 gfx::Display display2 = ScreenUtil::GetSecondaryDisplay(); | 1141 gfx::Display display2 = ScreenUtil::GetSecondaryDisplay(); |
| 1142 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1142 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1143 EXPECT_EQ("0,0 450x300", display1.bounds().ToString()); | 1143 EXPECT_EQ("0,0 450x300", display1.bounds().ToString()); |
| 1144 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString()); | 1144 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString()); |
| 1145 EXPECT_EQ("450,0 500x300", display2.bounds().ToString()); | 1145 EXPECT_EQ("450,0 500x300", display2.bounds().ToString()); |
| 1146 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); | 1146 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); |
| 1147 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); | 1147 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); |
| 1148 | 1148 |
| 1149 aura::test::EventGenerator generator(root_windows[0]); | 1149 ui::test::EventGenerator generator(root_windows[0]); |
| 1150 generator.MoveMouseToInHost(599, 200); | 1150 generator.MoveMouseToInHost(599, 200); |
| 1151 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); | 1151 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); |
| 1152 | 1152 |
| 1153 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 1153 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
| 1154 display_manager->SetDisplayUIScale(display1.id(), 1.25f); | 1154 display_manager->SetDisplayUIScale(display1.id(), 1.25f); |
| 1155 display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 1155 display1 = Shell::GetScreen()->GetPrimaryDisplay(); |
| 1156 display2 = ScreenUtil::GetSecondaryDisplay(); | 1156 display2 = ScreenUtil::GetSecondaryDisplay(); |
| 1157 EXPECT_EQ("0,0 375x250", display1.bounds().ToString()); | 1157 EXPECT_EQ("0,0 375x250", display1.bounds().ToString()); |
| 1158 EXPECT_EQ("0,0 375x250", root_windows[0]->bounds().ToString()); | 1158 EXPECT_EQ("0,0 375x250", root_windows[0]->bounds().ToString()); |
| 1159 EXPECT_EQ("375,0 500x300", display2.bounds().ToString()); | 1159 EXPECT_EQ("375,0 500x300", display2.bounds().ToString()); |
| 1160 EXPECT_EQ(1.25f, GetStoredUIScale(display1.id())); | 1160 EXPECT_EQ(1.25f, GetStoredUIScale(display1.id())); |
| 1161 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); | 1161 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); |
| 1162 | 1162 |
| 1163 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 1163 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
| 1164 } | 1164 } |
| 1165 | 1165 |
| 1166 TEST_F(DisplayControllerTest, TouchScale) { | 1166 TEST_F(DisplayControllerTest, TouchScale) { |
| 1167 if (!SupportsMultipleDisplays()) | 1167 if (!SupportsMultipleDisplays()) |
| 1168 return; | 1168 return; |
| 1169 | 1169 |
| 1170 TestEventHandler event_handler; | 1170 TestEventHandler event_handler; |
| 1171 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 1171 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
| 1172 | 1172 |
| 1173 UpdateDisplay("200x200*2"); | 1173 UpdateDisplay("200x200*2"); |
| 1174 gfx::Display display = Shell::GetScreen()->GetPrimaryDisplay(); | 1174 gfx::Display display = Shell::GetScreen()->GetPrimaryDisplay(); |
| 1175 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1175 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1176 aura::Window* root_window = root_windows[0]; | 1176 aura::Window* root_window = root_windows[0]; |
| 1177 aura::test::EventGenerator generator(root_window); | 1177 ui::test::EventGenerator generator(root_window); |
| 1178 | 1178 |
| 1179 generator.PressMoveAndReleaseTouchTo(50, 50); | 1179 generator.PressMoveAndReleaseTouchTo(50, 50); |
| 1180 // Default test touches have radius_x/y = 1.0, with device scale | 1180 // Default test touches have radius_x/y = 1.0, with device scale |
| 1181 // factor = 2, the scaled radius_x/y should be 0.5. | 1181 // factor = 2, the scaled radius_x/y should be 0.5. |
| 1182 EXPECT_EQ(0.5, event_handler.touch_radius_x()); | 1182 EXPECT_EQ(0.5, event_handler.touch_radius_x()); |
| 1183 EXPECT_EQ(0.5, event_handler.touch_radius_y()); | 1183 EXPECT_EQ(0.5, event_handler.touch_radius_y()); |
| 1184 | 1184 |
| 1185 generator.ScrollSequence(gfx::Point(0,0), | 1185 generator.ScrollSequence(gfx::Point(0,0), |
| 1186 base::TimeDelta::FromMilliseconds(100), | 1186 base::TimeDelta::FromMilliseconds(100), |
| 1187 10.0, 1.0, 5, 1); | 1187 10.0, 1.0, 5, 1); |
| (...skipping 15 matching lines...) Expand all Loading... |
| 1203 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 1203 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
| 1204 | 1204 |
| 1205 UpdateDisplay("600x400*2/r@1.5"); | 1205 UpdateDisplay("600x400*2/r@1.5"); |
| 1206 | 1206 |
| 1207 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 1207 gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); |
| 1208 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1208 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
| 1209 EXPECT_EQ("0,0 300x450", display1.bounds().ToString()); | 1209 EXPECT_EQ("0,0 300x450", display1.bounds().ToString()); |
| 1210 EXPECT_EQ("0,0 300x450", root_windows[0]->bounds().ToString()); | 1210 EXPECT_EQ("0,0 300x450", root_windows[0]->bounds().ToString()); |
| 1211 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); | 1211 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); |
| 1212 | 1212 |
| 1213 aura::test::EventGenerator generator(root_windows[0]); | 1213 ui::test::EventGenerator generator(root_windows[0]); |
| 1214 generator.MoveMouseToInHost(0, 0); | 1214 generator.MoveMouseToInHost(0, 0); |
| 1215 EXPECT_EQ("0,449", event_handler.GetLocationAndReset()); | 1215 EXPECT_EQ("0,449", event_handler.GetLocationAndReset()); |
| 1216 generator.MoveMouseToInHost(599, 0); | 1216 generator.MoveMouseToInHost(599, 0); |
| 1217 EXPECT_EQ("0,0", event_handler.GetLocationAndReset()); | 1217 EXPECT_EQ("0,0", event_handler.GetLocationAndReset()); |
| 1218 generator.MoveMouseToInHost(599, 399); | 1218 generator.MoveMouseToInHost(599, 399); |
| 1219 EXPECT_EQ("299,0", event_handler.GetLocationAndReset()); | 1219 EXPECT_EQ("299,0", event_handler.GetLocationAndReset()); |
| 1220 generator.MoveMouseToInHost(0, 399); | 1220 generator.MoveMouseToInHost(0, 399); |
| 1221 EXPECT_EQ("299,449", event_handler.GetLocationAndReset()); | 1221 EXPECT_EQ("299,449", event_handler.GetLocationAndReset()); |
| 1222 | 1222 |
| 1223 UpdateDisplay("600x400*2/u@1.5"); | 1223 UpdateDisplay("600x400*2/u@1.5"); |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1331 EXPECT_EQ("aura_root_x", GetXWindowName(secondary->GetHost())); | 1331 EXPECT_EQ("aura_root_x", GetXWindowName(secondary->GetHost())); |
| 1332 | 1332 |
| 1333 // Switching back to single display. | 1333 // Switching back to single display. |
| 1334 UpdateDisplay("300x400"); | 1334 UpdateDisplay("300x400"); |
| 1335 EXPECT_EQ("aura_root_0", GetXWindowName( | 1335 EXPECT_EQ("aura_root_0", GetXWindowName( |
| 1336 Shell::GetPrimaryRootWindow()->GetHost())); | 1336 Shell::GetPrimaryRootWindow()->GetHost())); |
| 1337 } | 1337 } |
| 1338 #endif | 1338 #endif |
| 1339 | 1339 |
| 1340 } // namespace ash | 1340 } // namespace ash |
| OLD | NEW |