// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "ui/chromeos/network/network_icon_animation.h" #include "ui/chromeos/network/network_icon_animation_observer.h" namespace { const int kThrobDurationMs = 750; // Animation cycle length. } namespace ui { namespace network_icon { NetworkIconAnimation::NetworkIconAnimation() : animation_(this) { // Set up the animation throbber. animation_.SetThrobDuration(kThrobDurationMs); animation_.SetTweenType(gfx::Tween::LINEAR); } NetworkIconAnimation::~NetworkIconAnimation() { } void NetworkIconAnimation::AnimationProgressed( const gfx::Animation* animation) { if (animation != &animation_) return; FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged()); } double NetworkIconAnimation::GetAnimation() { if (!animation_.is_animating()) { animation_.Reset(); animation_.StartThrobbing(-1 /*throb indefinitely*/); return 0; } return animation_.GetCurrentValue(); } void NetworkIconAnimation::AddObserver(AnimationObserver* observer) { if (!observers_.HasObserver(observer)) observers_.AddObserver(observer); } void NetworkIconAnimation::RemoveObserver(AnimationObserver* observer) { observers_.RemoveObserver(observer); if (!observers_.might_have_observers()) animation_.Reset(); // Stops the animation and resets the current value. } // static NetworkIconAnimation* NetworkIconAnimation::GetInstance() { static NetworkIconAnimation* s_icon_animation = new NetworkIconAnimation(); return s_icon_animation; } } // namespace network_icon } // namespace ui