OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/overview/scoped_transform_overview_window.h" | 5 #include "ash/common/wm/overview/scoped_transform_overview_window.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "ash/common/wm/overview/scoped_overview_animation_settings.h" | 10 #include "ash/common/wm/overview/scoped_overview_animation_settings.h" |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 original_opacity_(window->GetTargetOpacity()), | 187 original_opacity_(window->GetTargetOpacity()), |
188 weak_ptr_factory_(this) {} | 188 weak_ptr_factory_(this) {} |
189 | 189 |
190 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {} | 190 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {} |
191 | 191 |
192 void ScopedTransformOverviewWindow::RestoreWindow() { | 192 void ScopedTransformOverviewWindow::RestoreWindow() { |
193 ScopedAnimationSettings animation_settings_list; | 193 ScopedAnimationSettings animation_settings_list; |
194 BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW, | 194 BeginScopedAnimation(OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW, |
195 &animation_settings_list); | 195 &animation_settings_list); |
196 SetTransform(window()->GetRootWindow(), original_transform_); | 196 SetTransform(window()->GetRootWindow(), original_transform_); |
197 set_overview_transform(original_transform_); | |
198 | 197 |
199 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings = | 198 std::unique_ptr<ScopedOverviewAnimationSettings> animation_settings = |
200 CreateScopedOverviewAnimationSettings( | 199 CreateScopedOverviewAnimationSettings( |
201 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS, | 200 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS, |
202 window_); | 201 window_); |
203 gfx::Transform transform; | 202 gfx::Transform transform; |
204 if ((original_visibility_ == ORIGINALLY_MINIMIZED && | 203 if ((original_visibility_ == ORIGINALLY_MINIMIZED && |
205 window_->GetShowState() != ui::SHOW_STATE_MINIMIZED) || | 204 window_->GetShowState() != ui::SHOW_STATE_MINIMIZED) || |
206 (original_visibility_ == ORIGINALLY_DOCKED_MINIMIZED && | 205 (original_visibility_ == ORIGINALLY_DOCKED_MINIMIZED && |
207 window_->GetWindowState()->GetStateType() != | 206 window_->GetWindowState()->GetStateType() != |
208 wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED)) { | 207 wm::WINDOW_STATE_TYPE_DOCKED_MINIMIZED)) { |
209 // Setting opacity 0 and visible false ensures that the property change | 208 // Setting opacity 0 and visible false ensures that the property change |
210 // to SHOW_STATE_MINIMIZED will not animate the window from its original | 209 // to SHOW_STATE_MINIMIZED will not animate the window from its original |
211 // bounds to the minimized position. | 210 // bounds to the minimized position. |
212 // Hiding the window needs to be done before the target opacity is 0, | 211 // Hiding the window needs to be done before the target opacity is 0, |
213 // otherwise the layer's visibility will not be updated | 212 // otherwise the layer's visibility will not be updated |
214 // (See VisibilityController::UpdateLayerVisibility). | 213 // (See VisibilityController::UpdateLayerVisibility). |
215 window_->Hide(); | 214 window_->Hide(); |
216 window_->SetOpacity(0); | 215 window_->SetOpacity(0); |
217 window_->SetShowState(ui::SHOW_STATE_MINIMIZED); | 216 window_->SetShowState(ui::SHOW_STATE_MINIMIZED); |
218 } | 217 } |
219 window_->GetWindowState()->set_ignored_by_shelf(ignored_by_shelf_); | 218 window_->GetWindowState()->set_ignored_by_shelf(ignored_by_shelf_); |
220 SetOpacity(original_opacity_); | 219 SetOpacity(original_opacity_); |
221 ShowHeaderAndResetShape(); | 220 ShowHeader(); |
222 } | 221 } |
223 | 222 |
224 void ScopedTransformOverviewWindow::BeginScopedAnimation( | 223 void ScopedTransformOverviewWindow::BeginScopedAnimation( |
225 OverviewAnimationType animation_type, | 224 OverviewAnimationType animation_type, |
226 ScopedAnimationSettings* animation_settings) { | 225 ScopedAnimationSettings* animation_settings) { |
227 for (auto* window : GetTransientTreeIterator(window_)) { | 226 for (auto* window : GetTransientTreeIterator(window_)) { |
228 animation_settings->push_back( | 227 animation_settings->push_back( |
229 CreateScopedOverviewAnimationSettings(animation_type, window)); | 228 CreateScopedOverviewAnimationSettings(animation_type, window)); |
230 } | 229 } |
231 } | 230 } |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
398 window->SetTransform(new_transform); | 397 window->SetTransform(new_transform); |
399 } | 398 } |
400 } | 399 } |
401 | 400 |
402 void ScopedTransformOverviewWindow::SetOpacity(float opacity) { | 401 void ScopedTransformOverviewWindow::SetOpacity(float opacity) { |
403 for (auto* window : GetTransientTreeIterator(window_)) { | 402 for (auto* window : GetTransientTreeIterator(window_)) { |
404 window->SetOpacity(opacity); | 403 window->SetOpacity(opacity); |
405 } | 404 } |
406 } | 405 } |
407 | 406 |
408 void ScopedTransformOverviewWindow::HideHeaderAndSetShape(int radius) { | 407 void ScopedTransformOverviewWindow::HideHeader() { |
409 gfx::Rect bounds(GetTargetBoundsInScreen().size()); | 408 gfx::Rect bounds(GetTargetBoundsInScreen().size()); |
410 const int inset = GetTopInset(); | 409 const int inset = GetTopInset(); |
411 if (inset > 0) { | 410 if (inset > 0) { |
412 // Use alpha shape to hide the window header. | 411 // Use alpha shape to hide the window header. |
413 bounds.Inset(0, inset, 0, 0); | 412 bounds.Inset(0, inset, 0, 0); |
414 std::unique_ptr<SkRegion> region(new SkRegion); | 413 std::unique_ptr<SkRegion> region(new SkRegion); |
415 region->setRect(RectToSkIRect(bounds)); | 414 region->setRect(RectToSkIRect(bounds)); |
416 if (original_window_shape_) | 415 if (original_window_shape_) |
417 region->op(*original_window_shape_, SkRegion::kIntersect_Op); | 416 region->op(*original_window_shape_, SkRegion::kIntersect_Op); |
418 window()->GetLayer()->SetAlphaShape(std::move(region)); | 417 window()->GetLayer()->SetAlphaShape(std::move(region)); |
419 window()->SetMasksToBounds(true); | 418 window()->SetMasksToBounds(true); |
420 } | 419 } |
421 } | 420 } |
422 | 421 |
423 void ScopedTransformOverviewWindow::ShowHeaderAndResetShape() { | 422 void ScopedTransformOverviewWindow::ShowHeader() { |
424 ui::Layer* layer = window()->GetLayer(); | 423 ui::Layer* layer = window()->GetLayer(); |
425 if (original_window_shape_) { | 424 if (original_window_shape_) { |
426 layer->SetAlphaShape( | 425 layer->SetAlphaShape( |
427 base::MakeUnique<SkRegion>(*original_window_shape_.get())); | 426 base::MakeUnique<SkRegion>(*original_window_shape_.get())); |
428 } else { | 427 } else { |
429 layer->SetAlphaShape(nullptr); | 428 layer->SetAlphaShape(nullptr); |
430 } | 429 } |
431 window()->SetMasksToBounds(false); | 430 window()->SetMasksToBounds(false); |
432 } | 431 } |
433 | 432 |
(...skipping 20 matching lines...) Expand all Loading... |
454 if (parent_window) | 453 if (parent_window) |
455 parent_window->CloseWidget(); | 454 parent_window->CloseWidget(); |
456 } | 455 } |
457 | 456 |
458 // static | 457 // static |
459 void ScopedTransformOverviewWindow::SetImmediateCloseForTests() { | 458 void ScopedTransformOverviewWindow::SetImmediateCloseForTests() { |
460 immediate_close_for_tests = true; | 459 immediate_close_for_tests = true; |
461 } | 460 } |
462 | 461 |
463 } // namespace ash | 462 } // namespace ash |
OLD | NEW |