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

Side by Side Diff: ash/wm/overview/scoped_transform_overview_window.cc

Issue 844763006: Change overview mode to so that docked panel windows are not grouped together. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Moved restore window animation out of the ScopedTransformOverviewWindow destructor. Created 5 years, 11 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "ash/wm/overview/scoped_transform_overview_window.h" 5 #include "ash/wm/overview/scoped_transform_overview_window.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <vector> 8 #include <vector>
9 9
10 #include "ash/screen_util.h" 10 #include "ash/screen_util.h"
11 #include "ash/shell_window_ids.h" 11 #include "ash/shell_window_ids.h"
12 #include "ash/wm/overview/scoped_overview_animation_settings.h" 12 #include "ash/wm/overview/scoped_overview_animation_settings.h"
13 #include "ash/wm/overview/scoped_window_copy.h"
14 #include "ash/wm/overview/window_selector_item.h" 13 #include "ash/wm/overview/window_selector_item.h"
15 #include "ash/wm/window_state.h" 14 #include "ash/wm/window_state.h"
16 #include "ash/wm/window_util.h" 15 #include "ash/wm/window_util.h"
17 #include "base/macros.h" 16 #include "base/macros.h"
18 #include "ui/aura/client/aura_constants.h" 17 #include "ui/aura/client/aura_constants.h"
19 #include "ui/aura/client/screen_position_client.h" 18 #include "ui/aura/client/screen_position_client.h"
20 #include "ui/aura/window.h" 19 #include "ui/aura/window.h"
21 #include "ui/compositor/scoped_layer_animation_settings.h" 20 #include "ui/compositor/scoped_layer_animation_settings.h"
22 #include "ui/gfx/animation/tween.h" 21 #include "ui/gfx/animation/tween.h"
23 #include "ui/gfx/transform_util.h" 22 #include "ui/gfx/transform_util.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 aura::Window* window) 167 aura::Window* window)
169 : window_(window), 168 : window_(window),
170 activate_button_(new TransparentActivateWindowButton( 169 activate_button_(new TransparentActivateWindowButton(
171 window_->GetRootWindow(), this)), 170 window_->GetRootWindow(), this)),
172 minimized_(window->GetProperty(aura::client::kShowStateKey) == 171 minimized_(window->GetProperty(aura::client::kShowStateKey) ==
173 ui::SHOW_STATE_MINIMIZED), 172 ui::SHOW_STATE_MINIMIZED),
174 ignored_by_shelf_(wm::GetWindowState(window)->ignored_by_shelf()), 173 ignored_by_shelf_(wm::GetWindowState(window)->ignored_by_shelf()),
175 overview_started_(false), 174 overview_started_(false),
176 original_transform_(window->layer()->GetTargetTransform()), 175 original_transform_(window->layer()->GetTargetTransform()),
177 original_opacity_(window->layer()->GetTargetOpacity()) { 176 original_opacity_(window->layer()->GetTargetOpacity()) {
177 DCHECK(window_);
178 } 178 }
179 179
180 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() { 180 ScopedTransformOverviewWindow::~ScopedTransformOverviewWindow() {
181 if (window_) { 181 }
182 ScopedAnimationSettings animation_settings_list;
183 BeginScopedAnimation(
184 OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
185 &animation_settings_list);
186 SetTransform(window()->GetRootWindow(), original_transform_);
187 182
188 ScopedOverviewAnimationSettings animation_settings( 183 void ScopedTransformOverviewWindow::RestoreWindow() {
189 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS, 184 ScopedAnimationSettings animation_settings_list;
190 window_); 185 BeginScopedAnimation(
191 gfx::Transform transform; 186 OverviewAnimationType::OVERVIEW_ANIMATION_RESTORE_WINDOW,
192 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) != 187 &animation_settings_list);
193 ui::SHOW_STATE_MINIMIZED) { 188 SetTransform(window()->GetRootWindow(), original_transform_);
194 // Setting opacity 0 and visible false ensures that the property change 189
195 // to SHOW_STATE_MINIMIZED will not animate the window from its original 190 ScopedOverviewAnimationSettings animation_settings(
196 // bounds to the minimized position. 191 OverviewAnimationType::OVERVIEW_ANIMATION_LAY_OUT_SELECTOR_ITEMS,
197 // Hiding the window needs to be done before the target opacity is 0, 192 window_);
198 // otherwise the layer's visibility will not be updated 193 gfx::Transform transform;
199 // (See VisibilityController::UpdateLayerVisibility). 194 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) !=
200 window_->Hide(); 195 ui::SHOW_STATE_MINIMIZED) {
201 window_->layer()->SetOpacity(0); 196 // Setting opacity 0 and visible false ensures that the property change
202 window_->SetProperty(aura::client::kShowStateKey, 197 // to SHOW_STATE_MINIMIZED will not animate the window from its original
203 ui::SHOW_STATE_MINIMIZED); 198 // bounds to the minimized position.
204 } 199 // Hiding the window needs to be done before the target opacity is 0,
205 wm::GetWindowState(window_)->set_ignored_by_shelf(ignored_by_shelf_); 200 // otherwise the layer's visibility will not be updated
206 SetOpacity(original_opacity_); 201 // (See VisibilityController::UpdateLayerVisibility).
202 window_->Hide();
203 window_->layer()->SetOpacity(0);
204 window_->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
207 } 205 }
206 wm::GetWindowState(window_)->set_ignored_by_shelf(ignored_by_shelf_);
207 SetOpacity(original_opacity_);
208 } 208 }
209 209
210 void ScopedTransformOverviewWindow::BeginScopedAnimation( 210 void ScopedTransformOverviewWindow::BeginScopedAnimation(
211 OverviewAnimationType animation_type, 211 OverviewAnimationType animation_type,
212 ScopedAnimationSettings* animation_settings) { 212 ScopedAnimationSettings* animation_settings) {
213 for (const auto& window : GetTransientTreeIterator(window_)) { 213 for (const auto& window : GetTransientTreeIterator(window_)) {
214 animation_settings->push_back( 214 animation_settings->push_back(
215 new ScopedOverviewAnimationSettings(animation_type, window)); 215 new ScopedOverviewAnimationSettings(animation_type, window));
216 } 216 }
217 } 217 }
218 218
219 bool ScopedTransformOverviewWindow::Contains(const aura::Window* target) const { 219 bool ScopedTransformOverviewWindow::Contains(const aura::Window* target) const {
220 for (const auto& window : GetTransientTreeIterator(window_)) { 220 for (const auto& window : GetTransientTreeIterator(window_)) {
221 if (window->Contains(target)) 221 if (window->Contains(target))
222 return true; 222 return true;
223 } 223 }
224 return false; 224 return false;
225 } 225 }
226 226
227 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const { 227 gfx::Rect ScopedTransformOverviewWindow::GetTargetBoundsInScreen() const {
228 gfx::Rect bounds; 228 gfx::Rect bounds;
229 for (const auto& window : GetTransientTreeIterator(window_)) { 229 for (const auto& window : GetTransientTreeIterator(window_)) {
230 bounds.Union(ScreenUtil::ConvertRectToScreen(window->parent(), 230 bounds.Union(ScreenUtil::ConvertRectToScreen(window->parent(),
231 window->GetTargetBounds())); 231 window->GetTargetBounds()));
232 } 232 }
233 return bounds; 233 return bounds;
234 } 234 }
235 235
236 void ScopedTransformOverviewWindow::RestoreWindow() { 236 void ScopedTransformOverviewWindow::ShowWindowIfMinimized() {
237 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) == 237 if (minimized_ && window_->GetProperty(aura::client::kShowStateKey) ==
238 ui::SHOW_STATE_MINIMIZED) { 238 ui::SHOW_STATE_MINIMIZED) {
239 window_->Show(); 239 window_->Show();
240 } 240 }
241 } 241 }
242 242
243 void ScopedTransformOverviewWindow::RestoreWindowOnExit() { 243 void ScopedTransformOverviewWindow::ShowWindowOnExit() {
244 minimized_ = false; 244 if (minimized_) {
245 original_transform_ = gfx::Transform(); 245 minimized_ = false;
246 original_opacity_ = kRestoreWindowOpacity; 246 original_transform_ = gfx::Transform();
247 } 247 original_opacity_ = kRestoreWindowOpacity;
248 248 }
249 void ScopedTransformOverviewWindow::OnWindowDestroyed() {
250 window_ = nullptr;
251 } 249 }
252 250
253 gfx::Rect ScopedTransformOverviewWindow::ShrinkRectToFitPreservingAspectRatio( 251 gfx::Rect ScopedTransformOverviewWindow::ShrinkRectToFitPreservingAspectRatio(
254 const gfx::Rect& rect, 252 const gfx::Rect& rect,
255 const gfx::Rect& bounds) { 253 const gfx::Rect& bounds) {
256 DCHECK(!rect.IsEmpty()); 254 DCHECK(!rect.IsEmpty());
257 DCHECK(!bounds.IsEmpty()); 255 DCHECK(!bounds.IsEmpty());
258 float scale = std::min(1.0f, 256 float scale = std::min(1.0f,
259 std::min(static_cast<float>(bounds.width()) / rect.width(), 257 std::min(static_cast<float>(bounds.width()) / rect.width(),
260 static_cast<float>(bounds.height()) / rect.height())); 258 static_cast<float>(bounds.height()) / rect.height()));
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 306
309 void ScopedTransformOverviewWindow::Close() { 307 void ScopedTransformOverviewWindow::Close() {
310 aura::Window* window = GetTransientRoot(window_); 308 aura::Window* window = GetTransientRoot(window_);
311 views::Widget::GetWidgetForNativeView(window)->Close(); 309 views::Widget::GetWidgetForNativeView(window)->Close();
312 } 310 }
313 311
314 void ScopedTransformOverviewWindow::PrepareForOverview() { 312 void ScopedTransformOverviewWindow::PrepareForOverview() {
315 DCHECK(!overview_started_); 313 DCHECK(!overview_started_);
316 overview_started_ = true; 314 overview_started_ = true;
317 wm::GetWindowState(window_)->set_ignored_by_shelf(true); 315 wm::GetWindowState(window_)->set_ignored_by_shelf(true);
318 RestoreWindow(); 316 ShowWindowIfMinimized();
319 } 317 }
320 318
321 } // namespace ash 319 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698