#ifndef UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_
#define UI_VIEWS_ANIMATION_COMPOSITOR_ANIMATION_RUNNER_H_
#include "base/location.h"
#include "base/memory/raw_ptr.h"
#include "base/time/time.h"
#include "ui/compositor/compositor.h"
#include "ui/compositor/compositor_animation_observer.h"
#include "ui/compositor/compositor_observer.h"
#include "ui/gfx/animation/animation_container.h"
#include "ui/views/views_export.h"
#include "ui/views/widget/widget_observer.h"
namespace views {
class Widget;
class VIEWS_EXPORT CompositorAnimationRunner
: public gfx::AnimationRunner,
public ui::CompositorAnimationObserver,
public WidgetObserver {
public:
explicit CompositorAnimationRunner(
Widget* widget,
const base::Location& location = FROM_HERE);
CompositorAnimationRunner(CompositorAnimationRunner&) = delete;
CompositorAnimationRunner& operator=(CompositorAnimationRunner&) = delete;
~CompositorAnimationRunner() override;
void Stop() override;
void OnAnimationStep(base::TimeTicks timestamp) override;
void OnCompositingShuttingDown(ui::Compositor* compositor) override;
void OnWidgetDestroying(Widget* widget) override;
protected:
void OnStart(base::TimeDelta min_interval, base::TimeDelta elapsed) override;
private:
void StopInternal();
raw_ptr<Widget> widget_;
raw_ptr<ui::Compositor> compositor_ = nullptr;
base::TimeDelta min_interval_ = base::TimeDelta::Max();
base::TimeTicks last_tick_;
};
}
#endif