15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ash/shelf/background_animator.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ash {
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Duration of the background animation.
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBackgroundDurationMS = 1000;
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BackgroundAnimator::BackgroundAnimator(BackgroundAnimatorDelegate* delegate,
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       int min_alpha,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       int max_alpha)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : delegate_(delegate),
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      min_alpha_(min_alpha),
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      max_alpha_(max_alpha),
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      animation_(this),
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      paints_background_(false),
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      alpha_(min_alpha) {
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  animation_.SetSlideDuration(kBackgroundDurationMS);
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BackgroundAnimator::~BackgroundAnimator() {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void BackgroundAnimator::SetDuration(int time_in_ms) {
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  animation_.SetSlideDuration(time_in_ms);
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
35a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void BackgroundAnimator::SetPaintsBackground(
36a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)    bool value, BackgroundAnimatorChangeType type) {
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (paints_background_ == value)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  paints_background_ = value;
40a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  if (type == BACKGROUND_CHANGE_IMMEDIATE && !animation_.is_animating()) {
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    animation_.Reset(value ? 1.0f : 0.0f);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    AnimationProgressed(&animation_);
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (paints_background_)
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    animation_.Show();
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  else
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    animation_.Hide();
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void BackgroundAnimator::AnimationProgressed(const gfx::Animation* animation) {
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int alpha = animation->CurrentValueBetween(min_alpha_, max_alpha_);
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (alpha_ == alpha)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  alpha_ = alpha;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  delegate_->UpdateBackground(alpha_);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace ash
60