| Index: remoting/client/fling_animation.h
|
| diff --git a/remoting/client/fling_animation.h b/remoting/client/fling_animation.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..c7672e99ebe6967ed9ebbc95aafbf60ee6c0b0de
|
| --- /dev/null
|
| +++ b/remoting/client/fling_animation.h
|
| @@ -0,0 +1,56 @@
|
| +// Copyright 2017 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 REMOTING_CLIENT_FLING_ANIMATION_H_
|
| +#define REMOTING_CLIENT_FLING_ANIMATION_H_
|
| +
|
| +#include <memory>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/time/tick_clock.h"
|
| +#include "remoting/client/fling_tracker.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +// This class helps interpolating the positions of an object with the given
|
| +// initial velocity and feeds the change in position back to the callback.
|
| +class FlingAnimation {
|
| + public:
|
| + // arguments are delta_x and delta_y with respect to the positions at previous
|
| + // tick.
|
| + using FlingCallback = base::Callback<void(float, float)>;
|
| +
|
| + FlingAnimation(float time_constant, const FlingCallback& fling_callback);
|
| + ~FlingAnimation();
|
| +
|
| + // (Re)starts the fling animation with the given initial velocity.
|
| + void SetVelocity(float velocity_x, float velocity_y);
|
| +
|
| + bool IsAnimationInProgress() const;
|
| +
|
| + // Moves forward the animation to catch up with current time. Calls the fling
|
| + // callback with the new positions. No-op if fling animation is not in
|
| + // progress.
|
| + void Tick();
|
| +
|
| + // Aborts the animation.
|
| + void Abort();
|
| +
|
| + void SetTickClockForTest(std::unique_ptr<base::TickClock> clock);
|
| +
|
| + private:
|
| + FlingTracker fling_tracker_;
|
| + FlingCallback fling_callback_;
|
| +
|
| + base::TimeTicks fling_start_time_;
|
| +
|
| + std::unique_ptr<base::TickClock> clock_;
|
| +
|
| + // FlingAnimation is neither copyable nor movable.
|
| + FlingAnimation(const FlingAnimation&) = delete;
|
| + FlingAnimation& operator=(const FlingAnimation&) = delete;
|
| +};
|
| +
|
| +} // namespace remoting
|
| +#endif // REMOTING_CLIENT_FLING_ANIMATION_H_
|
|
|