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 "athena/wm/window_overview_mode.h" | 5 #include "athena/wm/window_overview_mode.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 | 173 |
174 // Prepare the desired transforms for all the windows, and set the initial | 174 // Prepare the desired transforms for all the windows, and set the initial |
175 // state on the windows. | 175 // state on the windows. |
176 ComputeTerminalStatesForAllWindows(); | 176 ComputeTerminalStatesForAllWindows(); |
177 SetInitialWindowStates(); | 177 SetInitialWindowStates(); |
178 } | 178 } |
179 | 179 |
180 virtual ~WindowOverviewModeImpl() { | 180 virtual ~WindowOverviewModeImpl() { |
181 container_->set_target_handler(container_->delegate()); | 181 container_->set_target_handler(container_->delegate()); |
182 RemoveAnimationObserver(); | 182 RemoveAnimationObserver(); |
183 aura::Window::Windows windows = window_list_provider_->GetWindowList(); | 183 aura::Window::Windows windows = |
| 184 window_list_provider_->GetCurrentWindowList(); |
184 if (windows.empty()) | 185 if (windows.empty()) |
185 return; | 186 return; |
186 std::for_each(windows.begin(), windows.end(), | 187 std::for_each(windows.begin(), windows.end(), |
187 std::bind2nd(std::ptr_fun(&RestoreWindowState), | 188 std::bind2nd(std::ptr_fun(&RestoreWindowState), |
188 split_view_controller_)); | 189 split_view_controller_)); |
189 } | 190 } |
190 | 191 |
191 private: | 192 private: |
192 // Computes the transforms for all windows in both the topmost and bottom-most | 193 // Computes the transforms for all windows in both the topmost and bottom-most |
193 // positions. The transforms are set in the |kWindowOverviewState| property of | 194 // positions. The transforms are set in the |kWindowOverviewState| property of |
194 // the windows. | 195 // the windows. |
195 void ComputeTerminalStatesForAllWindows() { | 196 void ComputeTerminalStatesForAllWindows() { |
196 aura::Window::Windows windows = window_list_provider_->GetWindowList(); | 197 aura::Window::Windows windows = |
| 198 window_list_provider_->GetCurrentWindowList(); |
197 size_t index = 0; | 199 size_t index = 0; |
198 | 200 |
199 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); | 201 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); |
200 iter != windows.rend(); | 202 iter != windows.rend(); |
201 ++iter, ++index) { | 203 ++iter, ++index) { |
202 aura::Window* window = (*iter); | 204 aura::Window* window = (*iter); |
203 wm::SetShadowType(window, wm::SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE); | 205 wm::SetShadowType(window, wm::SHADOW_TYPE_RECTANGULAR_ALWAYS_ACTIVE); |
204 | 206 |
205 WindowOverviewState* state = new WindowOverviewState; | 207 WindowOverviewState* state = new WindowOverviewState; |
206 window->SetProperty(kWindowOverviewState, state); | 208 window->SetProperty(kWindowOverviewState, state); |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 | 247 |
246 WindowOverviewState* state = window->GetProperty(kWindowOverviewState); | 248 WindowOverviewState* state = window->GetProperty(kWindowOverviewState); |
247 CHECK(state); | 249 CHECK(state); |
248 state->top = top_transform; | 250 state->top = top_transform; |
249 state->bottom = bottom_transform; | 251 state->bottom = bottom_transform; |
250 state->progress = 0.f; | 252 state->progress = 0.f; |
251 } | 253 } |
252 | 254 |
253 // Sets the initial position for the windows for the overview mode. | 255 // Sets the initial position for the windows for the overview mode. |
254 void SetInitialWindowStates() { | 256 void SetInitialWindowStates() { |
255 aura::Window::Windows windows = window_list_provider_->GetWindowList(); | 257 aura::Window::Windows windows = |
| 258 window_list_provider_->GetCurrentWindowList(); |
256 // The initial overview state of the topmost three windows. | 259 // The initial overview state of the topmost three windows. |
257 const float kInitialProgress[] = { 0.5f, 0.05f, 0.01f }; | 260 const float kInitialProgress[] = { 0.5f, 0.05f, 0.01f }; |
258 size_t index = 0; | 261 size_t index = 0; |
259 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); | 262 for (aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); |
260 iter != windows.rend(); | 263 iter != windows.rend(); |
261 ++iter) { | 264 ++iter) { |
262 float progress = 0.f; | 265 float progress = 0.f; |
263 aura::Window* window = *iter; | 266 aura::Window* window = *iter; |
264 if (split_view_controller_->IsSplitViewModeActive() && | 267 if (split_view_controller_->IsSplitViewModeActive() && |
265 (window == split_view_controller_->left_window() || | 268 (window == split_view_controller_->left_window() || |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 while (target && target->parent() != container_) | 308 while (target && target->parent() != container_) |
306 target = target->parent(); | 309 target = target->parent(); |
307 return target; | 310 return target; |
308 } | 311 } |
309 | 312 |
310 // Scroll the window list by |delta_y| amount. |delta_y| is negative when | 313 // Scroll the window list by |delta_y| amount. |delta_y| is negative when |
311 // scrolling up; and positive when scrolling down. | 314 // scrolling up; and positive when scrolling down. |
312 void DoScroll(float delta_y) { | 315 void DoScroll(float delta_y) { |
313 const float kEpsilon = 1e-3f; | 316 const float kEpsilon = 1e-3f; |
314 float delta_y_p = std::abs(delta_y) / GetScrollableHeight(); | 317 float delta_y_p = std::abs(delta_y) / GetScrollableHeight(); |
315 aura::Window::Windows windows = window_list_provider_->GetWindowList(); | 318 aura::Window::Windows windows = |
| 319 window_list_provider_->GetCurrentWindowList(); |
316 if (delta_y < 0) { | 320 if (delta_y < 0) { |
317 // Scroll up. Start with the top-most (i.e. behind-most in terms of | 321 // Scroll up. Start with the top-most (i.e. behind-most in terms of |
318 // z-index) window, and try to scroll them up. | 322 // z-index) window, and try to scroll them up. |
319 for (aura::Window::Windows::const_iterator iter = windows.begin(); | 323 for (aura::Window::Windows::const_iterator iter = windows.begin(); |
320 delta_y_p > kEpsilon && iter != windows.end(); | 324 delta_y_p > kEpsilon && iter != windows.end(); |
321 ++iter) { | 325 ++iter) { |
322 aura::Window* window = (*iter); | 326 aura::Window* window = (*iter); |
323 WindowOverviewState* state = window->GetProperty(kWindowOverviewState); | 327 WindowOverviewState* state = window->GetProperty(kWindowOverviewState); |
324 if (state->progress > kEpsilon) { | 328 if (state->progress > kEpsilon) { |
325 // It is possible to scroll |window| up. Scroll it up, and update | 329 // It is possible to scroll |window| up. Scroll it up, and update |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
498 transform_x = container_->bounds().right() - transformed_bounds.x(); | 502 transform_x = container_->bounds().right() - transformed_bounds.x(); |
499 else | 503 else |
500 transform_x = -(transformed_bounds.x() + transformed_bounds.width()); | 504 transform_x = -(transformed_bounds.x() + transformed_bounds.width()); |
501 float scale = gfx::Tween::FloatValueBetween( | 505 float scale = gfx::Tween::FloatValueBetween( |
502 dragged_state->progress, kMinScale, kMaxScale); | 506 dragged_state->progress, kMinScale, kMaxScale); |
503 transform.Translate(transform_x / scale, 0); | 507 transform.Translate(transform_x / scale, 0); |
504 dragged_window_->SetTransform(transform); | 508 dragged_window_->SetTransform(transform); |
505 dragged_window_->layer()->SetOpacity(kMinOpacity); | 509 dragged_window_->layer()->SetOpacity(kMinOpacity); |
506 } | 510 } |
507 | 511 |
508 const aura::Window::Windows list = window_list_provider_->GetWindowList(); | 512 const aura::Window::Windows list = |
| 513 window_list_provider_->GetCurrentWindowList(); |
509 CHECK(!list.empty()); | 514 CHECK(!list.empty()); |
510 if (list.front() == dragged_window_) { | 515 if (list.front() == dragged_window_) { |
511 // There's no window behind |dragged_window_|. So move the windows in | 516 // There's no window behind |dragged_window_|. So move the windows in |
512 // front take a step back. | 517 // front take a step back. |
513 for (aura::Window::Windows::const_reverse_iterator iter = list.rbegin(); | 518 for (aura::Window::Windows::const_reverse_iterator iter = list.rbegin(); |
514 iter != list.rend() && *iter != dragged_window_; | 519 iter != list.rend() && *iter != dragged_window_; |
515 ++iter) { | 520 ++iter) { |
516 aura::Window* window = *iter; | 521 aura::Window* window = *iter; |
517 ui::ScopedLayerAnimationSettings settings( | 522 ui::ScopedLayerAnimationSettings settings( |
518 window->layer()->GetAnimator()); | 523 window->layer()->GetAnimator()); |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
734 aura::Window* container, | 739 aura::Window* container, |
735 const WindowListProvider* window_list_provider, | 740 const WindowListProvider* window_list_provider, |
736 SplitViewController* split_view_controller, | 741 SplitViewController* split_view_controller, |
737 WindowOverviewModeDelegate* delegate) { | 742 WindowOverviewModeDelegate* delegate) { |
738 return scoped_ptr<WindowOverviewMode>( | 743 return scoped_ptr<WindowOverviewMode>( |
739 new WindowOverviewModeImpl(container, window_list_provider, | 744 new WindowOverviewModeImpl(container, window_list_provider, |
740 split_view_controller, delegate)); | 745 split_view_controller, delegate)); |
741 } | 746 } |
742 | 747 |
743 } // namespace athena | 748 } // namespace athena |
OLD | NEW |