diff options
Diffstat (limited to 'chromium/ash/system/chromeos/network/network_icon_animation.cc')
-rw-r--r-- | chromium/ash/system/chromeos/network/network_icon_animation.cc | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/chromium/ash/system/chromeos/network/network_icon_animation.cc b/chromium/ash/system/chromeos/network/network_icon_animation.cc new file mode 100644 index 00000000000..1169c67bb92 --- /dev/null +++ b/chromium/ash/system/chromeos/network/network_icon_animation.cc @@ -0,0 +1,60 @@ +// 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 "ash/system/chromeos/network/network_icon_animation.h" + +#include "ash/system/chromeos/network/network_icon_animation_observer.h" + +namespace { +const int kThrobDurationMs = 750; // Animation cycle length. +} + +namespace ash { +namespace network_icon { + +NetworkIconAnimation::NetworkIconAnimation() + : animation_(this) { + // Set up the animation throbber. + animation_.SetThrobDuration(kThrobDurationMs); + animation_.SetTweenType(ui::Tween::LINEAR); +} + +NetworkIconAnimation::~NetworkIconAnimation() { +} + +void NetworkIconAnimation::AnimationProgressed(const ui::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_.size() == 0) + 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 ash |