| Index: ash/wm/compact_layout_manager.cc
|
| diff --git a/ash/wm/compact_layout_manager.cc b/ash/wm/compact_layout_manager.cc
|
| deleted file mode 100644
|
| index 9e659349062ac2474b77e3afadcb6ffba0a60efa..0000000000000000000000000000000000000000
|
| --- a/ash/wm/compact_layout_manager.cc
|
| +++ /dev/null
|
| @@ -1,256 +0,0 @@
|
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "ash/wm/compact_layout_manager.h"
|
| -
|
| -#include <vector>
|
| -
|
| -#include "ash/shell.h"
|
| -#include "ash/shell_delegate.h"
|
| -#include "ash/shell_window_ids.h"
|
| -#include "ash/wm/window_util.h"
|
| -#include "ui/aura/client/aura_constants.h"
|
| -#include "ui/aura/window.h"
|
| -#include "ui/gfx/compositor/layer.h"
|
| -#include "ui/gfx/compositor/layer_animation_sequence.h"
|
| -#include "ui/gfx/compositor/scoped_layer_animation_settings.h"
|
| -#include "ui/gfx/screen.h"
|
| -#include "ui/views/widget/widget.h"
|
| -
|
| -namespace ash {
|
| -namespace internal {
|
| -
|
| -namespace {
|
| -
|
| -typedef std::vector<aura::Window*> WindowList;
|
| -typedef std::vector<aura::Window*>::const_iterator WindowListConstIter;
|
| -
|
| -// Convenience method to get the layer of this container.
|
| -ui::Layer* GetDefaultContainerLayer() {
|
| - return Shell::GetInstance()->GetContainer(
|
| - internal::kShellWindowId_DefaultContainer)->layer();
|
| -}
|
| -
|
| -// Whether it is a window that should be animated on entrance.
|
| -bool ShouldAnimateOnEntrance(aura::Window* window) {
|
| - return window &&
|
| - window->type() == aura::client::WINDOW_TYPE_NORMAL &&
|
| - wm::IsWindowMaximized(window);
|
| -}
|
| -
|
| -// Adjust layer bounds to grow or shrink in |delta_width|.
|
| -void AdjustContainerLayerWidth(int delta_width) {
|
| - gfx::Rect bounds(GetDefaultContainerLayer()->bounds());
|
| - bounds.set_width(bounds.width() + delta_width);
|
| - GetDefaultContainerLayer()->SetBounds(bounds);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -/////////////////////////////////////////////////////////////////////////////
|
| -// CompactLayoutManager, public:
|
| -
|
| -CompactLayoutManager::CompactLayoutManager()
|
| - : status_area_widget_(NULL),
|
| - current_window_(NULL) {
|
| -}
|
| -
|
| -CompactLayoutManager::~CompactLayoutManager() {
|
| -}
|
| -
|
| -/////////////////////////////////////////////////////////////////////////////
|
| -// CompactLayoutManager, LayoutManager overrides:
|
| -
|
| -void CompactLayoutManager::OnWindowAddedToLayout(aura::Window* child) {
|
| - // Windows added to this container does not need extra animation.
|
| - if (child->type() == aura::client::WINDOW_TYPE_NORMAL)
|
| - child->SetProperty(aura::client::kAnimationsDisabledKey, true);
|
| - BaseLayoutManager::OnWindowAddedToLayout(child);
|
| - UpdateStatusAreaVisibility();
|
| - if (windows().size() > 1 &&
|
| - child->type() == aura::client::WINDOW_TYPE_NORMAL) {
|
| - // The first window is already contained in the current layer,
|
| - // add subsequent windows to layer bounds calculation.
|
| - AdjustContainerLayerWidth(child->bounds().width());
|
| - }
|
| -}
|
| -
|
| -void CompactLayoutManager::OnWillRemoveWindowFromLayout(aura::Window* child) {
|
| - BaseLayoutManager::OnWillRemoveWindowFromLayout(child);
|
| - UpdateStatusAreaVisibility();
|
| - if (windows().size() > 1 && ShouldAnimateOnEntrance(child))
|
| - AdjustContainerLayerWidth(-child->bounds().width());
|
| -
|
| - if (child == current_window_) {
|
| - LayoutWindows(current_window_);
|
| - SwitchToReplacementWindow();
|
| - }
|
| - // Allow window to be animated by others.
|
| - if (child->type() == aura::client::WINDOW_TYPE_NORMAL)
|
| - child->SetProperty(aura::client::kAnimationsDisabledKey, false);
|
| -}
|
| -
|
| -void CompactLayoutManager::OnChildWindowVisibilityChanged(aura::Window* child,
|
| - bool visible) {
|
| - BaseLayoutManager::OnChildWindowVisibilityChanged(child, visible);
|
| - UpdateStatusAreaVisibility();
|
| - if (ShouldAnimateOnEntrance(child)) {
|
| - LayoutWindows(visible ? NULL : child);
|
| - if (visible) {
|
| - current_window_ = child;
|
| - AnimateSlideTo(child->bounds().x());
|
| - } else if (child == current_window_) {
|
| - SwitchToReplacementWindow();
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CompactLayoutManager::SetChildBounds(aura::Window* child,
|
| - const gfx::Rect& requested_bounds) {
|
| - gfx::Rect child_bounds(requested_bounds);
|
| - // Avoid a janky resize on startup by ensuring the initial bounds fill the
|
| - // screen.
|
| - if (wm::IsWindowMaximized(child))
|
| - child_bounds = gfx::Screen::GetMonitorWorkAreaNearestWindow(child);
|
| - else if (wm::IsWindowFullscreen(child))
|
| - child_bounds = gfx::Screen::GetMonitorAreaNearestWindow(child);
|
| - else if (current_window_) {
|
| - // All other windows should be offset by the current viewport.
|
| - int offset_x = current_window_->bounds().x();
|
| - child_bounds.Offset(offset_x, 0);
|
| - }
|
| - SetChildBoundsDirect(child, child_bounds);
|
| -}
|
| -
|
| -/////////////////////////////////////////////////////////////////////////////
|
| -// CompactLayoutManager, aura::WindowObserver overrides:
|
| -
|
| -void CompactLayoutManager::OnWindowPropertyChanged(aura::Window* window,
|
| - const void* key,
|
| - intptr_t old) {
|
| - BaseLayoutManager::OnWindowPropertyChanged(window, key, old);
|
| - if (key == aura::client::kShowStateKey)
|
| - UpdateStatusAreaVisibility();
|
| -}
|
| -
|
| -void CompactLayoutManager::OnWindowStackingChanged(aura::Window* window) {
|
| - if (!current_window_ || ShouldAnimateOnEntrance(window)) {
|
| - if (current_window_ != window) {
|
| - LayoutWindows(current_window_);
|
| - current_window_ = window;
|
| - } else {
|
| - // Same window as |current_window_|, and already animating.
|
| - if (GetDefaultContainerLayer()->GetAnimator()->is_animating())
|
| - return;
|
| - }
|
| - // Animate to |window| when there is a stacking change.
|
| - AnimateSlideTo(window->bounds().x());
|
| - }
|
| -}
|
| -
|
| -/////////////////////////////////////////////////////////////////////////////
|
| -// CompactLayoutManager, AnimationDelegate overrides:
|
| -
|
| -void CompactLayoutManager::OnImplicitAnimationsCompleted() {
|
| - if (!GetDefaultContainerLayer()->GetAnimator()->is_animating())
|
| - HideWindows();
|
| -}
|
| -
|
| -//////////////////////////////////////////////////////////////////////////////
|
| -// CompactLayoutManager, private:
|
| -
|
| -void CompactLayoutManager::UpdateStatusAreaVisibility() {
|
| - if (!status_area_widget_)
|
| - return;
|
| - // Full screen windows should hide the status area widget.
|
| - bool has_fullscreen = wm::HasFullscreenWindow(windows());
|
| - bool widget_visible = status_area_widget_->IsVisible();
|
| - if (has_fullscreen && widget_visible)
|
| - status_area_widget_->Hide();
|
| - else if (!has_fullscreen && !widget_visible)
|
| - status_area_widget_->Show();
|
| -}
|
| -
|
| -void CompactLayoutManager::AnimateSlideTo(int offset_x) {
|
| - GetDefaultContainerLayer()->GetAnimator()->RemoveObserver(this);
|
| - ui::ScopedLayerAnimationSettings settings(
|
| - GetDefaultContainerLayer()->GetAnimator());
|
| - settings.AddObserver(this);
|
| - ui::Transform transform;
|
| - transform.ConcatTranslate(-offset_x, 0);
|
| - GetDefaultContainerLayer()->SetTransform(transform); // Will be animated!
|
| -}
|
| -
|
| -void CompactLayoutManager::LayoutWindows(aura::Window* skip) {
|
| - ShellDelegate* shell_delegate = ash::Shell::GetInstance()->delegate();
|
| - const WindowList& windows_list = shell_delegate->GetCycleWindowList(
|
| - ShellDelegate::SOURCE_KEYBOARD,
|
| - ShellDelegate::ORDER_LINEAR);
|
| - int new_x = 0;
|
| - for (WindowListConstIter const_it = windows_list.begin();
|
| - const_it != windows_list.end();
|
| - ++const_it) {
|
| - if (*const_it != skip) {
|
| - gfx::Rect new_bounds((*const_it)->bounds());
|
| - new_bounds.set_x(new_x);
|
| - SetChildBoundsDirect(*const_it, new_bounds);
|
| - (*const_it)->layer()->SetVisible(true);
|
| - new_x += (*const_it)->bounds().width();
|
| - }
|
| - }
|
| -}
|
| -
|
| -void CompactLayoutManager::HideWindows() {
|
| - // If we do not know which one is the current window, or if the current
|
| - // window is not visible, do not attempt to hide the windows.
|
| - if (current_window_ == NULL)
|
| - return;
|
| - // Current window should be visible, if not it is an error and we shouldn't
|
| - // proceed.
|
| - if (!current_window_->layer()->visible())
|
| - NOTREACHED() << "Current window is invisible";
|
| -
|
| - ShellDelegate* shell_delegate = ash::Shell::GetInstance()->delegate();
|
| - const WindowList& windows_list = shell_delegate->GetCycleWindowList(
|
| - ShellDelegate::SOURCE_KEYBOARD,
|
| - ShellDelegate::ORDER_LINEAR);
|
| - for (WindowListConstIter const_it = windows_list.begin();
|
| - const_it != windows_list.end();
|
| - ++const_it) {
|
| - if (*const_it != current_window_)
|
| - (*const_it)->layer()->SetVisible(false);
|
| - }
|
| -}
|
| -
|
| -aura::Window* CompactLayoutManager::FindReplacementWindow(
|
| - aura::Window* window) {
|
| - ShellDelegate* shell_delegate = ash::Shell::GetInstance()->delegate();
|
| - const WindowList& windows_list = shell_delegate->GetCycleWindowList(
|
| - ShellDelegate::SOURCE_KEYBOARD,
|
| - ShellDelegate::ORDER_LINEAR);
|
| - WindowListConstIter const_it = std::find(windows_list.begin(),
|
| - windows_list.end(),
|
| - window);
|
| - if (windows_list.size() > 1 && const_it != windows_list.end()) {
|
| - do {
|
| - ++const_it;
|
| - if (const_it == windows_list.end())
|
| - const_it = windows_list.begin();
|
| - } while (*const_it != window && !(*const_it)->IsVisible());
|
| - if (*const_it != window)
|
| - return *const_it;
|
| - }
|
| - return NULL;
|
| -}
|
| -
|
| -void CompactLayoutManager::SwitchToReplacementWindow() {
|
| - current_window_ = FindReplacementWindow(current_window_);
|
| - if (current_window_) {
|
| - wm::ActivateWindow(current_window_);
|
| - AnimateSlideTo(current_window_->bounds().x());
|
| - }
|
| -}
|
| -
|
| -} // namespace internal
|
| -} // namespace ash
|
|
|