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

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 (rebase) Created 7 years 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
« no previous file with comments | « ash/wm/window_animations.h ('k') | chrome/browser/ui/views/tabs/tab_drag_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 303 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 // |pause_duration| is the duration to pause at the current bounds before 314 // |pause_duration| is the duration to pause at the current bounds before
315 // animating. Returns the duration of the fade. 315 // animating. Returns the duration of the fade.
316 base::TimeDelta CrossFadeImpl(aura::Window* window, 316 base::TimeDelta CrossFadeImpl(aura::Window* window,
317 ui::Layer* old_layer, 317 ui::Layer* old_layer,
318 gfx::Tween::Type tween_type) { 318 gfx::Tween::Type tween_type) {
319 const gfx::Rect old_bounds(old_layer->bounds()); 319 const gfx::Rect old_bounds(old_layer->bounds());
320 const gfx::Rect new_bounds(window->bounds()); 320 const gfx::Rect new_bounds(window->bounds());
321 const bool old_on_top = (old_bounds.width() > new_bounds.width()); 321 const bool old_on_top = (old_bounds.width() > new_bounds.width());
322 322
323 // Shorten the animation if there's not much visual movement. 323 // Shorten the animation if there's not much visual movement.
324 const base::TimeDelta duration = GetCrossFadeDuration(old_bounds, new_bounds); 324 const base::TimeDelta duration = GetCrossFadeDuration(window,
325 old_bounds, new_bounds);
325 326
326 // Scale up the old layer while translating to new position. 327 // Scale up the old layer while translating to new position.
327 { 328 {
328 old_layer->GetAnimator()->StopAnimating(); 329 old_layer->GetAnimator()->StopAnimating();
329 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator()); 330 ui::ScopedLayerAnimationSettings settings(old_layer->GetAnimator());
330 331
331 // Animation observer owns the old layer and deletes itself. 332 // Animation observer owns the old layer and deletes itself.
332 settings.AddObserver(new CrossFadeObserver(window, old_layer)); 333 settings.AddObserver(new CrossFadeObserver(window, old_layer));
333 settings.SetTransitionDuration(duration); 334 settings.SetTransitionDuration(duration);
334 settings.SetTweenType(tween_type); 335 settings.SetTweenType(tween_type);
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 // Ensure the higher-resolution layer is on top. 407 // Ensure the higher-resolution layer is on top.
407 bool old_on_top = (old_bounds.width() > new_bounds.width()); 408 bool old_on_top = (old_bounds.width() > new_bounds.width());
408 if (old_on_top) 409 if (old_on_top)
409 old_layer->parent()->StackBelow(new_layer, old_layer); 410 old_layer->parent()->StackBelow(new_layer, old_layer);
410 else 411 else
411 old_layer->parent()->StackAbove(new_layer, old_layer); 412 old_layer->parent()->StackAbove(new_layer, old_layer);
412 413
413 CrossFadeImpl(window, old_layer, gfx::Tween::EASE_OUT); 414 CrossFadeImpl(window, old_layer, gfx::Tween::EASE_OUT);
414 } 415 }
415 416
416 base::TimeDelta GetCrossFadeDuration(const gfx::Rect& old_bounds, 417 base::TimeDelta GetCrossFadeDuration(aura::Window* window,
418 const gfx::Rect& old_bounds,
417 const gfx::Rect& new_bounds) { 419 const gfx::Rect& new_bounds) {
418 if (views::corewm::WindowAnimationsDisabled(NULL)) 420 if (views::corewm::WindowAnimationsDisabled(window))
419 return base::TimeDelta(); 421 return base::TimeDelta();
420 422
421 int old_area = old_bounds.width() * old_bounds.height(); 423 int old_area = old_bounds.width() * old_bounds.height();
422 int new_area = new_bounds.width() * new_bounds.height(); 424 int new_area = new_bounds.width() * new_bounds.height();
423 int max_area = std::max(old_area, new_area); 425 int max_area = std::max(old_area, new_area);
424 // Avoid divide by zero. 426 // Avoid divide by zero.
425 if (max_area == 0) 427 if (max_area == 0)
426 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS); 428 return base::TimeDelta::FromMilliseconds(kCrossFadeDurationMS);
427 429
428 int delta_area = std::abs(old_area - new_area); 430 int delta_area = std::abs(old_area - new_area);
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
536 } 538 }
537 539
538 // Assume the launcher is overflowed, zoom off to the bottom right of the 540 // Assume the launcher is overflowed, zoom off to the bottom right of the
539 // work area. 541 // work area.
540 gfx::Rect work_area = 542 gfx::Rect work_area =
541 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area(); 543 Shell::GetScreen()->GetDisplayNearestWindow(window).work_area();
542 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0); 544 return gfx::Rect(work_area.right(), work_area.bottom(), 0, 0);
543 } 545 }
544 546
545 } // namespace ash 547 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/window_animations.h ('k') | chrome/browser/ui/views/tabs/tab_drag_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698