1// Copyright 2014 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#ifndef UI_COMPOSITOR_LAYER_ANIMATOR_COLLECTION_H_
6#define UI_COMPOSITOR_LAYER_ANIMATOR_COLLECTION_H_
7
8#include <set>
9
10#include "base/callback.h"
11#include "base/memory/ref_counted.h"
12#include "base/time/time.h"
13#include "ui/compositor/compositor_export.h"
14
15namespace base {
16class TimeTicks;
17}
18
19namespace ui {
20
21class LayerAnimator;
22
23class COMPOSITOR_EXPORT LayerAnimatorCollectionDelegate {
24 public:
25  virtual ~LayerAnimatorCollectionDelegate() {}
26
27  virtual void ScheduleAnimationForLayerCollection() = 0;
28};
29
30// A collection of LayerAnimators that should be updated at each animation step
31// in the compositor.
32class COMPOSITOR_EXPORT LayerAnimatorCollection {
33 public:
34  explicit LayerAnimatorCollection(LayerAnimatorCollectionDelegate* delegate);
35  ~LayerAnimatorCollection();
36
37  void StartAnimator(scoped_refptr<LayerAnimator> animator);
38  void StopAnimator(scoped_refptr<LayerAnimator> animator);
39
40  bool HasActiveAnimators() const;
41
42  void Progress(base::TimeTicks now);
43
44  base::TimeTicks last_tick_time() const { return last_tick_time_; }
45
46 private:
47  LayerAnimatorCollectionDelegate* delegate_;
48  base::TimeTicks last_tick_time_;
49  std::set<scoped_refptr<LayerAnimator> > animators_;
50
51  DISALLOW_COPY_AND_ASSIGN(LayerAnimatorCollection);
52};
53
54}  // namespace ui
55
56#endif  // UI_COMPOSITOR_LAYER_ANIMATOR_COLLECTION_H_
57