blob: 7e156470c89018501f7529aab0000b027a62436c [file] [log] [blame]
// Copyright 2019 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_RUNNER_H_
#define UI_GFX_ANIMATION_ANIMATION_RUNNER_H_
#include <memory>
#include "base/callback.h"
#include "base/time/time.h"
#include "ui/gfx/animation/animation_export.h"
namespace gfx {
// Interface for custom animation runner. CompositorAnimationRunner can control
// animation tick with this.
class ANIMATION_EXPORT AnimationRunner {
public:
// Creates a default AnimationRunner based on base::Timer. Ideally,
// we should prefer the compositor-based animation runner to this.
// TODO(https://crbug.com/953585): Remove this altogether.
static std::unique_ptr<AnimationRunner> CreateDefaultAnimationRunner();
AnimationRunner(const AnimationRunner&) = delete;
AnimationRunner& operator=(const AnimationRunner&) = delete;
virtual ~AnimationRunner();
// Sets the provided |step| callback, then calls OnStart() with the provided
// |min_interval| to allow the subclass to actually begin animating.
// Subclasses are expected to call Step() periodically to drive the animation.
void Start(base::TimeDelta min_interval,
base::RepeatingCallback<void(base::TimeTicks)> step);
// Called when subclasses don't need to call Step() anymore.
virtual void Stop() = 0;
protected:
AnimationRunner();
// Called when subclasses should start calling Step() periodically to
// drive the animation.
virtual void OnStart(base::TimeDelta min_interval) = 0;
// Advances the animation based on |tick|.
void Step(base::TimeTicks tick);
private:
friend class AnimationContainerTestApi;
// Advances the animation manually for testing.
void SetAnimationTimeForTesting(base::TimeTicks time);
base::RepeatingCallback<void(base::TimeTicks)> step_;
};
} // namespace gfx
#endif // UI_GFX_ANIMATION_ANIMATION_RUNNER_H_