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

Side by Side Diff: athena/wm/split_view_controller.cc

Issue 574113004: [Athena] Fix switching activities by swiping from the right bezel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@athena_split
Patch Set: Created 6 years, 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "athena/wm/split_view_controller.h" 5 #include "athena/wm/split_view_controller.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "athena/screen/public/screen_manager.h" 9 #include "athena/screen/public/screen_manager.h"
10 #include "athena/wm/public/window_list_provider.h" 10 #include "athena/wm/public/window_list_provider.h"
11 #include "athena/wm/public/window_manager.h" 11 #include "athena/wm/public/window_manager.h"
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "ui/aura/window.h" 13 #include "ui/aura/window.h"
14 #include "ui/compositor/closure_animation_observer.h" 14 #include "ui/compositor/closure_animation_observer.h"
15 #include "ui/compositor/layer_animation_observer.h" 15 #include "ui/compositor/layer_animation_observer.h"
16 #include "ui/compositor/scoped_layer_animation_settings.h" 16 #include "ui/compositor/scoped_layer_animation_settings.h"
17 #include "ui/events/event_handler.h" 17 #include "ui/events/event_handler.h"
18 #include "ui/gfx/display.h" 18 #include "ui/gfx/display.h"
19 #include "ui/gfx/screen.h" 19 #include "ui/gfx/screen.h"
20 #include "ui/wm/core/window_util.h" 20 #include "ui/wm/core/window_util.h"
21 #include "ui/wm/public/activation_client.h"
21 22
22 namespace athena { 23 namespace athena {
23 24
24 namespace { 25 namespace {
25 26
26 // Returns a target transform which is suitable for animating a windows's 27 // Returns a target transform which is suitable for animating a windows's
27 // bounds. 28 // bounds.
28 gfx::Transform GetTargetTransformForBoundsAnimation(const gfx::Rect& from, 29 gfx::Transform GetTargetTransformForBoundsAnimation(const gfx::Rect& from,
29 const gfx::Rect& to) { 30 const gfx::Rect& to) {
30 gfx::Transform transform; 31 gfx::Transform transform;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 window_list_provider_->GetWindowList().size() >= 2 && 63 window_list_provider_->GetWindowList().size() >= 2 &&
63 IsLandscapeOrientation(gfx::Screen::GetNativeScreen()-> 64 IsLandscapeOrientation(gfx::Screen::GetNativeScreen()->
64 GetDisplayNearestWindow(container_).rotation())); 65 GetDisplayNearestWindow(container_).rotation()));
65 } 66 }
66 67
67 bool SplitViewController::IsSplitViewModeActive() const { 68 bool SplitViewController::IsSplitViewModeActive() const {
68 return state_ == ACTIVE; 69 return state_ == ACTIVE;
69 } 70 }
70 71
71 void SplitViewController::ActivateSplitMode(aura::Window* left, 72 void SplitViewController::ActivateSplitMode(aura::Window* left,
72 aura::Window* right) { 73 aura::Window* right,
74 aura::Window* to_activate) {
73 const aura::Window::Windows& windows = window_list_provider_->GetWindowList(); 75 const aura::Window::Windows& windows = window_list_provider_->GetWindowList();
74 aura::Window::Windows::const_reverse_iterator iter = windows.rbegin(); 76 aura::Window::Windows::const_reverse_iterator iter = windows.rbegin();
75 if (state_ == ACTIVE) { 77 if (state_ == ACTIVE) {
76 if (!left && left_window_ != right) 78 if (!left && left_window_ != right)
77 left = left_window_; 79 left = left_window_;
78 if (!right && right_window_ != left) 80 if (!right && right_window_ != left)
79 right = right_window_; 81 right = right_window_;
80 } 82 }
81 83
82 if (!left && iter != windows.rend()) { 84 if (!left && iter != windows.rend()) {
(...skipping 13 matching lines...) Expand all
96 iter++; 98 iter++;
97 } 99 }
98 } 100 }
99 101
100 to_hide_.clear(); 102 to_hide_.clear();
101 if (left_window_ && left_window_ != left && left_window_ != right) 103 if (left_window_ && left_window_ != left && left_window_ != right)
102 to_hide_.push_back(left_window_); 104 to_hide_.push_back(left_window_);
103 if (right_window_ && right_window_ != left && right_window_ != right) 105 if (right_window_ && right_window_ != left && right_window_ != right)
104 to_hide_.push_back(right_window_); 106 to_hide_.push_back(right_window_);
105 107
108 left_window_ = left;
109 right_window_ = right;
110
106 SetState(ACTIVE); 111 SetState(ACTIVE);
107 right_window_ = right;
108 left_window_ = left;
109 UpdateLayout(true); 112 UpdateLayout(true);
113
114 if (to_activate)
pkotwicz 2014/09/19 21:58:00 I am activating the window after calling UpdateLay
115 wm::ActivateWindow(to_activate);
116
117 aura::client::ActivationClient* activation_client =
118 aura::client::GetActivationClient(container_->GetRootWindow());
119 aura::Window* active_window = activation_client->GetActiveWindow();
120
121 if (active_window == left_window_) {
122 window_list_provider_->StackWindowBehindTo(right_window_, left_window_);
123 } else {
124 DCHECK_EQ(active_window, right_window_);
mfomitchev 2014/09/22 18:04:24 I'd actually make it into a CHECK for now so that
pkotwicz 2014/09/22 18:30:24 Done.
125 window_list_provider_->StackWindowBehindTo(left_window_, right_window_);
126 }
110 } 127 }
111 128
112 void SplitViewController::ReplaceWindow(aura::Window* window, 129 void SplitViewController::ReplaceWindow(aura::Window* window,
113 aura::Window* replace_with) { 130 aura::Window* replace_with) {
114 CHECK(IsSplitViewModeActive()); 131 CHECK(IsSplitViewModeActive());
115 CHECK(replace_with); 132 CHECK(replace_with);
116 CHECK(window == left_window_ || window == right_window_); 133 CHECK(window == left_window_ || window == right_window_);
117 CHECK(replace_with != left_window_ && replace_with != right_window_); 134 CHECK(replace_with != left_window_ && replace_with != right_window_);
118 DCHECK(window_list_provider_->IsWindowInList(replace_with)); 135 DCHECK(window_list_provider_->IsWindowInList(replace_with));
119 136
120 if (window == left_window_) 137 aura::Window* not_replaced = NULL;
138 if (window == left_window_) {
121 left_window_ = replace_with; 139 left_window_ = replace_with;
122 else 140 not_replaced = right_window_;
141 } else {
123 right_window_ = replace_with; 142 right_window_ = replace_with;
143 not_replaced = left_window_;
144 }
145 UpdateLayout(false);
146
124 wm::ActivateWindow(replace_with); 147 wm::ActivateWindow(replace_with);
125 UpdateLayout(false); 148 window_list_provider_->StackWindowBehindTo(not_replaced, replace_with);
149
126 window->SetTransform(gfx::Transform()); 150 window->SetTransform(gfx::Transform());
127 window->Hide(); 151 window->Hide();
128 } 152 }
129 153
130 void SplitViewController::DeactivateSplitMode() { 154 void SplitViewController::DeactivateSplitMode() {
131 CHECK_EQ(ACTIVE, state_); 155 CHECK_EQ(ACTIVE, state_);
132 SetState(INACTIVE); 156 SetState(INACTIVE);
133 UpdateLayout(false); 157 UpdateLayout(false);
134 left_window_ = right_window_ = NULL; 158 left_window_ = right_window_ = NULL;
135 } 159 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 if (!wm::IsActiveWindow(left_window_)) 191 if (!wm::IsActiveWindow(left_window_))
168 left_window_->Hide(); 192 left_window_->Hide();
169 if (!wm::IsActiveWindow(right_window_)) 193 if (!wm::IsActiveWindow(right_window_))
170 right_window_->Hide(); 194 right_window_->Hide();
171 SetWindowTransforms(gfx::Transform(), gfx::Transform(), false); 195 SetWindowTransforms(gfx::Transform(), gfx::Transform(), false);
172 return; 196 return;
173 } 197 }
174 198
175 left_window_->Show(); 199 left_window_->Show();
176 right_window_->Show(); 200 right_window_->Show();
177 window_list_provider_->MoveToFront(right_window_);
178 window_list_provider_->MoveToFront(left_window_);
179 201
180 if (state_ == ACTIVE) { 202 if (state_ == ACTIVE) {
181 if (animate) { 203 if (animate) {
182 gfx::Transform left_transform = GetTargetTransformForBoundsAnimation( 204 gfx::Transform left_transform = GetTargetTransformForBoundsAnimation(
183 left_window_->bounds(), GetLeftTargetBounds()); 205 left_window_->bounds(), GetLeftTargetBounds());
184 gfx::Transform right_transform = GetTargetTransformForBoundsAnimation( 206 gfx::Transform right_transform = GetTargetTransformForBoundsAnimation(
185 right_window_->bounds(), GetRightTargetBounds()); 207 right_window_->bounds(), GetRightTargetBounds());
186 SetWindowTransforms(left_transform, right_transform, true); 208 SetWindowTransforms(left_transform, right_transform, true);
187 } else { 209 } else {
188 left_window_->SetBounds(GetLeftTargetBounds()); 210 left_window_->SetBounds(GetLeftTargetBounds());
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
313 return; 335 return;
314 UpdateSeparatorPositionFromScrollDelta(delta); 336 UpdateSeparatorPositionFromScrollDelta(delta);
315 UpdateLayout(false); 337 UpdateLayout(false);
316 } 338 }
317 339
318 bool SplitViewController::CanScroll() { 340 bool SplitViewController::CanScroll() {
319 return CanActivateSplitViewMode(); 341 return CanActivateSplitViewMode();
320 } 342 }
321 343
322 } // namespace athena 344 } // namespace athena
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698