FTXUI  3.0.0
C++ functional terminal UI.
Loading...
Searching...
No Matches
animation.hpp
Go to the documentation of this file.
1#ifndef FTXUI_ANIMATION_HPP
2#define FTXUI_ANIMATION_HPP
3
4#include <chrono> // for milliseconds, duration, steady_clock, time_point
5#include <functional> // for function
6
8
9namespace ftxui {
10
11namespace animation {
12// Components who haven't completed their animation can call this function to
13// request a new frame to be drawn later.
14//
15// When there is no new events and no animations to complete, no new frame is
16// drawn.
18
19using Clock = std::chrono::steady_clock;
20using TimePoint = std::chrono::time_point<Clock>;
21using Duration = std::chrono::duration<double>;
22
23// Parameter of Component::OnAnimation(param).
24class Params {
25 public:
27
28 /// The duration this animation step represents.
29 Duration duration() const { return duration_; }
30
31 private:
32 Duration duration_;
33};
34
35namespace easing {
36using Function = std::function<float(float)>;
37// Linear interpolation (no easing)
38float Linear(float p);
39
40// Quadratic easing; p^2
41float QuadraticIn(float p);
42float QuadraticOut(float p);
43float QuadraticInOut(float p);
44
45// Cubic easing; p^3
46float CubicIn(float p);
47float CubicOut(float p);
48float CubicInOut(float p);
49
50// Quartic easing; p^4
51float QuarticIn(float p);
52float QuarticOut(float p);
53float QuarticInOut(float p);
54
55// Quintic easing; p^5
56float QuinticIn(float p);
57float QuinticOut(float p);
58float QuinticInOut(float p);
59
60// Sine wave easing; sin(p * PI/2)
61float SineIn(float p);
62float SineOut(float p);
63float SineInOut(float p);
64
65// Circular easing; sqrt(1 - p^2)
66float CircularIn(float p);
67float CircularOut(float p);
68float CircularInOut(float p);
69
70// Exponential easing, base 2
71float ExponentialIn(float p);
72float ExponentialOut(float p);
73float ExponentialInOut(float p);
74
75// Exponentially-damped sine wave easing
76float ElasticIn(float p);
77float ElasticOut(float p);
78float ElasticInOut(float p);
79
80// Overshooting cubic easing;
81float BackIn(float p);
82float BackOut(float p);
83float BackInOut(float p);
84
85// Exponentially-decaying bounce easing
86float BounceIn(float p);
87float BounceOut(float p);
88float BounceInOut(float p);
89} // namespace easing
90
91class Animator {
92 public:
93 Animator(float* from,
94 float to = 0.f,
95 Duration duration = std::chrono::milliseconds(250),
96 easing::Function easing_function = easing::Linear,
97 Duration delay = std::chrono::milliseconds(0));
98
99 void OnAnimation(Params&);
100
101 float to() const { return to_; }
102
103 private:
104 float* value_;
105 float from_;
106 float to_;
107 Duration duration_;
108 easing::Function easing_function_;
109 Duration current_;
110};
111
112} // namespace animation
113} // namespace ftxui
114
115#endif /* end of include guard: FTXUI_ANIMATION_HPP */
116
117// Copyright 2022 Arthur Sonzogni. All rights reserved.
118// Use of this source code is governed by the MIT license that can be found in
119// the LICENSE file.
Animator(float *from, float to=0.f, Duration duration=std::chrono::milliseconds(250), easing::Function easing_function=easing::Linear, Duration delay=std::chrono::milliseconds(0))
Params(Duration duration)
Definition animation.hpp:26
Duration duration() const
The duration this animation step represents.
Definition animation.hpp:29
float ElasticIn(float p)
float CircularInOut(float p)
float SineInOut(float p)
float BounceInOut(float p)
float CubicIn(float p)
Definition animation.cpp:55
float CubicInOut(float p)
Definition animation.cpp:68
float Linear(float p)
Definition animation.cpp:29
float BounceIn(float p)
float CircularOut(float p)
float BackInOut(float p)
float ExponentialInOut(float p)
float ElasticInOut(float p)
float QuarticInOut(float p)
Definition animation.cpp:91
float QuadraticInOut(float p)
Definition animation.cpp:46
float QuarticOut(float p)
Definition animation.cpp:83
float CircularIn(float p)
float ExponentialOut(float p)
float QuadraticOut(float p)
Definition animation.cpp:39
float QuinticOut(float p)
float QuadraticIn(float p)
Definition animation.cpp:34
float ExponentialIn(float p)
float QuinticIn(float p)
float BounceOut(float p)
float CubicOut(float p)
Definition animation.cpp:60
float ElasticOut(float p)
std::function< float(float)> Function
Definition animation.hpp:36
float QuarticIn(float p)
Definition animation.cpp:78
float QuinticInOut(float p)
std::chrono::duration< double > Duration
Definition animation.hpp:21
std::chrono::steady_clock Clock
Definition animation.hpp:19
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:20