12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon_animation.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "ui/chromeos/network/network_icon_animation_observer.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const int kThrobDurationMs = 750; // Animation cycle length. 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace ui { 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace network_icon { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkIconAnimation::NetworkIconAnimation() 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) : animation_(this) { 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set up the animation throbber. 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) animation_.SetThrobDuration(kThrobDurationMs); 20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) animation_.SetTweenType(gfx::Tween::LINEAR); 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkIconAnimation::~NetworkIconAnimation() { 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void NetworkIconAnimation::AnimationProgressed( 27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) const gfx::Animation* animation) { 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (animation != &animation_) 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FOR_EACH_OBSERVER(AnimationObserver, observers_, NetworkIconChanged()); 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)double NetworkIconAnimation::GetAnimation() { 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (!animation_.is_animating()) { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) animation_.Reset(); 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) animation_.StartThrobbing(-1 /*throb indefinitely*/); 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return 0; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return animation_.GetCurrentValue(); 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkIconAnimation::AddObserver(AnimationObserver* observer) { 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!observers_.HasObserver(observer)) 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) observers_.AddObserver(observer); 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void NetworkIconAnimation::RemoveObserver(AnimationObserver* observer) { 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) observers_.RemoveObserver(observer); 49424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (!observers_.might_have_observers()) 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) animation_.Reset(); // Stops the animation and resets the current value. 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)NetworkIconAnimation* NetworkIconAnimation::GetInstance() { 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static NetworkIconAnimation* s_icon_animation = 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new NetworkIconAnimation(); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return s_icon_animation; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace network_icon 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace ui 62