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

Side by Side Diff: ui/views/corewm/window_animations.cc

Issue 105673008: Remove unneeded ScopedLayerAnimationSettings::LockTransitionDuration() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
« no previous file with comments | « ui/views/corewm/window_animations.h ('k') | no next file » | 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 "ui/views/corewm/window_animations.h" 5 #include "ui/views/corewm/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 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 49
50 namespace views { 50 namespace views {
51 namespace corewm { 51 namespace corewm {
52 namespace { 52 namespace {
53 const float kWindowAnimation_Vertical_TranslateY = 15.f; 53 const float kWindowAnimation_Vertical_TranslateY = 15.f;
54 } // namespace 54 } // namespace
55 55
56 DEFINE_WINDOW_PROPERTY_KEY(int, 56 DEFINE_WINDOW_PROPERTY_KEY(int,
57 kWindowVisibilityAnimationTypeKey, 57 kWindowVisibilityAnimationTypeKey,
58 WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT); 58 WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT);
59 DEFINE_WINDOW_PROPERTY_KEY(int, kWindowVisibilityAnimationDurationKey, 0); 59 DEFINE_WINDOW_PROPERTY_KEY(int, kWindowShowAnimationDurationKey, 0);
60 DEFINE_WINDOW_PROPERTY_KEY(int, kWindowHideAnimationDurationKey, 0);
60 DEFINE_WINDOW_PROPERTY_KEY(WindowVisibilityAnimationTransition, 61 DEFINE_WINDOW_PROPERTY_KEY(WindowVisibilityAnimationTransition,
61 kWindowVisibilityAnimationTransitionKey, 62 kWindowVisibilityAnimationTransitionKey,
62 ANIMATE_BOTH); 63 ANIMATE_BOTH);
63 DEFINE_WINDOW_PROPERTY_KEY(float, 64 DEFINE_WINDOW_PROPERTY_KEY(float,
64 kWindowVisibilityAnimationVerticalPositionKey, 65 kWindowVisibilityAnimationVerticalPositionKey,
65 kWindowAnimation_Vertical_TranslateY); 66 kWindowAnimation_Vertical_TranslateY);
66 67
67 namespace { 68 namespace {
68 69
70 const int kDefaultAnimationDurationMS = 200;
69 const int kDefaultAnimationDurationForMenuMS = 150; 71 const int kDefaultAnimationDurationForMenuMS = 150;
70 72
71 const float kWindowAnimation_HideOpacity = 0.f; 73 const float kWindowAnimation_HideOpacity = 0.f;
72 const float kWindowAnimation_ShowOpacity = 1.f; 74 const float kWindowAnimation_ShowOpacity = 1.f;
73 const float kWindowAnimation_TranslateFactor = 0.5f; 75 const float kWindowAnimation_TranslateFactor = 0.5f;
74 const float kWindowAnimation_ScaleFactor = .95f; 76 const float kWindowAnimation_ScaleFactor = .95f;
75 77
76 const int kWindowAnimation_Rotate_DurationMS = 180; 78 const int kWindowAnimation_Rotate_DurationMS = 180;
77 const int kWindowAnimation_Rotate_OpacityDurationPercent = 90; 79 const int kWindowAnimation_Rotate_OpacityDurationPercent = 90;
78 const float kWindowAnimation_Rotate_TranslateY = -20.f; 80 const float kWindowAnimation_Rotate_TranslateY = -20.f;
79 const float kWindowAnimation_Rotate_PerspectiveDepth = 500.f; 81 const float kWindowAnimation_Rotate_PerspectiveDepth = 500.f;
80 const float kWindowAnimation_Rotate_DegreesX = 5.f; 82 const float kWindowAnimation_Rotate_DegreesX = 5.f;
81 const float kWindowAnimation_Rotate_ScaleFactor = .99f; 83 const float kWindowAnimation_Rotate_ScaleFactor = .99f;
82 84
83 const float kWindowAnimation_Bounce_Scale = 1.02f; 85 const float kWindowAnimation_Bounce_Scale = 1.02f;
84 const int kWindowAnimation_Bounce_DurationMS = 180; 86 const int kWindowAnimation_Bounce_DurationMS = 180;
85 const int kWindowAnimation_Bounce_GrowShrinkDurationPercent = 40; 87 const int kWindowAnimation_Bounce_GrowShrinkDurationPercent = 40;
86 88
87 base::TimeDelta GetWindowVisibilityAnimationDuration(aura::Window* window) { 89 base::TimeDelta GetDefaultWindowVisibilityAnimationDuration(
88 int duration = 90 aura::Window* window) {
89 window->GetProperty(kWindowVisibilityAnimationDurationKey); 91 int duration_ms = (window->type() == ui::wm::WINDOW_TYPE_MENU) ?
90 if (duration == 0 && window->type() == ui::wm::WINDOW_TYPE_MENU) { 92 kDefaultAnimationDurationForMenuMS : kDefaultAnimationDurationMS;
91 return base::TimeDelta::FromMilliseconds( 93 return base::TimeDelta::FromMilliseconds(duration_ms);
92 kDefaultAnimationDurationForMenuMS);
93 }
94 return TimeDelta::FromInternalValue(duration);
95 } 94 }
96 95
97 // Gets/sets the WindowVisibilityAnimationType associated with a window. 96 // Gets/sets the WindowVisibilityAnimationType associated with a window.
98 // TODO(beng): redundant/fold into method on public api? 97 // TODO(beng): redundant/fold into method on public api?
99 int GetWindowVisibilityAnimationType(aura::Window* window) { 98 int GetWindowVisibilityAnimationType(aura::Window* window) {
100 int type = window->GetProperty(kWindowVisibilityAnimationTypeKey); 99 int type = window->GetProperty(kWindowVisibilityAnimationTypeKey);
101 if (type == WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT) { 100 if (type == WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT) {
102 return (window->type() == ui::wm::WINDOW_TYPE_MENU || 101 return (window->type() == ui::wm::WINDOW_TYPE_MENU ||
103 window->type() == ui::wm::WINDOW_TYPE_TOOLTIP) 102 window->type() == ui::wm::WINDOW_TYPE_TOOLTIP)
104 ? WINDOW_VISIBILITY_ANIMATION_TYPE_FADE 103 ? WINDOW_VISIBILITY_ANIMATION_TYPE_FADE
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 247
249 AugmentWindowSize(window, end_transform); 248 AugmentWindowSize(window, end_transform);
250 249
251 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); 250 window->layer()->SetOpacity(kWindowAnimation_HideOpacity);
252 window->layer()->SetTransform(start_transform); 251 window->layer()->SetTransform(start_transform);
253 window->layer()->SetVisible(true); 252 window->layer()->SetVisible(true);
254 253
255 { 254 {
256 // Property sets within this scope will be implicitly animated. 255 // Property sets within this scope will be implicitly animated.
257 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); 256 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
258 base::TimeDelta duration = GetWindowVisibilityAnimationDuration(window); 257 base::TimeDelta duration = GetWindowShowAnimationDuration(window,
259 if (duration.ToInternalValue() > 0) 258 GetDefaultWindowVisibilityAnimationDuration(window));
260 settings.SetTransitionDuration(duration); 259 settings.SetTransitionDuration(duration);
261 260
262 window->layer()->SetTransform(end_transform); 261 window->layer()->SetTransform(end_transform);
263 window->layer()->SetOpacity(kWindowAnimation_ShowOpacity); 262 window->layer()->SetOpacity(kWindowAnimation_ShowOpacity);
264 } 263 }
265 } 264 }
266 265
267 // Hides a window using an animation, animating its opacity from 1.f to 0.f, 266 // Hides a window using an animation, animating its opacity from 1.f to 0.f,
268 // its visibility to false, and its transform to |end_transform|. 267 // its visibility to false, and its transform to |end_transform|.
269 void AnimateHideWindowCommon(aura::Window* window, 268 void AnimateHideWindowCommon(aura::Window* window,
270 const gfx::Transform& end_transform) { 269 const gfx::Transform& end_transform) {
271 AugmentWindowSize(window, end_transform); 270 AugmentWindowSize(window, end_transform);
272 window->layer()->set_delegate(NULL); 271 window->layer()->set_delegate(NULL);
273 272
274 // Property sets within this scope will be implicitly animated. 273 // Property sets within this scope will be implicitly animated.
275 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator()); 274 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
276 settings.AddObserver(new HidingWindowAnimationObserver(window)); 275 settings.AddObserver(CreateHidingWindowAnimationObserver(window));
277 276 base::TimeDelta duration = GetWindowHideAnimationDuration(window,
278 base::TimeDelta duration = GetWindowVisibilityAnimationDuration(window); 277 GetDefaultWindowVisibilityAnimationDuration(window));
279 if (duration.ToInternalValue() > 0) 278 settings.SetTransitionDuration(duration);
280 settings.SetTransitionDuration(duration);
281 279
282 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); 280 window->layer()->SetOpacity(kWindowAnimation_HideOpacity);
283 window->layer()->SetTransform(end_transform); 281 window->layer()->SetTransform(end_transform);
284 window->layer()->SetVisible(false); 282 window->layer()->SetVisible(false);
285 } 283 }
286 284
287 static gfx::Transform GetScaleForWindow(aura::Window* window) { 285 static gfx::Transform GetScaleForWindow(aura::Window* window) {
288 gfx::Rect bounds = window->bounds(); 286 gfx::Rect bounds = window->bounds();
289 gfx::Transform scale = gfx::GetScaleTransform( 287 gfx::Transform scale = gfx::GetScaleTransform(
290 gfx::Point(kWindowAnimation_TranslateFactor * bounds.width(), 288 gfx::Point(kWindowAnimation_TranslateFactor * bounds.width(),
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 base::TimeDelta::FromMilliseconds( 361 base::TimeDelta::FromMilliseconds(
364 kWindowAnimation_Bounce_DurationMS * 362 kWindowAnimation_Bounce_DurationMS *
365 (100 - 2 * kWindowAnimation_Bounce_GrowShrinkDurationPercent) / 363 (100 - 2 * kWindowAnimation_Bounce_GrowShrinkDurationPercent) /
366 100))); 364 100)));
367 sequence->AddElement(CreateGrowShrinkElement(window, false)); 365 sequence->AddElement(CreateGrowShrinkElement(window, false));
368 window->layer()->GetAnimator()->StartAnimation(sequence.release()); 366 window->layer()->GetAnimator()->StartAnimation(sequence.release());
369 } 367 }
370 368
371 void AddLayerAnimationsForRotate(aura::Window* window, bool show) { 369 void AddLayerAnimationsForRotate(aura::Window* window, bool show) {
372 window->layer()->set_delegate(window); 370 window->layer()->set_delegate(window);
373 if (show) 371 if (show) {
374 window->layer()->SetOpacity(kWindowAnimation_HideOpacity); 372 window->layer()->SetOpacity(kWindowAnimation_HideOpacity);
373 window->layer()->SetVisible(true);
374 }
375 375
376 base::TimeDelta duration = base::TimeDelta::FromMilliseconds( 376 base::TimeDelta default_duration = base::TimeDelta::FromMilliseconds(
377 kWindowAnimation_Rotate_DurationMS); 377 kWindowAnimation_Rotate_DurationMS);
378 base::TimeDelta duration = show ?
379 GetWindowShowAnimationDuration(window, default_duration) :
380 GetWindowHideAnimationDuration(window, default_duration);
381
382 ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
383 settings.SetTransitionDuration(duration);
378 384
379 if (!show) { 385 if (!show) {
380 new HidingWindowAnimationObserver(window); 386 settings.AddObserver(CreateHidingWindowAnimationObserver(window));
381 window->layer()->GetAnimator()->SchedulePauseForProperties( 387 window->layer()->GetAnimator()->SchedulePauseForProperties(
382 duration * (100 - kWindowAnimation_Rotate_OpacityDurationPercent) / 100, 388 duration * (100 - kWindowAnimation_Rotate_OpacityDurationPercent) / 100,
383 ui::LayerAnimationElement::OPACITY); 389 ui::LayerAnimationElement::OPACITY);
390 window->layer()->SetVisible(false);
384 } 391 }
385 scoped_ptr<ui::LayerAnimationElement> opacity( 392 scoped_ptr<ui::LayerAnimationElement> opacity(
386 ui::LayerAnimationElement::CreateOpacityElement( 393 ui::LayerAnimationElement::CreateOpacityElement(
387 show ? kWindowAnimation_ShowOpacity : kWindowAnimation_HideOpacity, 394 show ? kWindowAnimation_ShowOpacity : kWindowAnimation_HideOpacity,
388 duration * kWindowAnimation_Rotate_OpacityDurationPercent / 100)); 395 duration * kWindowAnimation_Rotate_OpacityDurationPercent / 100));
389 opacity->set_tween_type(gfx::Tween::EASE_IN_OUT); 396 opacity->set_tween_type(gfx::Tween::EASE_IN_OUT);
390 window->layer()->GetAnimator()->ScheduleAnimation( 397 window->layer()->GetAnimator()->ScheduleAnimation(
391 new ui::LayerAnimationSequence(opacity.release())); 398 new ui::LayerAnimationSequence(opacity.release()));
392 399
393 float xcenter = window->bounds().width() * 0.5; 400 float xcenter = window->bounds().width() * 0.5;
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 } 522 }
516 523
517 bool HasWindowVisibilityAnimationTransition( 524 bool HasWindowVisibilityAnimationTransition(
518 aura::Window* window, 525 aura::Window* window,
519 WindowVisibilityAnimationTransition transition) { 526 WindowVisibilityAnimationTransition transition) {
520 WindowVisibilityAnimationTransition prop = window->GetProperty( 527 WindowVisibilityAnimationTransition prop = window->GetProperty(
521 kWindowVisibilityAnimationTransitionKey); 528 kWindowVisibilityAnimationTransitionKey);
522 return (prop & transition) != 0; 529 return (prop & transition) != 0;
523 } 530 }
524 531
525 void SetWindowVisibilityAnimationDuration(aura::Window* window, 532 void SetWindowShowAnimationDuration(aura::Window* window,
526 const TimeDelta& duration) { 533 const base::TimeDelta& duration) {
527 window->SetProperty(kWindowVisibilityAnimationDurationKey, 534 window->SetProperty(kWindowShowAnimationDurationKey,
528 static_cast<int>(duration.ToInternalValue())); 535 static_cast<int>(duration.ToInternalValue()));
529 } 536 }
530 537
538 void SetWindowHideAnimationDuration(aura::Window* window,
539 const base::TimeDelta& duration) {
540 window->SetProperty(kWindowHideAnimationDurationKey,
541 static_cast<int>(duration.ToInternalValue()));
542 }
543
544 base::TimeDelta GetWindowShowAnimationDuration(
545 aura::Window* window,
546 const base::TimeDelta& default_duration) {
547 int duration = window->GetProperty(kWindowShowAnimationDurationKey);
548 return (duration == 0) ?
549 default_duration : base::TimeDelta::FromInternalValue(duration);
550 }
551
552 base::TimeDelta GetWindowHideAnimationDuration(
553 aura::Window* window,
554 const base::TimeDelta& default_duration) {
555 int duration = window->GetProperty(kWindowHideAnimationDurationKey);
556 return (duration == 0) ?
557 default_duration : base::TimeDelta::FromInternalValue(duration);
558 }
559
531 void SetWindowVisibilityAnimationVerticalPosition(aura::Window* window, 560 void SetWindowVisibilityAnimationVerticalPosition(aura::Window* window,
532 float position) { 561 float position) {
533 window->SetProperty(kWindowVisibilityAnimationVerticalPositionKey, position); 562 window->SetProperty(kWindowVisibilityAnimationVerticalPositionKey, position);
534 } 563 }
535 564
536 ui::ImplicitAnimationObserver* CreateHidingWindowAnimationObserver( 565 ui::ImplicitAnimationObserver* CreateHidingWindowAnimationObserver(
537 aura::Window* window) { 566 aura::Window* window) {
538 return new HidingWindowAnimationObserver(window); 567 return new HidingWindowAnimationObserver(window);
539 } 568 }
540 569
(...skipping 20 matching lines...) Expand all
561 590
562 bool WindowAnimationsDisabled(aura::Window* window) { 591 bool WindowAnimationsDisabled(aura::Window* window) {
563 return (window && 592 return (window &&
564 window->GetProperty(aura::client::kAnimationsDisabledKey)) || 593 window->GetProperty(aura::client::kAnimationsDisabledKey)) ||
565 CommandLine::ForCurrentProcess()->HasSwitch( 594 CommandLine::ForCurrentProcess()->HasSwitch(
566 switches::kWindowAnimationsDisabled); 595 switches::kWindowAnimationsDisabled);
567 } 596 }
568 597
569 } // namespace corewm 598 } // namespace corewm
570 } // namespace views 599 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/corewm/window_animations.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698