// Copyright (c) 2011 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.

#ifndef UI_GFX_ANIMATION_ANIMATION_DELEGATE_H_
#define UI_GFX_ANIMATION_ANIMATION_DELEGATE_H_

#include "ui/gfx/animation/animation_export.h"

namespace gfx {

class Animation;
class AnimationContainer;

// AnimationDelegate
//
//  Implement this interface when you want to receive notifications about the
//  state of an animation.
class ANIMATION_EXPORT AnimationDelegate {
 public:
  virtual ~AnimationDelegate() {}

  // Called when an animation has completed.
  virtual void AnimationEnded(const Animation* animation) {}

  // Called when an animation has progressed.
  virtual void AnimationProgressed(const Animation* animation) {}

  // Called when an animation has been canceled.
  virtual void AnimationCanceled(const Animation* animation) {}

  // Called when an animation container has been set. This gives a chance to
  // set a custom animation runner.
  virtual void AnimationContainerWasSet(AnimationContainer* container) {}
};

}  // namespace gfx

#endif  // UI_GFX_ANIMATION_ANIMATION_DELEGATE_H_
