1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CC_ANIMATION_ANIMATION_REGISTRAR_H_ 6 #define CC_ANIMATION_ANIMATION_REGISTRAR_H_ 7 8 #include "base/containers/hash_tables.h" 9 #include "base/memory/ref_counted.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "cc/base/cc_export.h" 12 13 namespace cc { 14 15 class LayerAnimationController; 16 17 class CC_EXPORT AnimationRegistrar { 18 public: 19 typedef base::hash_map<int, LayerAnimationController*> AnimationControllerMap; 20 Create()21 static scoped_ptr<AnimationRegistrar> Create() { 22 return make_scoped_ptr(new AnimationRegistrar()); 23 } 24 25 virtual ~AnimationRegistrar(); 26 27 // If an animation has been registered for the given id, return it. Otherwise 28 // creates a new one and returns a scoped_refptr to it. 29 scoped_refptr<LayerAnimationController> GetAnimationControllerForId(int id); 30 31 // Registers the given animation controller as active. An active animation 32 // controller is one that has a running animation that needs to be ticked. 33 void DidActivateAnimationController(LayerAnimationController* controller); 34 35 // Unregisters the given animation controller. When this happens, the 36 // animation controller will no longer be ticked (since it's not active). It 37 // is not an error to call this function with a deactivated controller. 38 void DidDeactivateAnimationController(LayerAnimationController* controller); 39 40 // Registers the given controller as alive. 41 void RegisterAnimationController(LayerAnimationController* controller); 42 43 // Unregisters the given controller as alive. 44 void UnregisterAnimationController(LayerAnimationController* controller); 45 active_animation_controllers()46 const AnimationControllerMap& active_animation_controllers() const { 47 return active_animation_controllers_; 48 } 49 all_animation_controllers()50 const AnimationControllerMap& all_animation_controllers() const { 51 return all_animation_controllers_; 52 } 53 set_supports_scroll_animations(bool supports_scroll_animations)54 void set_supports_scroll_animations(bool supports_scroll_animations) { 55 supports_scroll_animations_ = supports_scroll_animations; 56 } 57 supports_scroll_animations()58 bool supports_scroll_animations() { return supports_scroll_animations_; } 59 60 private: 61 AnimationRegistrar(); 62 63 AnimationControllerMap active_animation_controllers_; 64 AnimationControllerMap all_animation_controllers_; 65 66 bool supports_scroll_animations_; 67 68 DISALLOW_COPY_AND_ASSIGN(AnimationRegistrar); 69 }; 70 71 } // namespace cc 72 73 #endif // CC_ANIMATION_ANIMATION_REGISTRAR_H_ 74