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()16NetworkIconAnimation::NetworkIconAnimation() 17 : animation_(this) { 18 // Set up the animation throbber. 19 animation_.SetThrobDuration(kThrobDurationMs); 20 animation_.SetTweenType(gfx::Tween::LINEAR); 21 } 22 ~NetworkIconAnimation()23NetworkIconAnimation::~NetworkIconAnimation() { 24 } 25 AnimationProgressed(const gfx::Animation * animation)26void NetworkIconAnimation::AnimationProgressed( 27 const gfx::Animation* animation) { 28 if (animation != &animation_) 29 return; 30 FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged()); 31 } 32 GetAnimation()33double 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)42void NetworkIconAnimation::AddObserver(AnimationObserver* observer) { 43 if (!observers_.HasObserver(observer)) 44 observers_.AddObserver(observer); 45 } 46 RemoveObserver(AnimationObserver * observer)47void 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()54NetworkIconAnimation* 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