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
10namespace {
11
12const int kDefaultTransitionDurationMs = 200;
13
14}  // namespace
15
16namespace ui {
17
18ScopedLayerAnimationSettings::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
28ScopedLayerAnimationSettings::~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
40void ScopedLayerAnimationSettings::AddObserver(
41    ImplicitAnimationObserver* observer) {
42  observers_.insert(observer);
43  animator_->AddObserver(observer);
44}
45
46void ScopedLayerAnimationSettings::SetTransitionDuration(
47    base::TimeDelta duration) {
48  animator_->transition_duration_ = duration;
49}
50
51base::TimeDelta ScopedLayerAnimationSettings::GetTransitionDuration() const {
52  return animator_->transition_duration_;
53}
54
55void ScopedLayerAnimationSettings::SetTweenType(Tween::Type tween_type) {
56  animator_->set_tween_type(tween_type);
57}
58
59Tween::Type ScopedLayerAnimationSettings::GetTweenType() const {
60  return animator_->tween_type();
61}
62
63void ScopedLayerAnimationSettings::SetPreemptionStrategy(
64    LayerAnimator::PreemptionStrategy strategy) {
65  animator_->set_preemption_strategy(strategy);
66}
67
68LayerAnimator::PreemptionStrategy
69ScopedLayerAnimationSettings::GetPreemptionStrategy() const {
70  return animator_->preemption_strategy();
71}
72
73}  // namespace ui
74