FTXUI 6.1.9
C++ functional terminal UI.
Loading...
Searching...
No Matches
animation.hpp
Go to the documentation of this file.
1// Copyright 2022 Arthur Sonzogni. 全著作権所有。
2// このソースコードの使用は、LICENSEファイルにあるMITライセンスに従います。
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///
19/// @ingroup component
21
22using Clock = std::chrono::steady_clock;
23using TimePoint = std::chrono::time_point<Clock>;
24using Duration = std::chrono::duration<float>;
25
26// Parameter of Component::OnAnimation(param).
27class Params {
28 public:
29 explicit Params(Duration duration) : duration_(duration) {}
30
31 /// このアニメーションステップが表す期間。
32 Duration duration() const { return duration_; }
33
34 private:
35 Duration duration_;
36};
37
38namespace easing {
39using Function = std::function<float(float)>;
40// 線形補間(イージングなし)
41float Linear(float p);
42
43// 二次イージング; p^2
44float QuadraticIn(float p);
45float QuadraticOut(float p);
46float QuadraticInOut(float p);
47
48// 三次イージング; p^3
49float CubicIn(float p);
50float CubicOut(float p);
51float CubicInOut(float p);
52
53// 四次イージング; p^4
54float QuarticIn(float p);
55float QuarticOut(float p);
56float QuarticInOut(float p);
57
58// 五次イージング; p^5
59float QuinticIn(float p);
60float QuinticOut(float p);
61float QuinticInOut(float p);
62
63// サイン波イージング; sin(p * PI/2)
64float SineIn(float p);
65float SineOut(float p);
66float SineInOut(float p);
67
68// 円形イージング; sqrt(1 - p^2)
69float CircularIn(float p);
70float CircularOut(float p);
71float CircularInOut(float p);
72
73// 指数イージング、底2
74float ExponentialIn(float p);
75float ExponentialOut(float p);
76float ExponentialInOut(float p);
77
78// 指数減衰サイン波イージング
79float ElasticIn(float p);
80float ElasticOut(float p);
81float ElasticInOut(float p);
82
83// オーバーシュート三次イージング;
84float BackIn(float p);
85float BackOut(float p);
86float BackInOut(float p);
87
88// 指数減衰バウンスイージング
89float BounceIn(float p);
90float BounceOut(float p);
91float BounceInOut(float p);
92} // namespace easing
93
94class Animator {
95 public:
96 explicit Animator(float* from,
97 float to = 0.f,
98 Duration duration = std::chrono::milliseconds(250),
99 easing::Function easing_function = easing::Linear,
100 Duration delay = std::chrono::milliseconds(0));
101
102 void OnAnimation(Params&);
103
104 float to() const { return to_; }
105
106 private:
107 float* value_;
108 float from_;
109 float to_;
110 Duration duration_;
111 easing::Function easing_function_;
112 Duration current_;
113};
114
115} // namespace ftxui::animation
116
117#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)
Definition animation.hpp:29
Duration duration() const
このアニメーションステップが表す期間。
Definition animation.hpp:32
void RequestAnimationFrame()
RequestAnimationFrameは、次のアニメーションサイクルで新しいフレームが描画されるよう要求する関数です。
FTXUIのftxui::animation::easing::名前空間。
float ElasticIn(float p)
float CircularInOut(float p)
float SineInOut(float p)
float BounceInOut(float p)
float CubicIn(float p)
Definition animation.cpp:50
float CubicInOut(float p)
Definition animation.cpp:63
float Linear(float p)
直線 y = x に基づく
Definition animation.cpp:28
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:85
float QuadraticInOut(float p)
Definition animation.cpp:45
float QuarticOut(float p)
Definition animation.cpp:77
float CircularIn(float p)
float ExponentialOut(float p)
float QuadraticOut(float p)
Definition animation.cpp:38
float QuinticOut(float p)
Definition animation.cpp:99
float QuadraticIn(float p)
放物線 y = x^2 に基づく
Definition animation.cpp:33
float ExponentialIn(float p)
float QuinticIn(float p)
Definition animation.cpp:94
float BounceOut(float p)
float CubicOut(float p)
Definition animation.cpp:55
float ElasticOut(float p)
std::function< float(float)> Function
Definition animation.hpp:39
float QuarticIn(float p)
Definition animation.cpp:72
float QuinticInOut(float p)
FTXUIのftxui::animation::名前空間。
Definition animation.hpp:9
std::chrono::steady_clock Clock
Definition animation.hpp:22
std::chrono::duration< float > Duration
Definition animation.hpp:24
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:23