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/workspace/workspace_window_resizer.h" | 5 #include "ash/wm/workspace/workspace_window_resizer.h" |
6 | 6 |
7 #include "ash/ash_constants.h" | 7 #include "ash/ash_constants.h" |
8 #include "ash/ash_switches.h" | 8 #include "ash/ash_switches.h" |
9 #include "ash/display/display_manager.h" | 9 #include "ash/display/display_manager.h" |
10 #include "ash/root_window_controller.h" | 10 #include "ash/root_window_controller.h" |
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 scoped_ptr<aura::Window> window4_; | 204 scoped_ptr<aura::Window> window4_; |
205 | 205 |
206 TestWindowDelegate touch_resize_delegate_; | 206 TestWindowDelegate touch_resize_delegate_; |
207 scoped_ptr<aura::Window> touch_resize_window_; | 207 scoped_ptr<aura::Window> touch_resize_window_; |
208 WorkspaceWindowResizer* workspace_resizer_; | 208 WorkspaceWindowResizer* workspace_resizer_; |
209 | 209 |
210 private: | 210 private: |
211 DISALLOW_COPY_AND_ASSIGN(WorkspaceWindowResizerTest); | 211 DISALLOW_COPY_AND_ASSIGN(WorkspaceWindowResizerTest); |
212 }; | 212 }; |
213 | 213 |
214 class WorkspaceWindowResizerTestSticky : public WorkspaceWindowResizerTest { | |
215 public: | |
216 WorkspaceWindowResizerTestSticky() {} | |
217 virtual ~WorkspaceWindowResizerTestSticky() {} | |
218 | |
219 virtual void SetUp() OVERRIDE { | |
220 CommandLine::ForCurrentProcess()->AppendSwitch( | |
221 ash::switches::kAshEnableStickyEdges); | |
222 WorkspaceWindowResizerTest::SetUp(); | |
223 } | |
224 | |
225 private: | |
226 DISALLOW_COPY_AND_ASSIGN(WorkspaceWindowResizerTestSticky); | |
227 }; | |
228 | |
229 // Assertions around attached window resize dragging from the right with 2 | 214 // Assertions around attached window resize dragging from the right with 2 |
230 // windows. | 215 // windows. |
231 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2) { | 216 TEST_F(WorkspaceWindowResizerTest, AttachedResize_RIGHT_2) { |
232 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); | 217 window_->SetBounds(gfx::Rect(0, 300, 400, 300)); |
233 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); | 218 window2_->SetBounds(gfx::Rect(400, 200, 100, 200)); |
234 | 219 |
235 std::vector<aura::Window*> windows; | 220 std::vector<aura::Window*> windows; |
236 windows.push_back(window2_.get()); | 221 windows.push_back(window2_.get()); |
237 scoped_ptr<WorkspaceWindowResizer> resizer(CreateWorkspaceResizerForTest( | 222 scoped_ptr<WorkspaceWindowResizer> resizer(CreateWorkspaceResizerForTest( |
238 window_.get(), gfx::Point(), HTRIGHT, | 223 window_.get(), gfx::Point(), HTRIGHT, |
(...skipping 893 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1132 window_.get(), gfx::Point(), HTBOTTOMLEFT)); | 1117 window_.get(), gfx::Point(), HTBOTTOMLEFT)); |
1133 ASSERT_TRUE(resizer.get()); | 1118 ASSERT_TRUE(resizer.get()); |
1134 resizer->Drag( | 1119 resizer->Drag( |
1135 CalculateDragPoint(*resizer, -98, work_area.bottom() - 220 - 2), 0); | 1120 CalculateDragPoint(*resizer, -98, work_area.bottom() - 220 - 2), 0); |
1136 EXPECT_EQ(0, window_->bounds().x()); | 1121 EXPECT_EQ(0, window_->bounds().x()); |
1137 EXPECT_EQ(200, window_->bounds().y()); | 1122 EXPECT_EQ(200, window_->bounds().y()); |
1138 EXPECT_EQ(120, window_->bounds().width()); | 1123 EXPECT_EQ(120, window_->bounds().width()); |
1139 EXPECT_EQ(work_area.bottom() - 200, window_->bounds().height()); | 1124 EXPECT_EQ(work_area.bottom() - 200, window_->bounds().height()); |
1140 } | 1125 } |
1141 | 1126 |
1142 // Verifies sticking to edges works. | |
1143 TEST_F(WorkspaceWindowResizerTestSticky, StickToEdge) { | |
1144 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> | |
1145 SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | |
1146 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); | |
1147 // Click 50px to the right so that the mouse pointer does not leave the | |
1148 // workspace ensuring sticky behavior. | |
1149 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1150 window_.get(), | |
1151 window_->bounds().origin() + gfx::Vector2d(50, 0), | |
1152 HTCAPTION)); | |
1153 ASSERT_TRUE(resizer.get()); | |
1154 // Move to an x-coordinate of 15, which should not stick. | |
1155 resizer->Drag(CalculateDragPoint(*resizer, 15 - 96, 0), 0); | |
1156 // Move to -15, should still stick to 0. | |
1157 resizer->Drag(CalculateDragPoint(*resizer, -15 - 96, 0), 0); | |
1158 EXPECT_EQ("0,112 320x160", window_->bounds().ToString()); | |
1159 // At -100 should move past edge. | |
1160 resizer->Drag(CalculateDragPoint(*resizer, -100 - 96, 0), 0); | |
1161 EXPECT_EQ("-100,112 320x160", window_->bounds().ToString()); | |
1162 resizer->Drag(CalculateDragPoint(*resizer, -101 - 96, 0), 0); | |
1163 EXPECT_EQ("-101,112 320x160", window_->bounds().ToString()); | |
1164 | |
1165 // Right side should similarly stick. | |
1166 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 - 15, 0), 0); | |
1167 EXPECT_EQ("465,112 320x160", window_->bounds().ToString()); | |
1168 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 15, 0), 0); | |
1169 EXPECT_EQ("480,112 320x160", window_->bounds().ToString()); | |
1170 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 100, 0), 0); | |
1171 EXPECT_EQ("580,112 320x160", window_->bounds().ToString()); | |
1172 resizer->Drag(CalculateDragPoint(*resizer, 800 - 320 - 96 + 101, 0), 0); | |
1173 EXPECT_EQ("581,112 320x160", window_->bounds().ToString()); | |
1174 | |
1175 // And the bottom should stick too. | |
1176 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 - 3 + 15), 0); | |
1177 EXPECT_EQ("96,437 320x160", window_->bounds().ToString()); | |
1178 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 - 2 + 100), 0); | |
1179 EXPECT_EQ("96,538 320x160", window_->bounds().ToString()); | |
1180 resizer->Drag(CalculateDragPoint(*resizer, 0, 600 - 160 - 112 - 2 + 101), 0); | |
1181 EXPECT_EQ("96,539 320x160", window_->bounds().ToString()); | |
1182 | |
1183 // No need to test dragging < 0 as we force that to 0. | |
1184 } | |
1185 | |
1186 // Verifies not sticking to edges when a mouse pointer is outside of work area. | |
1187 TEST_F(WorkspaceWindowResizerTestSticky, NoStickToEdgeWhenOutside) { | |
1188 Shell::GetPrimaryRootWindowController()->GetShelfLayoutManager()-> | |
1189 SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); | |
1190 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); | |
1191 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1192 window_.get(), gfx::Point(), HTCAPTION)); | |
1193 ASSERT_TRUE(resizer.get()); | |
1194 // Move to an x-coordinate of 15, which should not stick. | |
1195 resizer->Drag(CalculateDragPoint(*resizer, 15 - 96, 0), 0); | |
1196 // Move to -15, should still stick to 0. | |
1197 resizer->Drag(CalculateDragPoint(*resizer, -15 - 96, 0), 0); | |
1198 EXPECT_EQ("-15,112 320x160", window_->bounds().ToString()); | |
1199 } | |
1200 | |
1201 // Verifies window sticks to both window and work area. | 1127 // Verifies window sticks to both window and work area. |
1202 TEST_F(WorkspaceWindowResizerTest, StickToBothEdgeAndWindow) { | 1128 TEST_F(WorkspaceWindowResizerTest, StickToBothEdgeAndWindow) { |
1203 window_->SetBounds(gfx::Rect(10, 10, 20, 50)); | 1129 window_->SetBounds(gfx::Rect(10, 10, 20, 50)); |
1204 window_->Show(); | 1130 window_->Show(); |
1205 window2_->SetBounds(gfx::Rect(150, 160, 25, 1000)); | 1131 window2_->SetBounds(gfx::Rect(150, 160, 25, 1000)); |
1206 window2_->Show(); | 1132 window2_->Show(); |
1207 | 1133 |
1208 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | 1134 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( |
1209 window_.get(), gfx::Point(10, 10), HTCAPTION)); | 1135 window_.get(), gfx::Point(10, 10), HTCAPTION)); |
1210 ASSERT_TRUE(resizer.get()); | 1136 ASSERT_TRUE(resizer.get()); |
(...skipping 28 matching lines...) Expand all Loading... |
1239 resizer->Drag(CalculateDragPoint(*resizer, 119, attach_y + 1), 0); | 1165 resizer->Drag(CalculateDragPoint(*resizer, 119, attach_y + 1), 0); |
1240 expected.set_y(attach_y + initial_y); | 1166 expected.set_y(attach_y + initial_y); |
1241 EXPECT_EQ(expected.ToString(), window_->bounds().ToString()); | 1167 EXPECT_EQ(expected.ToString(), window_->bounds().ToString()); |
1242 | 1168 |
1243 // Moving down further should move the window. | 1169 // Moving down further should move the window. |
1244 resizer->Drag(CalculateDragPoint(*resizer, 119, attach_y + 18), 0); | 1170 resizer->Drag(CalculateDragPoint(*resizer, 119, attach_y + 18), 0); |
1245 expected.set_y(attach_y + initial_y + 18); | 1171 expected.set_y(attach_y + initial_y + 18); |
1246 EXPECT_EQ(expected.ToString(), window_->bounds().ToString()); | 1172 EXPECT_EQ(expected.ToString(), window_->bounds().ToString()); |
1247 } | 1173 } |
1248 | 1174 |
1249 // Verifies a resize sticks when dragging TOPLEFT. | |
1250 TEST_F(WorkspaceWindowResizerTestSticky, StickToWorkArea_TOPLEFT) { | |
1251 window_->SetBounds(gfx::Rect(100, 200, 20, 30)); | |
1252 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1253 window_.get(), gfx::Point(), HTTOPLEFT)); | |
1254 ASSERT_TRUE(resizer.get()); | |
1255 resizer->Drag(CalculateDragPoint(*resizer, -15 - 100, -15 -200), 0); | |
1256 EXPECT_EQ("0,0 120x230", window_->bounds().ToString()); | |
1257 } | |
1258 | |
1259 // Verifies a resize sticks when dragging TOPRIGHT. | |
1260 TEST_F(WorkspaceWindowResizerTestSticky, StickToWorkArea_TOPRIGHT) { | |
1261 window_->SetBounds(gfx::Rect(100, 200, 20, 30)); | |
1262 gfx::Rect work_area(ScreenUtil::GetDisplayWorkAreaBoundsInParent( | |
1263 window_.get())); | |
1264 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1265 window_.get(), gfx::Point(), HTTOPRIGHT)); | |
1266 ASSERT_TRUE(resizer.get()); | |
1267 resizer->Drag(CalculateDragPoint(*resizer, work_area.right() - 100 + 20, | |
1268 -200 - 15), 0); | |
1269 EXPECT_EQ(100, window_->bounds().x()); | |
1270 EXPECT_EQ(work_area.y(), window_->bounds().y()); | |
1271 EXPECT_EQ(work_area.right() - 100, window_->bounds().width()); | |
1272 EXPECT_EQ(230, window_->bounds().height()); | |
1273 } | |
1274 | |
1275 // Verifies a resize snap when dragging BOTTOMRIGHT. | |
1276 TEST_F(WorkspaceWindowResizerTestSticky, StickToWorkArea_BOTTOMRIGHT) { | |
1277 window_->SetBounds(gfx::Rect(100, 200, 20, 30)); | |
1278 gfx::Rect work_area(ScreenUtil::GetDisplayWorkAreaBoundsInParent( | |
1279 window_.get())); | |
1280 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1281 window_.get(), gfx::Point(), HTBOTTOMRIGHT)); | |
1282 ASSERT_TRUE(resizer.get()); | |
1283 resizer->Drag(CalculateDragPoint(*resizer, work_area.right() - 100 - 20 + 15, | |
1284 work_area.bottom() - 200 - 30 + 15), 0); | |
1285 EXPECT_EQ(100, window_->bounds().x()); | |
1286 EXPECT_EQ(200, window_->bounds().y()); | |
1287 EXPECT_EQ(work_area.right() - 100, window_->bounds().width()); | |
1288 EXPECT_EQ(work_area.bottom() - 200, window_->bounds().height()); | |
1289 } | |
1290 | |
1291 // Verifies a resize snap when dragging BOTTOMLEFT. | |
1292 TEST_F(WorkspaceWindowResizerTestSticky, StickToWorkArea_BOTTOMLEFT) { | |
1293 window_->SetBounds(gfx::Rect(100, 200, 20, 30)); | |
1294 gfx::Rect work_area(ScreenUtil::GetDisplayWorkAreaBoundsInParent( | |
1295 window_.get())); | |
1296 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | |
1297 window_.get(), gfx::Point(), HTBOTTOMLEFT)); | |
1298 ASSERT_TRUE(resizer.get()); | |
1299 resizer->Drag(CalculateDragPoint(*resizer, -15 - 100, | |
1300 work_area.bottom() - 200 - 30 + 15), 0); | |
1301 EXPECT_EQ(0, window_->bounds().x()); | |
1302 EXPECT_EQ(200, window_->bounds().y()); | |
1303 EXPECT_EQ(120, window_->bounds().width()); | |
1304 EXPECT_EQ(work_area.bottom() - 200, window_->bounds().height()); | |
1305 } | |
1306 | |
1307 TEST_F(WorkspaceWindowResizerTest, CtrlDragResizeToExactPosition) { | 1175 TEST_F(WorkspaceWindowResizerTest, CtrlDragResizeToExactPosition) { |
1308 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); | 1176 window_->SetBounds(gfx::Rect(96, 112, 320, 160)); |
1309 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( | 1177 scoped_ptr<WindowResizer> resizer(CreateResizerForTest( |
1310 window_.get(), gfx::Point(), HTBOTTOMRIGHT)); | 1178 window_.get(), gfx::Point(), HTBOTTOMRIGHT)); |
1311 ASSERT_TRUE(resizer.get()); | 1179 ASSERT_TRUE(resizer.get()); |
1312 // Resize the right bottom to add 10 in width, 12 in height. | 1180 // Resize the right bottom to add 10 in width, 12 in height. |
1313 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), ui::EF_CONTROL_DOWN); | 1181 resizer->Drag(CalculateDragPoint(*resizer, 10, 12), ui::EF_CONTROL_DOWN); |
1314 // Both bottom and right sides to resize to exact size requested. | 1182 // Both bottom and right sides to resize to exact size requested. |
1315 EXPECT_EQ("96,112 330x172", window_->bounds().ToString()); | 1183 EXPECT_EQ("96,112 330x172", window_->bounds().ToString()); |
1316 } | 1184 } |
(...skipping 683 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2000 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), | 1868 generator.GestureScrollSequence(gfx::Point(400, kRootHeight - 40), |
2001 gfx::Point(400, kRootHeight - 25), | 1869 gfx::Point(400, kRootHeight - 25), |
2002 base::TimeDelta::FromMilliseconds(10), | 1870 base::TimeDelta::FromMilliseconds(10), |
2003 5); | 1871 5); |
2004 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), | 1872 EXPECT_EQ(gfx::Rect(100, 100, 600, kRootHeight - 100).ToString(), |
2005 touch_resize_window_->bounds().ToString()); | 1873 touch_resize_window_->bounds().ToString()); |
2006 } | 1874 } |
2007 | 1875 |
2008 } // namespace internal | 1876 } // namespace internal |
2009 } // namespace ash | 1877 } // namespace ash |
OLD | NEW |