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 3 // found in the LICENSE file. 4 5 #include "ui/compositor/scoped_layer_animation_settings.h" 6 7 #include "ui/compositor/layer_animation_observer.h" 8 #include "ui/compositor/layer_animator.h" 9 10 namespace { 11 12 const int kDefaultTransitionDurationMs = 200; 13 14 } // namespace 15 16 namespace ui { 17 18 ScopedLayerAnimationSettings::ScopedLayerAnimationSettings( 19 LayerAnimator* animator) 20 : animator_(animator), 21 old_transition_duration_(animator->transition_duration_), 22 old_tween_type_(animator->tween_type()), 23 old_preemption_strategy_(animator->preemption_strategy()) { 24 SetTransitionDuration( 25 base::TimeDelta::FromMilliseconds(kDefaultTransitionDurationMs)); 26 } 27 28 ScopedLayerAnimationSettings::~ScopedLayerAnimationSettings() { 29 animator_->transition_duration_ = old_transition_duration_; 30 animator_->set_tween_type(old_tween_type_); 31 animator_->set_preemption_strategy(old_preemption_strategy_); 32 33 for (std::set<ImplicitAnimationObserver*>::const_iterator i = 34 observers_.begin(); i != observers_.end(); ++i) { 35 animator_->observers_.RemoveObserver(*i); 36 (*i)->SetActive(true); 37 } 38 } 39 40 void ScopedLayerAnimationSettings::AddObserver( 41 ImplicitAnimationObserver* observer) { 42 observers_.insert(observer); 43 animator_->AddObserver(observer); 44 } 45 46 void ScopedLayerAnimationSettings::SetTransitionDuration( 47 base::TimeDelta duration) { 48 animator_->transition_duration_ = duration; 49 } 50 51 base::TimeDelta ScopedLayerAnimationSettings::GetTransitionDuration() const { 52 return animator_->transition_duration_; 53 } 54 55 void ScopedLayerAnimationSettings::SetTweenType(Tween::Type tween_type) { 56 animator_->set_tween_type(tween_type); 57 } 58 59 Tween::Type ScopedLayerAnimationSettings::GetTweenType() const { 60 return animator_->tween_type(); 61 } 62 63 void ScopedLayerAnimationSettings::SetPreemptionStrategy( 64 LayerAnimator::PreemptionStrategy strategy) { 65 animator_->set_preemption_strategy(strategy); 66 } 67 68 LayerAnimator::PreemptionStrategy 69 ScopedLayerAnimationSettings::GetPreemptionStrategy() const { 70 return animator_->preemption_strategy(); 71 } 72 73 } // namespace ui 74