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 "ui/chromeos/network/network_icon_animation.h" 6 7#include "ui/chromeos/network/network_icon_animation_observer.h" 8 9namespace { 10const int kThrobDurationMs = 750; // Animation cycle length. 11} 12 13namespace ui { 14namespace network_icon { 15 16NetworkIconAnimation::NetworkIconAnimation() 17 : animation_(this) { 18 // Set up the animation throbber. 19 animation_.SetThrobDuration(kThrobDurationMs); 20 animation_.SetTweenType(gfx::Tween::LINEAR); 21} 22 23NetworkIconAnimation::~NetworkIconAnimation() { 24} 25 26void NetworkIconAnimation::AnimationProgressed( 27 const gfx::Animation* animation) { 28 if (animation != &animation_) 29 return; 30 FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged()); 31} 32 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 42void NetworkIconAnimation::AddObserver(AnimationObserver* observer) { 43 if (!observers_.HasObserver(observer)) 44 observers_.AddObserver(observer); 45} 46 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 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 ui 62