| Index: athena/wm/window_overview_mode.cc
|
| diff --git a/athena/wm/window_overview_mode.cc b/athena/wm/window_overview_mode.cc
|
| index 080567f3b50ccf57e5e16aa03dc090e46f8fd5f5..b34991cf82d7a7341ac17c77d016f1cda20e0dc9 100644
|
| --- a/athena/wm/window_overview_mode.cc
|
| +++ b/athena/wm/window_overview_mode.cc
|
| @@ -28,6 +28,7 @@
|
| #include "ui/gfx/frame_time.h"
|
| #include "ui/gfx/transform.h"
|
| #include "ui/wm/core/shadow_types.h"
|
| +#include "ui/wm/core/window_util.h"
|
|
|
| namespace {
|
|
|
| @@ -67,14 +68,32 @@ void SetWindowProgress(aura::Window* window, float progress) {
|
| window->SetTransform(GetTransformForState(state));
|
| }
|
|
|
| +void HideWindowIfNotVisible(aura::Window* window,
|
| + SplitViewController* split_view_controller) {
|
| + bool should_hide = true;
|
| + if (split_view_controller->IsSplitViewModeActive()) {
|
| + should_hide = window != split_view_controller->left_window() &&
|
| + window != split_view_controller->right_window();
|
| + } else {
|
| + should_hide = !wm::IsActiveWindow(window);
|
| + }
|
| + if (should_hide)
|
| + window->Hide();
|
| +}
|
| +
|
| // Resets the overview-related state for |window|.
|
| -void RestoreWindowState(aura::Window* window) {
|
| +void RestoreWindowState(aura::Window* window,
|
| + SplitViewController* split_view_controller) {
|
| window->ClearProperty(kWindowOverviewState);
|
|
|
| ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
|
| settings.SetPreemptionStrategy(
|
| ui::LayerAnimator::IMMEDIATELY_ANIMATE_TO_NEW_TARGET);
|
| settings.SetTransitionDuration(base::TimeDelta::FromMilliseconds(250));
|
| +
|
| + settings.AddObserver(new ui::ClosureAnimationObserver(
|
| + base::Bind(&HideWindowIfNotVisible, window, split_view_controller)));
|
| +
|
| window->SetTransform(gfx::Transform());
|
| wm::SetShadowType(window, wm::SHADOW_TYPE_NONE);
|
| }
|
| @@ -112,22 +131,16 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| WindowOverviewModeDelegate* delegate)
|
| : container_(container),
|
| window_list_provider_(window_list_provider),
|
| + split_view_controller_(split_view_controller),
|
| delegate_(delegate),
|
| scoped_targeter_(new aura::ScopedWindowTargeter(
|
| container,
|
| scoped_ptr<ui::EventTargeter>(
|
| new StaticWindowTargeter(container)))),
|
| - dragged_window_(NULL),
|
| - split_({false, NULL, NULL}) {
|
| + dragged_window_(NULL) {
|
| CHECK(delegate_);
|
| container_->set_target_handler(this);
|
|
|
| - split_.enabled = split_view_controller->IsSplitViewModeActive();
|
| - if (split_.enabled) {
|
| - split_.left = split_view_controller->left_window();
|
| - split_.right = split_view_controller->right_window();
|
| - }
|
| -
|
| // Prepare the desired transforms for all the windows, and set the initial
|
| // state on the windows.
|
| ComputeTerminalStatesForAllWindows();
|
| @@ -140,7 +153,9 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| aura::Window::Windows windows = window_list_provider_->GetWindowList();
|
| if (windows.empty())
|
| return;
|
| - std::for_each(windows.begin(), windows.end(), &RestoreWindowState);
|
| + std::for_each(windows.begin(), windows.end(),
|
| + std::bind2nd(std::ptr_fun(&RestoreWindowState),
|
| + split_view_controller_));
|
| }
|
|
|
| private:
|
| @@ -159,7 +174,9 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
|
|
| WindowOverviewState* state = new WindowOverviewState;
|
| window->SetProperty(kWindowOverviewState, state);
|
| - if (split_.enabled && (window == split_.left || window == split_.right)) {
|
| + if (split_view_controller_->IsSplitViewModeActive() &&
|
| + (window == split_view_controller_->left_window() ||
|
| + window == split_view_controller_->right_window())) {
|
| // Do not let the left/right windows be scrolled.
|
| int x_translate = window->bounds().width() * (1 - kMaxScale) / 2;
|
| state->top.Translate(x_translate, window->bounds().height() * 0.65);
|
| @@ -212,7 +229,9 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| ++iter) {
|
| float progress = 0.f;
|
| aura::Window* window = *iter;
|
| - if (split_.enabled && (window == split_.left || window == split_.right)) {
|
| + if (split_view_controller_->IsSplitViewModeActive() &&
|
| + (window == split_view_controller_->left_window() ||
|
| + window == split_view_controller_->right_window())) {
|
| progress = 1;
|
| } else {
|
| if (index < arraysize(kInitialProgress))
|
| @@ -300,8 +319,9 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| int GetScrollableHeight() const {
|
| const float kScrollableFraction = 0.65f;
|
| const float kScrollableFractionInSplit = 0.5f;
|
| - const float fraction =
|
| - split_.enabled ? kScrollableFractionInSplit : kScrollableFraction;
|
| + const float fraction = split_view_controller_->IsSplitViewModeActive()
|
| + ? kScrollableFractionInSplit
|
| + : kScrollableFraction;
|
| return container_->bounds().height() * fraction;
|
| }
|
|
|
| @@ -471,13 +491,15 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| }
|
|
|
| void SelectWindow(aura::Window* window) {
|
| - if (!split_.enabled) {
|
| + if (!split_view_controller_->IsSplitViewModeActive()) {
|
| delegate_->OnSelectWindow(window);
|
| } else {
|
| // If the selected window is one of the left/right windows, then keep the
|
| // current state.
|
| - if (window == split_.left || window == split_.right) {
|
| - delegate_->OnSplitViewMode(split_.left, split_.right);
|
| + if (window == split_view_controller_->left_window() ||
|
| + window == split_view_controller_->right_window()) {
|
| + delegate_->OnSplitViewMode(split_view_controller_->left_window(),
|
| + split_view_controller_->right_window());
|
| } else {
|
| delegate_->OnSelectWindow(window);
|
| }
|
| @@ -568,6 +590,8 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| aura::Window* container_;
|
| // Provider of the stack of windows to show in the overview mode. Not owned.
|
| const WindowListProvider* window_list_provider_;
|
| + SplitViewController* split_view_controller_;
|
| +
|
| WindowOverviewModeDelegate* delegate_;
|
| scoped_ptr<aura::ScopedWindowTargeter> scoped_targeter_;
|
| scoped_ptr<ui::FlingCurve> fling_;
|
| @@ -576,12 +600,6 @@ class WindowOverviewModeImpl : public WindowOverviewMode,
|
| gfx::Point dragged_start_location_;
|
| scoped_ptr<OverviewToolbar> overview_toolbar_;
|
|
|
| - struct {
|
| - bool enabled;
|
| - aura::Window* left;
|
| - aura::Window* right;
|
| - } split_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(WindowOverviewModeImpl);
|
| };
|
|
|
|
|