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

Side by Side Diff: ash/wm/window_animations.cc

Issue 80323002: Restores maximized browser before dragging a tab (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Restores maximized browser before dragging a tab (no animations) Created 7 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/window_animations.h" 5 #include "ash/wm/window_animations.h"
6 6
7 #include <math.h> 7 #include <math.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <vector> 10 #include <vector>
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after
317 // |pause_duration| is the duration to pause at the current bounds before 317 // |pause_duration| is the duration to pause at the current bounds before
318 // animating. Returns the duration of the fade. 318 // animating. Returns the duration of the fade.
319 base::TimeDelta CrossFadeImpl(aura::Window* window, 319 base::TimeDelta CrossFadeImpl(aura::Window* window,
320 ui::Layer* old_layer, 320 ui::Layer* old_layer,
321 gfx::Tween::Type tween_type) { 321 gfx::Tween::Type tween_type) {
322 const gfx::Rect old_bounds(old_layer->bounds()); 322 const gfx::Rect old_bounds(old_layer->bounds());
323 const gfx::Rect new_bounds(window->bounds()); 323 const gfx::Rect new_bounds(window->bounds());
324 const bool old_on_top = (old_bounds.width() > new_bounds.width()); 324 const bool old_on_top = (old_bounds.width() > new_bounds.width());
325 325
326 // Shorten the animation if there's not much visual movement. 326 // Shorten the animation if there's not much visual movement.
327 const base::TimeDelta duration = GetCrossFadeDuration(old_bounds, new_bounds); 327 const base::TimeDelta duration = GetCrossFadeDuration(window,
328 old_bounds, new_bounds);
328 329
329 // Scale up the old layer while translating to new position. 330 // Scale up the old layer while translating to new position.
330 { 331 {
331 old_layer->GetAnimator()->StopAnimating(); 332 old_layer->GetAnimator()->StopAnimating();
332 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); 333 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator());
333 334
334 // Animation observer owns the old layer and deletes itself. 335 // Animation observer owns the old layer and deletes itself.
335 settings.AddObserver(new CrossFadeObserver(window, old_layer)); 336 settings.AddObserver(new CrossFadeObserver(window, old_layer));
336 settings.SetTransitionDuration(duration); 337 settings.SetTransitionDuration(duration);
337 settings.SetTweenType(tween_type); 338 settings.SetTweenType(tween_type);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 layer_parent->Add(old_layer); 424 layer_parent->Add(old_layer);
424 const bool restoring = old_layer->bounds().width() > window->bounds().width(); 425 const bool restoring = old_layer->bounds().width() > window->bounds().width();
425 if (restoring) 426 if (restoring)
426 layer_parent->StackAbove(old_layer, new_workspace->layer()); 427 layer_parent->StackAbove(old_layer, new_workspace->layer());
427 else 428 else
428 layer_parent->StackBelow(old_layer, new_workspace->layer()); 429 layer_parent->StackBelow(old_layer, new_workspace->layer());
429 430
430 CrossFadeImpl(window, old_layer, kCrossFadeTweenType); 431 CrossFadeImpl(window, old_layer, kCrossFadeTweenType);
431 } 432 }
432 433
433 base::TimeDelta GetCrossFadeDuration(const gfx::Rect& old_bounds, 434 base::TimeDelta GetCrossFadeDuration(aura::Window* window,
435 const gfx::Rect& old_bounds,
434 const gfx::Rect& new_bounds) { 436 const gfx::Rect& new_bounds) {
435 if (views::corewm::WindowAnimationsDisabled(NULL)) 437 if (views::corewm::WindowAnimationsDisabled(window))
436 return base::TimeDelta(); 438 return base::TimeDelta();
437 439
438 int old_area = old_bounds.width() * old_bounds.height(); 440 int old_area = old_bounds.width() * old_bounds.height();
439 int new_area = new_bounds.width() * new_bounds.height(); 441 int new_area = new_bounds.width() * new_bounds.height();
440 int max_area = std::max(old_area, new_area); 442 int max_area = std::max(old_area, new_area);
441 // Avoid divide by zero. 443 // Avoid divide by zero.
442 if (max_area == 0) 444 if (max_area == 0)
443 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); 445 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS);
444 446
445 int delta_area = std::abs(old_area - new_area); 447 int delta_area = std::abs(old_area - new_area);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
553 } 555 }
554 556
555 // Assume the launcher is overflowed, zoom off to the bottom right of the 557 // Assume the launcher is overflowed, zoom off to the bottom right of the
556 // work area. 558 // work area.
557 gfx::Rect work_area = 559 gfx::Rect work_area =
558 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); 560 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area();
559 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); 561 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0);
560 } 562 }
561 563
562 } // namespace ash 564 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698