FTXUI 6.1.9
C++ functional terminal UI.
载入中...
搜索中...
未找到
animation.hpp
浏览该文件的文档.
1// 版权所有 2022 Arthur Sonzogni. 保留所有权利。
2// 本源代码的使用受 MIT 许可证的约束,该许可证可在 LICENSE 文件中找到。
3#ifndef FTXUI_ANIMATION_HPP
4#define FTXUI_ANIMATION_HPP
5
6#include <chrono> // for milliseconds, duration, steady_clock, time_point
7#include <functional> // for function
8
9namespace ftxui::animation {
10/// @brief RequestAnimationFrame 是一个请求在下一个动画周期中绘制新帧的函数。
11///
12/// @note 此函数通常由需要随时间更新其状态或外观的组件调用,例如动画或过渡。当变化不依赖于终端接收到的事件,而是依赖于时间的推移时,这很有用。
13///
14/// 尚未完成动画的组件可以调用此函数来请求稍后绘制新帧。
15///
16/// 当没有新事件且没有动画需要完成时,不会绘制新帧。
17///
18/// @ingroup component
20
21using Clock = std::chrono::steady_clock;
22using TimePoint = std::chrono::time_point<Clock>;
23using Duration = std::chrono::duration<float>;
24
25// Parameter of Component::OnAnimation(param).
26class Params {
27 public:
28 explicit Params(Duration duration) : duration_(duration) {}
29
30 /// 此动画步骤表示的持续时间。
31 Duration duration() const { return duration_; }
32
33 private:
34 Duration duration_;
35};
36
37namespace easing {
38using Function = std::function<float(float)>;
39// 线性插值(无缓动)
40float Linear(float p);
41
42// 二次缓动;p^2
43float QuadraticIn(float p);
44float QuadraticOut(float p);
45float QuadraticInOut(float p);
46
47// 三次缓动;p^3
48float CubicIn(float p);
49float CubicOut(float p);
50float CubicInOut(float p);
51
52// 四次缓动;p^4
53float QuarticIn(float p);
54float QuarticOut(float p);
55float QuarticInOut(float p);
56
57// 五次缓动;p^5
58float QuinticIn(float p);
59float QuinticOut(float p);
60float QuinticInOut(float p);
61
62// 正弦波缓动;sin(p * PI/2)
63float SineIn(float p);
64float SineOut(float p);
65float SineInOut(float p);
66
67// 圆形缓动;sqrt(1 - p^2)
68float CircularIn(float p);
69float CircularOut(float p);
70float CircularInOut(float p);
71
72// 指数缓动,基数 2
73float ExponentialIn(float p);
74float ExponentialOut(float p);
75float ExponentialInOut(float p);
76
77// 指数衰减正弦波缓动
78float ElasticIn(float p);
79float ElasticOut(float p);
80float ElasticInOut(float p);
81
82// 超调三次缓动;
83float BackIn(float p);
84float BackOut(float p);
85float BackInOut(float p);
86
87// 指数衰减反弹缓动
88float BounceIn(float p);
89float BounceOut(float p);
90float BounceInOut(float p);
91} // namespace easing
92
93class Animator {
94 public:
95 explicit Animator(float* from,
96 float to = 0.f,
97 Duration duration = std::chrono::milliseconds(250),
98 easing::Function easing_function = easing::Linear,
99 Duration delay = std::chrono::milliseconds(0));
100
101 void OnAnimation(Params&);
102
103 float to() const { return to_; }
104
105 private:
106 float* value_;
107 float from_;
108 float to_;
109 Duration duration_;
110 easing::Function easing_function_;
111 Duration current_;
112};
113
114} // namespace ftxui::animation
115
116#endif /* end of include guard: FTXUI_ANIMATION_HPP */
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)
Duration duration() const
此动画步骤表示的持续时间。
void RequestAnimationFrame()
RequestAnimationFrame 是一个请求在下一个动画周期中绘制新帧的函数。
FTXUI ftxui::animation::easing:: 命名空间
float Linear(float p)
模仿直线 y = x
float QuadraticIn(float p)
模仿抛物线 y = x^2
std::function< float(float)> Function
FTXUI ftxui::animation:: 命名空间
std::chrono::steady_clock Clock
std::chrono::duration< float > Duration
std::chrono::time_point< Clock > TimePoint