OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ | 5 #ifndef UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ |
6 #define UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ | 6 #define UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ |
7 | 7 |
8 #include <stddef.h> | 8 #include <stddef.h> |
9 | 9 |
| 10 #include <memory> |
10 #include <vector> | 11 #include <vector> |
11 | 12 |
12 #include "base/gtest_prod_util.h" | 13 #include "base/gtest_prod_util.h" |
13 #include "base/macros.h" | 14 #include "base/macros.h" |
14 #include "base/memory/linked_ptr.h" | |
15 #include "base/memory/weak_ptr.h" | 15 #include "base/memory/weak_ptr.h" |
16 #include "base/observer_list.h" | 16 #include "base/observer_list.h" |
17 #include "base/time/time.h" | 17 #include "base/time/time.h" |
18 #include "ui/compositor/compositor_export.h" | 18 #include "ui/compositor/compositor_export.h" |
19 #include "ui/compositor/layer_animation_element.h" | 19 #include "ui/compositor/layer_animation_element.h" |
20 | 20 |
21 namespace ui { | 21 namespace ui { |
22 | 22 |
23 class LayerAnimationDelegate; | 23 class LayerAnimationDelegate; |
24 class LayerAnimationObserver; | 24 class LayerAnimationObserver; |
25 | 25 |
26 // Contains a collection of layer animation elements to be played one after | 26 // Contains a collection of layer animation elements to be played one after |
27 // another. Although it has a similar interface to LayerAnimationElement, it is | 27 // another. Although it has a similar interface to LayerAnimationElement, it is |
28 // not a LayerAnimationElement (i.e., it is not permitted to have a sequence in | 28 // not a LayerAnimationElement (i.e., it is not permitted to have a sequence in |
29 // a sequence). Sequences own their elements, and sequences are themselves owned | 29 // a sequence). Sequences own their elements, and sequences are themselves owned |
30 // by a LayerAnimator. | 30 // by a LayerAnimator. |
31 // | 31 // |
32 // TODO(vollick) Create a 'blended' sequence for transitioning between | 32 // TODO(vollick) Create a 'blended' sequence for transitioning between |
33 // sequences. | 33 // sequences. |
34 // TODO(vollick) Eventually, the LayerAnimator will switch to a model where new | 34 // TODO(vollick) Eventually, the LayerAnimator will switch to a model where new |
35 // work is scheduled rather than calling methods directly. This should make it | 35 // work is scheduled rather than calling methods directly. This should make it |
36 // impossible for temporary pointers to running animations to go stale. When | 36 // impossible for temporary pointers to running animations to go stale. When |
37 // this happens, there will be no need for LayerAnimationSequences to support | 37 // this happens, there will be no need for LayerAnimationSequences to support |
38 // weak pointers. | 38 // weak pointers. |
39 class COMPOSITOR_EXPORT LayerAnimationSequence | 39 class COMPOSITOR_EXPORT LayerAnimationSequence |
40 : public base::SupportsWeakPtr<LayerAnimationSequence> { | 40 : public base::SupportsWeakPtr<LayerAnimationSequence> { |
41 public: | 41 public: |
42 LayerAnimationSequence(); | 42 LayerAnimationSequence(); |
43 // Takes ownership of the given element and adds it to the sequence. | 43 // Takes ownership of the given element and adds it to the sequence. |
44 explicit LayerAnimationSequence(LayerAnimationElement* element); | 44 explicit LayerAnimationSequence( |
| 45 std::unique_ptr<LayerAnimationElement> element); |
45 virtual ~LayerAnimationSequence(); | 46 virtual ~LayerAnimationSequence(); |
46 | 47 |
47 // Sets the start time for the animation. This must be called before the | 48 // Sets the start time for the animation. This must be called before the |
48 // first call to {Start, IsFinished}. Once the animation is finished, this | 49 // first call to {Start, IsFinished}. Once the animation is finished, this |
49 // must be called again in order to restart the animation. | 50 // must be called again in order to restart the animation. |
50 void set_start_time(base::TimeTicks start_time) { start_time_ = start_time; } | 51 void set_start_time(base::TimeTicks start_time) { start_time_ = start_time; } |
51 base::TimeTicks start_time() const { return start_time_; } | 52 base::TimeTicks start_time() const { return start_time_; } |
52 | 53 |
53 // Sets a flag indicating that this sequence will start together with other | 54 // Sets a flag indicating that this sequence will start together with other |
54 // sequences, and at least one of the sequences in this group has a threaded | 55 // sequences, and at least one of the sequences in this group has a threaded |
(...skipping 28 matching lines...) Expand all Loading... |
83 // Aborts the given animation. | 84 // Aborts the given animation. |
84 void Abort(LayerAnimationDelegate* delegate); | 85 void Abort(LayerAnimationDelegate* delegate); |
85 | 86 |
86 // All properties modified by the sequence. | 87 // All properties modified by the sequence. |
87 LayerAnimationElement::AnimatableProperties properties() const { | 88 LayerAnimationElement::AnimatableProperties properties() const { |
88 return properties_; | 89 return properties_; |
89 } | 90 } |
90 | 91 |
91 // Adds an element to the sequence. The sequences takes ownership of this | 92 // Adds an element to the sequence. The sequences takes ownership of this |
92 // element. | 93 // element. |
93 void AddElement(LayerAnimationElement* element); | 94 void AddElement(std::unique_ptr<LayerAnimationElement> element); |
94 | 95 |
95 // Sequences can be looped indefinitely. | 96 // Sequences can be looped indefinitely. |
96 void set_is_cyclic(bool is_cyclic) { is_cyclic_ = is_cyclic; } | 97 void set_is_cyclic(bool is_cyclic) { is_cyclic_ = is_cyclic; } |
97 bool is_cyclic() const { return is_cyclic_; } | 98 bool is_cyclic() const { return is_cyclic_; } |
98 | 99 |
99 // Returns true if this sequence has at least one element conflicting with a | 100 // Returns true if this sequence has at least one element conflicting with a |
100 // property in |other|. | 101 // property in |other|. |
101 bool HasConflictingProperty( | 102 bool HasConflictingProperty( |
102 LayerAnimationElement::AnimatableProperties other) const; | 103 LayerAnimationElement::AnimatableProperties other) const; |
103 | 104 |
(...skipping 26 matching lines...) Expand all Loading... |
130 // by this sequence. Returns 0.0 if no elements have been progressed. | 131 // by this sequence. Returns 0.0 if no elements have been progressed. |
131 double last_progressed_fraction() const { return last_progressed_fraction_; } | 132 double last_progressed_fraction() const { return last_progressed_fraction_; } |
132 | 133 |
133 size_t size() const; | 134 size_t size() const; |
134 | 135 |
135 LayerAnimationElement* FirstElement() const; | 136 LayerAnimationElement* FirstElement() const; |
136 | 137 |
137 private: | 138 private: |
138 friend class LayerAnimatorTestController; | 139 friend class LayerAnimatorTestController; |
139 | 140 |
140 typedef std::vector<linked_ptr<LayerAnimationElement> > Elements; | 141 using Elements = std::vector<std::unique_ptr<LayerAnimationElement>>; |
141 | 142 |
142 FRIEND_TEST_ALL_PREFIXES(LayerAnimatorTest, | 143 FRIEND_TEST_ALL_PREFIXES(LayerAnimatorTest, |
143 ObserverReleasedBeforeAnimationSequenceEnds); | 144 ObserverReleasedBeforeAnimationSequenceEnds); |
144 | 145 |
145 // Notifies the observers that this sequence has been scheduled. | 146 // Notifies the observers that this sequence has been scheduled. |
146 void NotifyScheduled(); | 147 void NotifyScheduled(); |
147 | 148 |
148 // Notifies the observers that this sequence has been started. | 149 // Notifies the observers that this sequence has been started. |
149 void NotifyStarted(); | 150 void NotifyStarted(); |
150 | 151 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
191 double last_progressed_fraction_; | 192 double last_progressed_fraction_; |
192 | 193 |
193 base::WeakPtrFactory<LayerAnimationSequence> weak_ptr_factory_; | 194 base::WeakPtrFactory<LayerAnimationSequence> weak_ptr_factory_; |
194 | 195 |
195 DISALLOW_COPY_AND_ASSIGN(LayerAnimationSequence); | 196 DISALLOW_COPY_AND_ASSIGN(LayerAnimationSequence); |
196 }; | 197 }; |
197 | 198 |
198 } // namespace ui | 199 } // namespace ui |
199 | 200 |
200 #endif // UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ | 201 #endif // UI_COMPOSITOR_LAYER_ANIMATION_SEQUENCE_H_ |
OLD | NEW |