Chromium Code Reviews| Index: ash/wm/workspace/workspace_layout_manager.cc |
| diff --git a/ash/wm/workspace/workspace_layout_manager.cc b/ash/wm/workspace/workspace_layout_manager.cc |
| index 4e79c6e83d114f84213addf40e982c06bb4bbf6b..45f98b62b2fe88ab1a1f69183ce636db800287ce 100644 |
| --- a/ash/wm/workspace/workspace_layout_manager.cc |
| +++ b/ash/wm/workspace/workspace_layout_manager.cc |
| @@ -16,14 +16,12 @@ |
| #include "ash/wm/window_properties.h" |
| #include "ash/wm/window_state.h" |
| #include "ash/wm/window_util.h" |
| -#include "ash/wm/workspace/workspace_window_resizer.h" |
| #include "ui/aura/client/activation_client.h" |
| #include "ui/aura/client/aura_constants.h" |
| #include "ui/aura/window.h" |
| #include "ui/aura/window_observer.h" |
| #include "ui/base/ui_base_types.h" |
| #include "ui/compositor/layer.h" |
| -#include "ui/compositor/scoped_layer_animation_settings.h" |
| #include "ui/events/event.h" |
| #include "ui/gfx/screen.h" |
| #include "ui/views/corewm/window_util.h" |
| @@ -40,49 +38,6 @@ namespace { |
| // must be visible when the window is added to the workspace. |
| const float kMinimumPercentOnScreenArea = 0.3f; |
| -void MoveToDisplayForRestore(wm::WindowState* window_state) { |
| - if (!window_state->HasRestoreBounds()) |
| - return; |
| - const gfx::Rect& restore_bounds = window_state->GetRestoreBoundsInScreen(); |
| - |
| - // Move only if the restore bounds is outside of |
| - // the display. There is no information about in which |
| - // display it should be restored, so this is best guess. |
| - // TODO(oshima): Restore information should contain the |
| - // work area information like WindowResizer does for the |
| - // last window location. |
| - gfx::Rect display_area = Shell::GetScreen()->GetDisplayNearestWindow( |
| - window_state->window()).bounds(); |
| - |
| - if (!display_area.Intersects(restore_bounds)) { |
| - const gfx::Display& display = |
| - Shell::GetScreen()->GetDisplayMatching(restore_bounds); |
| - DisplayController* display_controller = |
| - Shell::GetInstance()->display_controller(); |
| - aura::Window* new_root = |
| - display_controller->GetRootWindowForDisplayId(display.id()); |
| - if (new_root != window_state->window()->GetRootWindow()) { |
| - aura::Window* new_container = |
| - Shell::GetContainer(new_root, window_state->window()->parent()->id()); |
| - new_container->AddChild(window_state->window()); |
| - } |
| - } |
| -} |
| - |
| -gfx::Rect BoundsWithScreenEdgeVisible( |
| - aura::Window* window, |
| - const gfx::Rect& restore_bounds) { |
| - gfx::Rect max_bounds = |
| - ash::ScreenUtil::GetMaximizedWindowBoundsInParent(window); |
| - // If the restore_bounds are more than 1 grid step away from the size the |
| - // window would be when maximized, inset it. |
| - max_bounds.Inset(ash::internal::WorkspaceWindowResizer::kScreenEdgeInset, |
| - ash::internal::WorkspaceWindowResizer::kScreenEdgeInset); |
| - if (restore_bounds.Contains(max_bounds)) |
| - return max_bounds; |
| - return restore_bounds; |
| -} |
| - |
| } // namespace |
| WorkspaceLayoutManager::WorkspaceLayoutManager(aura::Window* window) |
| @@ -184,7 +139,7 @@ void WorkspaceLayoutManager::SetChildBounds( |
| child_bounds.width())); |
| child_bounds.set_height(std::min(work_area_in_parent_.height(), |
| child_bounds.height())); |
| - AdjustSnappedBounds(window_state, &child_bounds); |
| + window_state->AdjustSnappedBounds(&child_bounds); |
| SetChildBoundsDirect(child, child_bounds); |
| } |
| UpdateShelfVisibility(); |
| @@ -252,37 +207,9 @@ void WorkspaceLayoutManager::OnWindowActivated(aura::Window* gained_active, |
| ////////////////////////////////////////////////////////////////////////////// |
| // WorkspaceLayoutManager, wm::WindowStateObserver implementation: |
| -void WorkspaceLayoutManager::OnWindowShowTypeChanged( |
| +void WorkspaceLayoutManager::OnPostWindowShowTypeChange( |
| wm::WindowState* window_state, |
| wm::WindowShowType old_type) { |
| - if (old_type != wm::SHOW_TYPE_MINIMIZED && |
| - !window_state->HasRestoreBounds() && |
| - window_state->IsMaximizedOrFullscreen() && |
| - !wm::IsMaximizedOrFullscreenWindowShowType(old_type)) { |
| - window_state->SaveCurrentBoundsForRestore(); |
| - } |
| - // When restoring from a minimized state, we want to restore to the previous |
| - // bounds. However, we want to maintain the restore bounds. (The restore |
| - // bounds are set if a user maximized the window in one axis by double |
| - // clicking the window border for example). |
| - gfx::Rect restore; |
| - if (old_type == wm::SHOW_TYPE_MINIMIZED && |
| - window_state->IsNormalShowState() && |
| - window_state->HasRestoreBounds() && |
| - !window_state->unminimize_to_restore_bounds()) { |
| - restore = window_state->GetRestoreBoundsInScreen(); |
| - window_state->SaveCurrentBoundsForRestore(); |
| - } |
| - |
| - UpdateBoundsFromShowType(window_state, old_type); |
| - ShowTypeChanged(window_state, old_type); |
| - |
| - if (window_state->IsNormalShowState()) |
| - window_state->ClearRestoreBounds(); |
| - |
| - // Set the restore rectangle to the previously set restore rectangle. |
| - if (!restore.IsEmpty()) |
| - window_state->SetRestoreBoundsInScreen(restore); |
| // Notify observers that fullscreen state may be changing. |
| if (window_state->IsFullscreen() || old_type == wm::SHOW_TYPE_FULLSCREEN) |
| @@ -291,37 +218,6 @@ void WorkspaceLayoutManager::OnWindowShowTypeChanged( |
| UpdateShelfVisibility(); |
| } |
| -void WorkspaceLayoutManager::ShowTypeChanged( |
| - wm::WindowState* window_state, |
| - wm::WindowShowType last_show_type) { |
|
pkotwicz
2014/02/12 05:10:00
For the sake of this CL, it makes sense to keep Wo
oshima
2014/02/12 14:08:33
Thank you for the catch. I added panel check in De
|
| - if (window_state->IsMinimized()) { |
| - if (last_show_type == wm::SHOW_TYPE_MINIMIZED) |
| - return; |
| - |
| - // Save the previous show state so that we can correctly restore it. |
| - window_state->window()->SetProperty(aura::client::kRestoreShowStateKey, |
| - wm::ToWindowShowState(last_show_type)); |
| - views::corewm::SetWindowVisibilityAnimationType( |
| - window_state->window(), WINDOW_VISIBILITY_ANIMATION_TYPE_MINIMIZE); |
| - |
| - // Hide the window. |
| - window_state->window()->Hide(); |
| - // Activate another window. |
| - if (window_state->IsActive()) |
| - window_state->Deactivate(); |
| - } else if ((window_state->window()->TargetVisibility() || |
| - last_show_type == wm::SHOW_TYPE_MINIMIZED) && |
| - !window_state->window()->layer()->visible()) { |
| - // The layer may be hidden if the window was previously minimized. Make |
| - // sure it's visible. |
| - window_state->window()->Show(); |
| - if (last_show_type == wm::SHOW_TYPE_MINIMIZED && |
| - !window_state->IsMaximizedOrFullscreen()) { |
| - window_state->set_unminimize_to_restore_bounds(false); |
| - } |
| - } |
| -} |
| - |
| ////////////////////////////////////////////////////////////////////////////// |
| // WorkspaceLayoutManager, private: |
| @@ -383,9 +279,9 @@ void WorkspaceLayoutManager::AdjustWindowBoundsForWorkAreaChange( |
| work_area_in_parent_, &bounds); |
| break; |
| } |
| - AdjustSnappedBounds(window_state, &bounds); |
| + window_state->AdjustSnappedBounds(&bounds); |
| if (window_state->window()->bounds() != bounds) |
| - SetChildBoundsAnimated(window_state->window(), bounds); |
| + window_state->SetBoundsDirectAnimated(bounds); |
| } |
| void WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded( |
| @@ -414,7 +310,7 @@ void WorkspaceLayoutManager::AdjustWindowBoundsWhenAdded( |
| int min_height = bounds.height() * kMinimumPercentOnScreenArea; |
| ash::wm::AdjustBoundsToEnsureWindowVisibility( |
| display_area, min_width, min_height, &bounds); |
| - AdjustSnappedBounds(window_state, &bounds); |
| + window_state->AdjustSnappedBounds(&bounds); |
| if (window->bounds() != bounds) |
| window->SetBounds(bounds); |
| } |
| @@ -434,66 +330,6 @@ void WorkspaceLayoutManager::UpdateFullscreenState() { |
| } |
| } |
| -void WorkspaceLayoutManager::UpdateBoundsFromShowType( |
| - wm::WindowState* window_state, |
| - wm::WindowShowType old_show_type) { |
| - aura::Window* window = window_state->window(); |
| - if (window_state->IsMaximizedOrFullscreen()) |
| - MoveToDisplayForRestore(window_state); |
| - |
| - wm::WindowShowType show_type = window_state->window_show_type(); |
| - gfx::Rect bounds_in_parent; |
| - switch (show_type) { |
| - case wm::SHOW_TYPE_DEFAULT: |
| - case wm::SHOW_TYPE_NORMAL: |
| - case wm::SHOW_TYPE_LEFT_SNAPPED: |
| - case wm::SHOW_TYPE_RIGHT_SNAPPED: |
| - if (window_state->HasRestoreBounds()) |
| - bounds_in_parent = window_state->GetRestoreBoundsInParent(); |
| - else |
| - bounds_in_parent = window->bounds(); |
| - // Make sure that part of the window is always visible. |
| - wm::AdjustBoundsToEnsureMinimumWindowVisibility( |
| - work_area_in_parent_, &bounds_in_parent); |
| - |
| - if (show_type == wm::SHOW_TYPE_LEFT_SNAPPED || |
| - show_type == wm::SHOW_TYPE_RIGHT_SNAPPED) { |
| - AdjustSnappedBounds(window_state, &bounds_in_parent); |
| - } else { |
| - bounds_in_parent = BoundsWithScreenEdgeVisible( |
| - window, |
| - bounds_in_parent); |
| - } |
| - break; |
| - |
| - case wm::SHOW_TYPE_MAXIMIZED: |
| - bounds_in_parent = ScreenUtil::GetMaximizedWindowBoundsInParent(window); |
| - break; |
| - |
| - case wm::SHOW_TYPE_FULLSCREEN: |
| - bounds_in_parent = ScreenUtil::GetDisplayBoundsInParent(window); |
| - break; |
| - |
| - case wm::SHOW_TYPE_MINIMIZED: |
| - case wm::SHOW_TYPE_INACTIVE: |
| - case wm::SHOW_TYPE_DETACHED: |
| - case wm::SHOW_TYPE_END: |
| - case wm::SHOW_TYPE_AUTO_POSITIONED: |
| - return; |
| - } |
| - |
| - if (old_show_type == wm::SHOW_TYPE_MINIMIZED || |
| - (window_state->IsFullscreen() && |
| - !window_state->animate_to_fullscreen())) { |
| - SetChildBoundsDirect(window, bounds_in_parent); |
| - } else if (window_state->IsMaximizedOrFullscreen() || |
| - IsMaximizedOrFullscreenWindowShowType(old_show_type)) { |
| - CrossFadeToBounds(window, bounds_in_parent); |
| - } else { |
| - SetChildBoundsAnimated(window, bounds_in_parent); |
| - } |
| -} |
| - |
| bool WorkspaceLayoutManager::SetMaximizedOrFullscreenBounds( |
| wm::WindowState* window_state) { |
| DCHECK(!window_state->is_dragged()); |
| @@ -513,33 +349,5 @@ bool WorkspaceLayoutManager::SetMaximizedOrFullscreenBounds( |
| return false; |
| } |
| -void WorkspaceLayoutManager::AdjustSnappedBounds(wm::WindowState* window_state, |
| - gfx::Rect* bounds) { |
| - if (window_state->is_dragged() || !window_state->IsSnapped()) |
| - return; |
| - gfx::Rect maximized_bounds = ScreenUtil::GetMaximizedWindowBoundsInParent( |
| - window_state->window()); |
| - if (window_state->window_show_type() == wm::SHOW_TYPE_LEFT_SNAPPED) |
| - bounds->set_x(maximized_bounds.x()); |
| - else if (window_state->window_show_type() == wm::SHOW_TYPE_RIGHT_SNAPPED) |
| - bounds->set_x(maximized_bounds.right() - bounds->width()); |
| - bounds->set_y(maximized_bounds.y()); |
| - // TODO(varkha): Set width to 50% here for snapped windows. |
| - bounds->set_height(maximized_bounds.height()); |
| -} |
| - |
| -void WorkspaceLayoutManager::SetChildBoundsAnimated(Window* child, |
| - const gfx::Rect& bounds) { |
| - const int kBoundsChangeSlideDurationMs = 120; |
| - |
| - ui::Layer* layer = child->layer(); |
| - ui::ScopedLayerAnimationSettings slide_settings(layer->GetAnimator()); |
| - slide_settings.SetPreemptionStrategy( |
| - ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET); |
| - slide_settings.SetTransitionDuration( |
| - base::TimeDelta::FromMilliseconds(kBoundsChangeSlideDurationMs)); |
| - SetChildBoundsDirect(child, bounds); |
| -} |
| - |
| } // namespace internal |
| } // namespace ash |