| Index: ui/views/corewm/window_animations.cc
|
| diff --git a/ui/views/corewm/window_animations.cc b/ui/views/corewm/window_animations.cc
|
| index 1f90b40a62a0994485274204cad998837210a7d5..d4262ff984807bfb0ea62eeac69c2aa50161c371 100644
|
| --- a/ui/views/corewm/window_animations.cc
|
| +++ b/ui/views/corewm/window_animations.cc
|
| @@ -56,7 +56,8 @@ const float kWindowAnimation_Vertical_TranslateY = 15.f;
|
| DEFINE_WINDOW_PROPERTY_KEY(int,
|
| kWindowVisibilityAnimationTypeKey,
|
| WINDOW_VISIBILITY_ANIMATION_TYPE_DEFAULT);
|
| -DEFINE_WINDOW_PROPERTY_KEY(int, kWindowVisibilityAnimationDurationKey, 0);
|
| +DEFINE_WINDOW_PROPERTY_KEY(int, kWindowShowAnimationDurationKey, 0);
|
| +DEFINE_WINDOW_PROPERTY_KEY(int, kWindowHideAnimationDurationKey, 0);
|
| DEFINE_WINDOW_PROPERTY_KEY(WindowVisibilityAnimationTransition,
|
| kWindowVisibilityAnimationTransitionKey,
|
| ANIMATE_BOTH);
|
| @@ -66,6 +67,7 @@ DEFINE_WINDOW_PROPERTY_KEY(float,
|
|
|
| namespace {
|
|
|
| +const int kDefaultAnimationDurationMS = 200;
|
| const int kDefaultAnimationDurationForMenuMS = 150;
|
|
|
| const float kWindowAnimation_HideOpacity = 0.f;
|
| @@ -84,14 +86,11 @@ const float kWindowAnimation_Bounce_Scale = 1.02f;
|
| const int kWindowAnimation_Bounce_DurationMS = 180;
|
| const int kWindowAnimation_Bounce_GrowShrinkDurationPercent = 40;
|
|
|
| -base::TimeDelta GetWindowVisibilityAnimationDuration(aura::Window* window) {
|
| - int duration =
|
| - window->GetProperty(kWindowVisibilityAnimationDurationKey);
|
| - if (duration == 0 && window->type() == ui::wm::WINDOW_TYPE_MENU) {
|
| - return base::TimeDelta::FromMilliseconds(
|
| - kDefaultAnimationDurationForMenuMS);
|
| - }
|
| - return TimeDelta::FromInternalValue(duration);
|
| +base::TimeDelta GetDefaultWindowVisibilityAnimationDuration(
|
| + aura::Window* window) {
|
| + int duration_ms = (window->type() == ui::wm::WINDOW_TYPE_MENU) ?
|
| + kDefaultAnimationDurationForMenuMS : kDefaultAnimationDurationMS;
|
| + return base::TimeDelta::FromMilliseconds(duration_ms);
|
| }
|
|
|
| // Gets/sets the WindowVisibilityAnimationType associated with a window.
|
| @@ -255,9 +254,9 @@ void AnimateShowWindowCommon(aura::Window* window,
|
| {
|
| // Property sets within this scope will be implicitly animated.
|
| ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
|
| - base::TimeDelta duration = GetWindowVisibilityAnimationDuration(window);
|
| - if (duration.ToInternalValue() > 0)
|
| - settings.SetTransitionDuration(duration);
|
| + base::TimeDelta duration = GetWindowShowAnimationDuration(window,
|
| + GetDefaultWindowVisibilityAnimationDuration(window));
|
| + settings.SetTransitionDuration(duration);
|
|
|
| window->layer()->SetTransform(end_transform);
|
| window->layer()->SetOpacity(kWindowAnimation_ShowOpacity);
|
| @@ -273,11 +272,10 @@ void AnimateHideWindowCommon(aura::Window* window,
|
|
|
| // Property sets within this scope will be implicitly animated.
|
| ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
|
| - settings.AddObserver(new HidingWindowAnimationObserver(window));
|
| -
|
| - base::TimeDelta duration = GetWindowVisibilityAnimationDuration(window);
|
| - if (duration.ToInternalValue() > 0)
|
| - settings.SetTransitionDuration(duration);
|
| + settings.AddObserver(CreateHidingWindowAnimationObserver(window));
|
| + base::TimeDelta duration = GetWindowHideAnimationDuration(window,
|
| + GetDefaultWindowVisibilityAnimationDuration(window));
|
| + settings.SetTransitionDuration(duration);
|
|
|
| window->layer()->SetOpacity(kWindowAnimation_HideOpacity);
|
| window->layer()->SetTransform(end_transform);
|
| @@ -370,17 +368,26 @@ void AnimateBounce(aura::Window* window) {
|
|
|
| void AddLayerAnimationsForRotate(aura::Window* window, bool show) {
|
| window->layer()->set_delegate(window);
|
| - if (show)
|
| + if (show) {
|
| window->layer()->SetOpacity(kWindowAnimation_HideOpacity);
|
| + window->layer()->SetVisible(true);
|
| + }
|
|
|
| - base::TimeDelta duration = base::TimeDelta::FromMilliseconds(
|
| + base::TimeDelta default_duration = base::TimeDelta::FromMilliseconds(
|
| kWindowAnimation_Rotate_DurationMS);
|
| + base::TimeDelta duration = show ?
|
| + GetWindowShowAnimationDuration(window, default_duration) :
|
| + GetWindowHideAnimationDuration(window, default_duration);
|
| +
|
| + ui::ScopedLayerAnimationSettings settings(window->layer()->GetAnimator());
|
| + settings.SetTransitionDuration(duration);
|
|
|
| if (!show) {
|
| - new HidingWindowAnimationObserver(window);
|
| + settings.AddObserver(CreateHidingWindowAnimationObserver(window));
|
| window->layer()->GetAnimator()->SchedulePauseForProperties(
|
| duration * (100 - kWindowAnimation_Rotate_OpacityDurationPercent) / 100,
|
| ui::LayerAnimationElement::OPACITY);
|
| + window->layer()->SetVisible(false);
|
| }
|
| scoped_ptr<ui::LayerAnimationElement> opacity(
|
| ui::LayerAnimationElement::CreateOpacityElement(
|
| @@ -522,12 +529,34 @@ bool HasWindowVisibilityAnimationTransition(
|
| return (prop & transition) != 0;
|
| }
|
|
|
| -void SetWindowVisibilityAnimationDuration(aura::Window* window,
|
| - const TimeDelta& duration) {
|
| - window->SetProperty(kWindowVisibilityAnimationDurationKey,
|
| +void SetWindowShowAnimationDuration(aura::Window* window,
|
| + const base::TimeDelta& duration) {
|
| + window->SetProperty(kWindowShowAnimationDurationKey,
|
| static_cast<int>(duration.ToInternalValue()));
|
| }
|
|
|
| +void SetWindowHideAnimationDuration(aura::Window* window,
|
| + const base::TimeDelta& duration) {
|
| + window->SetProperty(kWindowHideAnimationDurationKey,
|
| + static_cast<int>(duration.ToInternalValue()));
|
| +}
|
| +
|
| +base::TimeDelta GetWindowShowAnimationDuration(
|
| + aura::Window* window,
|
| + const base::TimeDelta& default_duration) {
|
| + int duration = window->GetProperty(kWindowShowAnimationDurationKey);
|
| + return (duration == 0) ?
|
| + default_duration : base::TimeDelta::FromInternalValue(duration);
|
| +}
|
| +
|
| +base::TimeDelta GetWindowHideAnimationDuration(
|
| + aura::Window* window,
|
| + const base::TimeDelta& default_duration) {
|
| + int duration = window->GetProperty(kWindowHideAnimationDurationKey);
|
| + return (duration == 0) ?
|
| + default_duration : base::TimeDelta::FromInternalValue(duration);
|
| +}
|
| +
|
| void SetWindowVisibilityAnimationVerticalPosition(aura::Window* window,
|
| float position) {
|
| window->SetProperty(kWindowVisibilityAnimationVerticalPositionKey, position);
|
|
|