OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/common/wm/window_state.h" | 5 #include "ash/common/wm/window_state.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "ash/common/material_design/material_design_controller.h" | 9 #include "ash/common/material_design/material_design_controller.h" |
10 #include "ash/common/wm/window_state.h" | 10 #include "ash/common/wm/window_state.h" |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
69 const gfx::Rect kPrimaryDisplayWorkAreaBounds = | 69 const gfx::Rect kPrimaryDisplayWorkAreaBounds = |
70 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 70 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
71 const gfx::Rect kSecondaryDisplayWorkAreaBounds = | 71 const gfx::Rect kSecondaryDisplayWorkAreaBounds = |
72 ScreenUtil::GetSecondaryDisplay().work_area(); | 72 ScreenUtil::GetSecondaryDisplay().work_area(); |
73 | 73 |
74 std::unique_ptr<aura::Window> window( | 74 std::unique_ptr<aura::Window> window( |
75 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); | 75 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); |
76 WindowState* window_state = GetWindowState(window.get()); | 76 WindowState* window_state = GetWindowState(window.get()); |
77 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); | 77 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); |
78 window_state->OnWMEvent(&snap_left); | 78 window_state->OnWMEvent(&snap_left); |
79 gfx::Rect expected = gfx::Rect( | 79 gfx::Rect expected = gfx::Rect(kPrimaryDisplayWorkAreaBounds.x(), |
80 kPrimaryDisplayWorkAreaBounds.x(), | 80 kPrimaryDisplayWorkAreaBounds.y(), |
81 kPrimaryDisplayWorkAreaBounds.y(), | 81 kPrimaryDisplayWorkAreaBounds.width() / 2, |
82 kPrimaryDisplayWorkAreaBounds.width() / 2, | 82 kPrimaryDisplayWorkAreaBounds.height()); |
83 kPrimaryDisplayWorkAreaBounds.height()); | |
84 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 83 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
85 | 84 |
86 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); | 85 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); |
87 window_state->OnWMEvent(&snap_right); | 86 window_state->OnWMEvent(&snap_right); |
88 expected.set_x(kPrimaryDisplayWorkAreaBounds.right() - expected.width()); | 87 expected.set_x(kPrimaryDisplayWorkAreaBounds.right() - expected.width()); |
89 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 88 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
90 | 89 |
91 // Move the window to the secondary display. | 90 // Move the window to the secondary display. |
92 window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100), | 91 window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100), |
93 ScreenUtil::GetSecondaryDisplay()); | 92 ScreenUtil::GetSecondaryDisplay()); |
94 | 93 |
95 window_state->OnWMEvent(&snap_right); | 94 window_state->OnWMEvent(&snap_right); |
96 expected = gfx::Rect( | 95 expected = gfx::Rect(kSecondaryDisplayWorkAreaBounds.x() + |
97 kSecondaryDisplayWorkAreaBounds.x() + | 96 kSecondaryDisplayWorkAreaBounds.width() / 2, |
98 kSecondaryDisplayWorkAreaBounds.width() / 2, | 97 kSecondaryDisplayWorkAreaBounds.y(), |
99 kSecondaryDisplayWorkAreaBounds.y(), | 98 kSecondaryDisplayWorkAreaBounds.width() / 2, |
100 kSecondaryDisplayWorkAreaBounds.width() / 2, | 99 kSecondaryDisplayWorkAreaBounds.height()); |
101 kSecondaryDisplayWorkAreaBounds.height()); | |
102 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 100 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
103 | 101 |
104 window_state->OnWMEvent(&snap_left); | 102 window_state->OnWMEvent(&snap_left); |
105 expected.set_x(kSecondaryDisplayWorkAreaBounds.x()); | 103 expected.set_x(kSecondaryDisplayWorkAreaBounds.x()); |
106 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 104 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
107 } | 105 } |
108 | 106 |
109 // Test how the minimum and maximum size specified by the aura::WindowDelegate | 107 // Test how the minimum and maximum size specified by the aura::WindowDelegate |
110 // affect snapping. | 108 // affect snapping. |
111 TEST_P(WindowStateTest, SnapWindowMinimumSize) { | 109 TEST_P(WindowStateTest, SnapWindowMinimumSize) { |
112 if (!SupportsHostWindowResize()) | 110 if (!SupportsHostWindowResize()) |
113 return; | 111 return; |
114 | 112 |
115 UpdateDisplay("0+0-600x900"); | 113 UpdateDisplay("0+0-600x900"); |
116 const gfx::Rect kWorkAreaBounds = | 114 const gfx::Rect kWorkAreaBounds = |
117 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 115 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
118 | 116 |
119 aura::test::TestWindowDelegate delegate; | 117 aura::test::TestWindowDelegate delegate; |
120 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( | 118 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( |
121 &delegate, -1, gfx::Rect(0, 100, kWorkAreaBounds.width() - 1, 100))); | 119 &delegate, -1, gfx::Rect(0, 100, kWorkAreaBounds.width() - 1, 100))); |
122 | 120 |
123 // It should be possible to snap a window with a minimum size. | 121 // It should be possible to snap a window with a minimum size. |
124 delegate.set_minimum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); | 122 delegate.set_minimum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); |
125 WindowState* window_state = GetWindowState(window.get()); | 123 WindowState* window_state = GetWindowState(window.get()); |
126 EXPECT_TRUE(window_state->CanSnap()); | 124 EXPECT_TRUE(window_state->CanSnap()); |
127 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); | 125 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); |
128 window_state->OnWMEvent(&snap_right); | 126 window_state->OnWMEvent(&snap_right); |
129 gfx::Rect expected = gfx::Rect(kWorkAreaBounds.x() + 1, | 127 gfx::Rect expected = |
130 kWorkAreaBounds.y(), | 128 gfx::Rect(kWorkAreaBounds.x() + 1, kWorkAreaBounds.y(), |
131 kWorkAreaBounds.width() - 1, | 129 kWorkAreaBounds.width() - 1, kWorkAreaBounds.height()); |
132 kWorkAreaBounds.height()); | |
133 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 130 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
134 | 131 |
135 // It should not be possible to snap a window with a maximum size, or if it | 132 // It should not be possible to snap a window with a maximum size, or if it |
136 // cannot be maximized. | 133 // cannot be maximized. |
137 delegate.set_maximum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); | 134 delegate.set_maximum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); |
138 EXPECT_FALSE(window_state->CanSnap()); | 135 EXPECT_FALSE(window_state->CanSnap()); |
139 delegate.set_maximum_size(gfx::Size(0, kWorkAreaBounds.height() - 1)); | 136 delegate.set_maximum_size(gfx::Size(0, kWorkAreaBounds.height() - 1)); |
140 EXPECT_FALSE(window_state->CanSnap()); | 137 EXPECT_FALSE(window_state->CanSnap()); |
141 delegate.set_maximum_size(gfx::Size()); | 138 delegate.set_maximum_size(gfx::Size()); |
142 window->SetProperty(aura::client::kCanMaximizeKey, false); | 139 window->SetProperty(aura::client::kCanMaximizeKey, false); |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 UpdateDisplay("0+0-900x600"); | 209 UpdateDisplay("0+0-900x600"); |
213 const gfx::Rect kWorkAreaBounds = | 210 const gfx::Rect kWorkAreaBounds = |
214 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 211 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
215 | 212 |
216 std::unique_ptr<aura::Window> window( | 213 std::unique_ptr<aura::Window> window( |
217 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); | 214 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); |
218 WindowState* window_state = GetWindowState(window.get()); | 215 WindowState* window_state = GetWindowState(window.get()); |
219 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); | 216 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); |
220 window_state->OnWMEvent(&snap_left); | 217 window_state->OnWMEvent(&snap_left); |
221 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); | 218 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); |
222 gfx::Rect expected = gfx::Rect(kWorkAreaBounds.x(), | 219 gfx::Rect expected = |
223 kWorkAreaBounds.y(), | 220 gfx::Rect(kWorkAreaBounds.x(), kWorkAreaBounds.y(), |
224 kWorkAreaBounds.width() / 2, | 221 kWorkAreaBounds.width() / 2, kWorkAreaBounds.height()); |
225 kWorkAreaBounds.height()); | |
226 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 222 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
227 | 223 |
228 // Snapped windows can have any width. | 224 // Snapped windows can have any width. |
229 expected.set_width(500); | 225 expected.set_width(500); |
230 window->SetBounds(gfx::Rect(10, 10, 500, 300)); | 226 window->SetBounds(gfx::Rect(10, 10, 500, 300)); |
231 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 227 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
232 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); | 228 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); |
233 } | 229 } |
234 | 230 |
235 // Test that snapping left/right preserves the restore bounds. | 231 // Test that snapping left/right preserves the restore bounds. |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
282 window->SetBounds(gfx::Rect(100, 100, 100, 100)); | 278 window->SetBounds(gfx::Rect(100, 100, 100, 100)); |
283 window->Show(); | 279 window->Show(); |
284 | 280 |
285 window_state->Maximize(); | 281 window_state->Maximize(); |
286 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); | 282 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); |
287 window_state->OnWMEvent(&snap_right); | 283 window_state->OnWMEvent(&snap_right); |
288 | 284 |
289 const gfx::Rect kWorkAreaBounds = | 285 const gfx::Rect kWorkAreaBounds = |
290 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 286 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
291 gfx::Rect expected_snapped_bounds( | 287 gfx::Rect expected_snapped_bounds( |
292 kWorkAreaBounds.x() + kWorkAreaBounds.width() / 2, | 288 kWorkAreaBounds.x() + kWorkAreaBounds.width() / 2, kWorkAreaBounds.y(), |
293 kWorkAreaBounds.y(), | 289 kWorkAreaBounds.width() / 2, kWorkAreaBounds.height()); |
294 kWorkAreaBounds.width() / 2, | |
295 kWorkAreaBounds.height()); | |
296 EXPECT_EQ(expected_snapped_bounds.ToString(), | 290 EXPECT_EQ(expected_snapped_bounds.ToString(), |
297 window->GetBoundsInScreen().ToString()); | 291 window->GetBoundsInScreen().ToString()); |
298 | 292 |
299 // The window should still be auto managed despite being right maximized. | 293 // The window should still be auto managed despite being right maximized. |
300 EXPECT_TRUE(window_state->window_position_managed()); | 294 EXPECT_TRUE(window_state->window_position_managed()); |
301 } | 295 } |
302 | 296 |
303 // Test that the replacement of a State object works as expected. | 297 // Test that the replacement of a State object works as expected. |
304 TEST_P(WindowStateTest, SimpleStateSwap) { | 298 TEST_P(WindowStateTest, SimpleStateSwap) { |
305 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 299 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
379 // Exiting fullscreen will update the maximized window to the work area. | 373 // Exiting fullscreen will update the maximized window to the work area. |
380 EXPECT_EQ(gfx::Rect(0, 0, 900, 653 + height_offset).ToString(), | 374 EXPECT_EQ(gfx::Rect(0, 0, 900, 653 + height_offset).ToString(), |
381 maximized->GetBoundsInScreen().ToString()); | 375 maximized->GetBoundsInScreen().ToString()); |
382 } | 376 } |
383 | 377 |
384 // TODO(skuhne): Add more unit test to verify the correctness for the restore | 378 // TODO(skuhne): Add more unit test to verify the correctness for the restore |
385 // operation. | 379 // operation. |
386 | 380 |
387 } // namespace wm | 381 } // namespace wm |
388 } // namespace ash | 382 } // namespace ash |
OLD | NEW |