Index: components/mus/ws/animation_runner.cc |
diff --git a/components/mus/ws/animation_runner.cc b/components/mus/ws/animation_runner.cc |
deleted file mode 100644 |
index 080fb2c0f45cde3c4b9e8077d5269f390f39c76e..0000000000000000000000000000000000000000 |
--- a/components/mus/ws/animation_runner.cc |
+++ /dev/null |
@@ -1,163 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "components/mus/ws/animation_runner.h" |
- |
-#include "base/memory/scoped_vector.h" |
-#include "components/mus/ws/animation_runner_observer.h" |
-#include "components/mus/ws/scheduled_animation_group.h" |
-#include "components/mus/ws/server_window.h" |
- |
-namespace mus { |
-namespace ws { |
-namespace { |
- |
-bool ConvertWindowAndAnimationPairsToScheduledAnimationGroups( |
- const std::vector<AnimationRunner::WindowAndAnimationPair>& pairs, |
- AnimationRunner::AnimationId id, |
- base::TimeTicks now, |
- std::vector<std::unique_ptr<ScheduledAnimationGroup>>* groups) { |
- for (const auto& window_animation_pair : pairs) { |
- DCHECK(window_animation_pair.first); |
- DCHECK(window_animation_pair.second); |
- std::unique_ptr<ScheduledAnimationGroup> group( |
- ScheduledAnimationGroup::Create(window_animation_pair.first, now, id, |
- *(window_animation_pair.second))); |
- if (!group.get()) |
- return false; |
- groups->push_back(std::move(group)); |
- } |
- return true; |
-} |
- |
-} // namespace |
- |
-AnimationRunner::AnimationRunner(base::TimeTicks now) |
- : next_id_(1), last_tick_time_(now) {} |
- |
-AnimationRunner::~AnimationRunner() {} |
- |
-void AnimationRunner::AddObserver(AnimationRunnerObserver* observer) { |
- observers_.AddObserver(observer); |
-} |
- |
-void AnimationRunner::RemoveObserver(AnimationRunnerObserver* observer) { |
- observers_.RemoveObserver(observer); |
-} |
- |
-AnimationRunner::AnimationId AnimationRunner::Schedule( |
- const std::vector<WindowAndAnimationPair>& pairs, |
- base::TimeTicks now) { |
- DCHECK_GE(now, last_tick_time_); |
- |
- const AnimationId animation_id = next_id_++; |
- std::vector<std::unique_ptr<ScheduledAnimationGroup>> groups; |
- if (!ConvertWindowAndAnimationPairsToScheduledAnimationGroups( |
- pairs, animation_id, now, &groups)) { |
- return 0; |
- } |
- |
- // Cancel any animations for the affected windows. If the cancelled animations |
- // also animated properties that are not animated by the new group - instantly |
- // set those to the target value. |
- for (auto& group : groups) { |
- ScheduledAnimationGroup* current_group = |
- window_to_animation_map_[group->window()].get(); |
- if (current_group) |
- current_group->SetValuesToTargetValuesForPropertiesNotIn(*group.get()); |
- |
- CancelAnimationForWindowImpl(group->window(), CANCEL_SOURCE_SCHEDULE); |
- } |
- |
- // Update internal maps |
- for (auto& group : groups) { |
- group->ObtainStartValues(); |
- ServerWindow* window = group->window(); |
- window_to_animation_map_[window] = std::move(group); |
- DCHECK(!id_to_windows_map_[animation_id].count(window)); |
- id_to_windows_map_[animation_id].insert(window); |
- } |
- |
- FOR_EACH_OBSERVER(AnimationRunnerObserver, observers_, |
- OnAnimationScheduled(animation_id)); |
- return animation_id; |
-} |
- |
-void AnimationRunner::CancelAnimation(AnimationId id) { |
- if (id_to_windows_map_.count(id) == 0) |
- return; |
- |
- std::set<ServerWindow*> windows(id_to_windows_map_[id]); |
- for (ServerWindow* window : windows) |
- CancelAnimationForWindow(window); |
-} |
- |
-void AnimationRunner::CancelAnimationForWindow(ServerWindow* window) { |
- CancelAnimationForWindowImpl(window, CANCEL_SOURCE_CANCEL); |
-} |
- |
-void AnimationRunner::Tick(base::TimeTicks time) { |
- DCHECK(time >= last_tick_time_); |
- last_tick_time_ = time; |
- if (window_to_animation_map_.empty()) |
- return; |
- |
- // The animation ids of any windows whose animation completes are added here. |
- // We notify after processing all windows so that if an observer mutates us in |
- // some way we're aren't left in a weird state. |
- std::set<AnimationId> animations_completed; |
- for (WindowToAnimationMap::iterator i = window_to_animation_map_.begin(); |
- i != window_to_animation_map_.end();) { |
- bool animation_done = i->second->Tick(time); |
- if (animation_done) { |
- const AnimationId animation_id = i->second->id(); |
- ServerWindow* window = i->first; |
- ++i; |
- bool animation_completed = RemoveWindowFromMaps(window); |
- if (animation_completed) |
- animations_completed.insert(animation_id); |
- } else { |
- ++i; |
- } |
- } |
- for (const AnimationId& id : animations_completed) { |
- FOR_EACH_OBSERVER(AnimationRunnerObserver, observers_, OnAnimationDone(id)); |
- } |
-} |
- |
-void AnimationRunner::CancelAnimationForWindowImpl(ServerWindow* window, |
- CancelSource source) { |
- if (!window_to_animation_map_[window]) |
- return; |
- |
- const AnimationId animation_id = window_to_animation_map_[window]->id(); |
- if (RemoveWindowFromMaps(window)) { |
- // This was the last window in the group. |
- if (source == CANCEL_SOURCE_CANCEL) { |
- FOR_EACH_OBSERVER(AnimationRunnerObserver, observers_, |
- OnAnimationCanceled(animation_id)); |
- } else { |
- FOR_EACH_OBSERVER(AnimationRunnerObserver, observers_, |
- OnAnimationInterrupted(animation_id)); |
- } |
- } |
-} |
- |
-bool AnimationRunner::RemoveWindowFromMaps(ServerWindow* window) { |
- DCHECK(window_to_animation_map_[window]); |
- |
- const AnimationId animation_id = window_to_animation_map_[window]->id(); |
- window_to_animation_map_.erase(window); |
- |
- DCHECK(id_to_windows_map_.count(animation_id)); |
- id_to_windows_map_[animation_id].erase(window); |
- if (!id_to_windows_map_[animation_id].empty()) |
- return false; |
- |
- id_to_windows_map_.erase(animation_id); |
- return true; |
-} |
- |
-} // namespace ws |
-} // namespace mus |