SMIL:Animation Controller

The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

We need the following features from a global animation controller:

  • Register and unregister active animations
  • Periodically invoke a callback on each active animation
  • Serves a timestamp that's fixed during each animation step
  • Self-tuning animation rate

Should it be per-document or per-view-manager-tree? I suspect per-document.

class nsPresContext {
public:
    nsAnimationController* AnimationController();
};

class nsAnimationController {
public:
    // Animations should be weakly referenced; if the animation object
    // goes away, then it's automatically unregistered
    void RegisterAnimation(nsIAnimation* aAnimation);
    void UnregisterAnimation(nsIAnimation* aAnimation);

    /**
     * This returns the timestamp of the current animation step. It's updated
     * just once per step. Should probably be callable anytime; if it's
     * not in an explicit animation step, we pretend that the current event
     * is an animation step --- that way, starting a bunch of animations
     * during the same event gives them all exactly the same start time.
     */
    PRTime GetCurrentTime();
};

class nsIAnimation : public nsISupportsWeakReference {
public:
    void NotifyAnimationStep();
}