12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2012 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/animation_registrar.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc {
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AnimationRegistrar::AnimationRegistrar() {}
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AnimationRegistrar::~AnimationRegistrar() {
142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  AnimationControllerMap copy = all_animation_controllers_;
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (AnimationControllerMap::iterator iter = copy.begin();
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       iter != copy.end();
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)       ++iter)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    (*iter).second->SetAnimationRegistrar(NULL);
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)scoped_refptr<LayerAnimationController>
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AnimationRegistrar::GetAnimationControllerForId(int id) {
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_refptr<LayerAnimationController> to_return;
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (!ContainsKey(all_animation_controllers_, id)) {
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    to_return = LayerAnimationController::Create(id);
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    to_return->SetAnimationRegistrar(this);
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    all_animation_controllers_[id] = to_return.get();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  } else {
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    to_return = all_animation_controllers_[id];
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return to_return;
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AnimationRegistrar::DidActivateAnimationController(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerAnimationController* controller) {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  active_animation_controllers_[controller->id()] = controller;
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AnimationRegistrar::DidDeactivateAnimationController(
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerAnimationController* controller) {
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (ContainsKey(active_animation_controllers_, controller->id()))
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    active_animation_controllers_.erase(controller->id());
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AnimationRegistrar::RegisterAnimationController(
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerAnimationController* controller) {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  all_animation_controllers_[controller->id()] = controller;
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void AnimationRegistrar::UnregisterAnimationController(
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    LayerAnimationController* controller) {
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  if (ContainsKey(all_animation_controllers_, controller->id()))
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    all_animation_controllers_.erase(controller->id());
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DidDeactivateAnimationController(controller);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace cc
58