1// Copyright 2012 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 "cc/animation/scrollbar_animation_controller_linear_fade.h"
6
7#include "base/time/time.h"
8#include "cc/layers/layer_impl.h"
9#include "cc/layers/scrollbar_layer_impl_base.h"
10
11namespace cc {
12
13scoped_ptr<ScrollbarAnimationControllerLinearFade>
14ScrollbarAnimationControllerLinearFade::Create(
15    LayerImpl* scroll_layer,
16    ScrollbarAnimationControllerClient* client,
17    base::TimeDelta delay_before_starting,
18    base::TimeDelta duration) {
19  return make_scoped_ptr(new ScrollbarAnimationControllerLinearFade(
20      scroll_layer, client, delay_before_starting, duration));
21}
22
23ScrollbarAnimationControllerLinearFade::ScrollbarAnimationControllerLinearFade(
24    LayerImpl* scroll_layer,
25    ScrollbarAnimationControllerClient* client,
26    base::TimeDelta delay_before_starting,
27    base::TimeDelta duration)
28    : ScrollbarAnimationController(client, delay_before_starting, duration),
29      scroll_layer_(scroll_layer) {
30}
31
32ScrollbarAnimationControllerLinearFade::
33    ~ScrollbarAnimationControllerLinearFade() {}
34
35void ScrollbarAnimationControllerLinearFade::RunAnimationFrame(float progress) {
36  ApplyOpacityToScrollbars(1.f - progress);
37  if (progress == 1.f)
38    StopAnimation();
39}
40
41void ScrollbarAnimationControllerLinearFade::DidScrollUpdate() {
42  ScrollbarAnimationController::DidScrollUpdate();
43  ApplyOpacityToScrollbars(1.f);
44}
45
46void ScrollbarAnimationControllerLinearFade::ApplyOpacityToScrollbars(
47    float opacity) {
48  if (!scroll_layer_->scrollbars())
49    return;
50
51  LayerImpl::ScrollbarSet* scrollbars = scroll_layer_->scrollbars();
52  for (LayerImpl::ScrollbarSet::iterator it = scrollbars->begin();
53       it != scrollbars->end();
54       ++it) {
55    ScrollbarLayerImplBase* scrollbar = *it;
56    if (scrollbar->is_overlay_scrollbar())
57      scrollbar->SetOpacity(opacity);
58  }
59}
60
61}  // namespace cc
62