Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(216)

Unified Diff: cc/animation/layer_animation_controller.cc

Issue 862133002: Update from https://crrev.com/312398 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/animation/layer_animation_controller.cc
diff --git a/cc/animation/layer_animation_controller.cc b/cc/animation/layer_animation_controller.cc
index 1f9e11294f94b84848ead16391e6c57b692c9b6d..5f6beed3e052929b0d08d1ebcd43128032e4f538 100644
--- a/cc/animation/layer_animation_controller.cc
+++ b/cc/animation/layer_animation_controller.cc
@@ -61,11 +61,15 @@ struct HasAnimationId {
};
void LayerAnimationController::RemoveAnimation(int animation_id) {
- animations_.erase(cc::remove_if(&animations_,
- animations_.begin(),
- animations_.end(),
- HasAnimationId(animation_id)),
- animations_.end());
+ auto animations_to_remove =
+ animations_.remove_if(HasAnimationId(animation_id));
+ for (auto it = animations_to_remove; it != animations_.end(); ++it) {
+ if ((*it)->target_property() == Animation::ScrollOffset) {
+ NotifyObserversScrollOffsetAnimationRemoved();
+ break;
+ }
+ }
+ animations_.erase(animations_to_remove, animations_.end());
UpdateActivation(NormalActivation);
}
@@ -85,12 +89,13 @@ struct HasAnimationIdAndProperty {
void LayerAnimationController::RemoveAnimation(
int animation_id,
Animation::TargetProperty target_property) {
- animations_.erase(
- cc::remove_if(&animations_,
- animations_.begin(),
- animations_.end(),
- HasAnimationIdAndProperty(animation_id, target_property)),
- animations_.end());
+ auto animations_to_remove = animations_.remove_if(
+ HasAnimationIdAndProperty(animation_id, target_property));
+ if (target_property == Animation::ScrollOffset &&
+ animations_to_remove != animations_.end())
+ NotifyObserversScrollOffsetAnimationRemoved();
+
+ animations_.erase(animations_to_remove, animations_.end());
UpdateActivation(NormalActivation);
}
@@ -261,16 +266,6 @@ void LayerAnimationController::AddAnimation(scoped_ptr<Animation> animation) {
}
Animation* LayerAnimationController::GetAnimation(
- int group_id,
- Animation::TargetProperty target_property) const {
- for (size_t i = 0; i < animations_.size(); ++i)
- if (animations_[i]->group() == group_id &&
- animations_[i]->target_property() == target_property)
- return animations_[i];
- return 0;
-}
-
-Animation* LayerAnimationController::GetAnimation(
Animation::TargetProperty target_property) const {
for (size_t i = 0; i < animations_.size(); ++i) {
size_t index = animations_.size() - i - 1;
@@ -280,6 +275,13 @@ Animation* LayerAnimationController::GetAnimation(
return 0;
}
+Animation* LayerAnimationController::GetAnimationById(int animation_id) const {
+ for (size_t i = 0; i < animations_.size(); ++i)
+ if (animations_[i]->id() == animation_id)
+ return animations_[i];
+ return nullptr;
+}
+
bool LayerAnimationController::HasActiveAnimation() const {
for (size_t i = 0; i < animations_.size(); ++i) {
if (!animations_[i]->is_finished())
@@ -554,8 +556,7 @@ void LayerAnimationController::PushNewAnimationsToImplThread(
for (size_t i = 0; i < animations_.size(); ++i) {
// If the animation is already running on the impl thread, there is no
// need to copy it over.
- if (controller_impl->GetAnimation(animations_[i]->group(),
- animations_[i]->target_property()))
+ if (controller_impl->GetAnimationById(animations_[i]->id()))
continue;
// If the animation is not running on the impl thread, it does not
@@ -599,8 +600,7 @@ static bool IsCompleted(
if (animation->is_impl_only()) {
return (animation->run_state() == Animation::WaitingForDeletion);
} else {
- return !main_thread_controller->GetAnimation(animation->group(),
- animation->target_property());
+ return !main_thread_controller->GetAnimationById(animation->id());
}
}
@@ -630,8 +630,8 @@ void LayerAnimationController::RemoveAnimationsCompletedOnMainThread(
void LayerAnimationController::PushPropertiesToImplThread(
LayerAnimationController* controller_impl) const {
for (size_t i = 0; i < animations_.size(); ++i) {
- Animation* current_impl = controller_impl->GetAnimation(
- animations_[i]->group(), animations_[i]->target_property());
+ Animation* current_impl =
+ controller_impl->GetAnimationById(animations_[i]->id());
if (current_impl)
animations_[i]->PushPropertiesTo(current_impl);
}
@@ -1034,6 +1034,11 @@ void LayerAnimationController::NotifyObserversAnimationWaitingForDeletion() {
OnAnimationWaitingForDeletion());
}
+void LayerAnimationController::NotifyObserversScrollOffsetAnimationRemoved() {
+ FOR_EACH_OBSERVER(LayerAnimationValueObserver, value_observers_,
+ OnScrollOffsetAnimationRemoved());
+}
+
bool LayerAnimationController::HasValueObserver() {
if (value_observers_.might_have_observers()) {
ObserverListBase<LayerAnimationValueObserver>::Iterator it(

Powered by Google App Engine
This is Rietveld 408576698