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 #include "ui/compositor/layer_animator.h" | 5 #include "ui/compositor/layer_animator.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 | 10 |
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
128 SwitchToLayer(delegate ? delegate->GetCcLayer() : nullptr); | 128 SwitchToLayer(delegate ? delegate->GetCcLayer() : nullptr); |
129 delegate_ = delegate; | 129 delegate_ = delegate; |
130 if (delegate_ && is_started_) { | 130 if (delegate_ && is_started_) { |
131 LayerAnimatorCollection* collection = GetLayerAnimatorCollection(); | 131 LayerAnimatorCollection* collection = GetLayerAnimatorCollection(); |
132 if (collection) | 132 if (collection) |
133 collection->StartAnimator(this); | 133 collection->StartAnimator(this); |
134 } | 134 } |
135 } | 135 } |
136 | 136 |
137 void LayerAnimator::SwitchToLayer(scoped_refptr<cc::Layer> new_layer) { | 137 void LayerAnimator::SwitchToLayer(scoped_refptr<cc::Layer> new_layer) { |
138 // Release ElementAnimations state for old layer. | |
139 element_animations_state_ = nullptr; | |
140 | |
141 if (delegate_) | 138 if (delegate_) |
142 DetachLayerFromAnimationPlayer(); | 139 DetachLayerFromAnimationPlayer(); |
143 if (new_layer) | 140 if (new_layer) |
144 AttachLayerToAnimationPlayer(new_layer->id()); | 141 AttachLayerToAnimationPlayer(new_layer->id()); |
145 } | 142 } |
146 | 143 |
147 void LayerAnimator::SetCompositor(Compositor* compositor) { | 144 void LayerAnimator::AttachLayerAndTimeline(Compositor* compositor) { |
| 145 DCHECK(compositor); |
| 146 |
| 147 cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline(); |
| 148 DCHECK(timeline); |
| 149 timeline->AttachPlayer(animation_player_); |
| 150 |
| 151 DCHECK(delegate_->GetCcLayer()); |
| 152 AttachLayerToAnimationPlayer(delegate_->GetCcLayer()->id()); |
| 153 } |
| 154 |
| 155 void LayerAnimator::DetachLayerAndTimeline(Compositor* compositor) { |
148 DCHECK(compositor); | 156 DCHECK(compositor); |
149 | 157 |
150 cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline(); | 158 cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline(); |
151 DCHECK(timeline); | 159 DCHECK(timeline); |
152 | 160 |
153 DCHECK(delegate_->GetCcLayer()); | |
154 | |
155 // Register ElementAnimations so it will be picked up by | |
156 // AnimationHost::RegisterPlayerForLayer via | |
157 // AnimationHost::GetElementAnimationsForLayerId. | |
158 if (element_animations_state_) { | |
159 DCHECK_EQ(element_animations_state_->element_id().primaryId, | |
160 delegate_->GetCcLayer()->id()); | |
161 timeline->animation_host()->RegisterElementAnimations( | |
162 element_animations_state_.get()); | |
163 } | |
164 | |
165 timeline->AttachPlayer(animation_player_); | |
166 | |
167 AttachLayerToAnimationPlayer(delegate_->GetCcLayer()->id()); | |
168 | |
169 // Release ElementAnimations state. | |
170 element_animations_state_ = nullptr; | |
171 } | |
172 | |
173 void LayerAnimator::ResetCompositor(Compositor* compositor) { | |
174 DCHECK(compositor); | |
175 | |
176 cc::AnimationTimeline* timeline = compositor->GetAnimationTimeline(); | |
177 DCHECK(timeline); | |
178 | |
179 cc::ElementId element_id(animation_player_->element_id()); | |
180 | |
181 // Store a reference to ElementAnimations (if any) | |
182 // so it may be picked up in LayerAnimator::SetCompositor. | |
183 if (element_id) { | |
184 element_animations_state_ = | |
185 timeline->animation_host()->GetElementAnimationsForElementId( | |
186 element_id); | |
187 } | |
188 | |
189 DetachLayerFromAnimationPlayer(); | 161 DetachLayerFromAnimationPlayer(); |
190 | |
191 timeline->DetachPlayer(animation_player_); | 162 timeline->DetachPlayer(animation_player_); |
192 } | 163 } |
193 | 164 |
194 void LayerAnimator::AttachLayerToAnimationPlayer(int layer_id) { | 165 void LayerAnimator::AttachLayerToAnimationPlayer(int layer_id) { |
195 // For ui, layer and element ids are equivalent. | 166 // For ui, layer and element ids are equivalent. |
196 cc::ElementId element_id(layer_id, 0); | 167 cc::ElementId element_id(layer_id, 0); |
197 if (!animation_player_->element_id()) | 168 if (!animation_player_->element_id()) |
198 animation_player_->AttachElement(element_id); | 169 animation_player_->AttachElement(element_id); |
199 else | 170 else |
200 DCHECK_EQ(animation_player_->element_id(), element_id); | 171 DCHECK_EQ(animation_player_->element_id(), element_id); |
(...skipping 762 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
963 const base::WeakPtr<LayerAnimationSequence>& sequence) | 934 const base::WeakPtr<LayerAnimationSequence>& sequence) |
964 : sequence_(sequence) { | 935 : sequence_(sequence) { |
965 } | 936 } |
966 | 937 |
967 LayerAnimator::RunningAnimation::RunningAnimation( | 938 LayerAnimator::RunningAnimation::RunningAnimation( |
968 const RunningAnimation& other) = default; | 939 const RunningAnimation& other) = default; |
969 | 940 |
970 LayerAnimator::RunningAnimation::~RunningAnimation() { } | 941 LayerAnimator::RunningAnimation::~RunningAnimation() { } |
971 | 942 |
972 } // namespace ui | 943 } // namespace ui |
OLD | NEW |