background_animator.cc revision c2e0dbddbe15c98d52c4786dac06cb8952a8ae6d
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 "ash/shelf/background_animator.h"
6
7
8namespace ash {
9namespace internal {
10
11namespace {
12
13// Duration of the background animation.
14const int kBackgroundDurationMS = 1000;
15
16}
17
18BackgroundAnimator::BackgroundAnimator(BackgroundAnimatorDelegate* delegate,
19                                       int min_alpha,
20                                       int max_alpha)
21    : delegate_(delegate),
22      min_alpha_(min_alpha),
23      max_alpha_(max_alpha),
24      animation_(this),
25      paints_background_(false),
26      alpha_(min_alpha) {
27  animation_.SetSlideDuration(kBackgroundDurationMS);
28}
29
30BackgroundAnimator::~BackgroundAnimator() {
31}
32
33void BackgroundAnimator::SetDuration(int time_in_ms) {
34  animation_.SetSlideDuration(time_in_ms);
35}
36
37void BackgroundAnimator::SetPaintsBackground(bool value, ChangeType type) {
38  if (paints_background_ == value)
39    return;
40  paints_background_ = value;
41  if (type == CHANGE_IMMEDIATE && !animation_.is_animating()) {
42    animation_.Reset(value ? 1.0f : 0.0f);
43    AnimationProgressed(&animation_);
44    return;
45  }
46  if (paints_background_)
47    animation_.Show();
48  else
49    animation_.Hide();
50}
51
52void BackgroundAnimator::AnimationProgressed(const ui::Animation* animation) {
53  int alpha = animation->CurrentValueBetween(min_alpha_, max_alpha_);
54  if (alpha_ == alpha)
55    return;
56  alpha_ = alpha;
57  delegate_->UpdateBackground(alpha_);
58}
59
60}  // namespace internal
61}  // namespace ash
62