Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(116)

Unified Diff: ash/wm/compact_layout_manager.cc

Issue 9630002: Ash: Remove compact window mode. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: OpaqueBrowserFrameView, MultipleWindowIndicatorButton Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ash/wm/compact_layout_manager.h ('k') | ash/wm/compact_layout_manager_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « ash/wm/compact_layout_manager.h ('k') | ash/wm/compact_layout_manager_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698