• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 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/system/chromeos/network/network_icon_animation.h"
6 
7 #include "ash/system/chromeos/network/network_icon_animation_observer.h"
8 
9 namespace {
10 const int kThrobDurationMs = 750;  // Animation cycle length.
11 }
12 
13 namespace ash {
14 namespace network_icon {
15 
NetworkIconAnimation()16 NetworkIconAnimation::NetworkIconAnimation()
17     : animation_(this) {
18   // Set up the animation throbber.
19   animation_.SetThrobDuration(kThrobDurationMs);
20   animation_.SetTweenType(gfx::Tween::LINEAR);
21 }
22 
~NetworkIconAnimation()23 NetworkIconAnimation::~NetworkIconAnimation() {
24 }
25 
AnimationProgressed(const gfx::Animation * animation)26 void NetworkIconAnimation::AnimationProgressed(
27     const gfx::Animation* animation) {
28   if (animation != &animation_)
29     return;
30   FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged());
31 }
32 
GetAnimation()33 double NetworkIconAnimation::GetAnimation() {
34   if (!animation_.is_animating()) {
35     animation_.Reset();
36     animation_.StartThrobbing(-1 /*throb indefinitely*/);
37     return 0;
38   }
39   return animation_.GetCurrentValue();
40 }
41 
AddObserver(AnimationObserver * observer)42 void NetworkIconAnimation::AddObserver(AnimationObserver* observer) {
43   if (!observers_.HasObserver(observer))
44     observers_.AddObserver(observer);
45 }
46 
RemoveObserver(AnimationObserver * observer)47 void NetworkIconAnimation::RemoveObserver(AnimationObserver* observer) {
48   observers_.RemoveObserver(observer);
49   if (!observers_.might_have_observers())
50     animation_.Reset();  // Stops the animation and resets the current value.
51 }
52 
53 // static
GetInstance()54 NetworkIconAnimation* NetworkIconAnimation::GetInstance() {
55   static NetworkIconAnimation* s_icon_animation =
56       new NetworkIconAnimation();
57   return s_icon_animation;
58 }
59 
60 }  // namespace network_icon
61 }  // namespace ash
62