FTXUI 7.0.3
C++ functional terminal UI.
Loading...
Searching...
No Matches
animation.hpp
Go to the documentation of this file.
1// Copyright 2022 Arthur Sonzogni. All rights reserved.
2// Use of this source code is governed by the MIT license that can be found in
3// the LICENSE file.
4#ifndef FTXUI_ANIMATION_HPP
5#define FTXUI_ANIMATION_HPP
6
7#include <chrono> // for milliseconds, duration, steady_clock, time_point
8#include <functional> // for function
10
12/// @brief RequestAnimationFrameは、次のアニメーションサイクルで新しいフレームが描画されるよう要求する関数です。
13///
14/// @note この関数は、アニメーションやトランジションなど、時間とともに状態や外観を更新する必要があるコンポーネントによって通常呼び出されます。
15/// これは、変更が端末によって検出されるイベントに依存せず、時間の経過に依存する場合に役立ちます。
16///
17/// アニメーションが完了していないコンポーネントは、この関数を呼び出して、後で新しいフレームが描画されるよう要求できます。
18///
19/// 新しいイベントがなく、完了するアニメーションがない場合、新しいフレームは描画されません。
20///
21/// @ingroup component
23
24using Clock = std::chrono::steady_clock;
25using TimePoint = std::chrono::time_point<Clock>;
26using Duration = std::chrono::duration<float>;
27
28// Component::OnAnimation(param)のパラメータ。
29class FTXUI_EXPORT(COMPONENT) Params {
30 public:
31 explicit Params(Duration duration) : duration_(duration) {}
32
33 /// このアニメーションステップが表す長さ。
34 Duration duration() const { return duration_; }
35
36 private:
37 Duration duration_;
38};
39
40namespace easing {
41using Function = std::function<float(float)>;
42// 線形補間(イージングなし)
43FTXUI_EXPORT(COMPONENT) float Linear(float p);
44
45// 二次イージング; p^2
46FTXUI_EXPORT(COMPONENT) float QuadraticIn(float p);
47FTXUI_EXPORT(COMPONENT) float QuadraticOut(float p);
48FTXUI_EXPORT(COMPONENT) float QuadraticInOut(float p);
49
50// 三次イージング; p^3
51FTXUI_EXPORT(COMPONENT) float CubicIn(float p);
52FTXUI_EXPORT(COMPONENT) float CubicOut(float p);
53FTXUI_EXPORT(COMPONENT) float CubicInOut(float p);
54
55// 四次イージング; p^4
56FTXUI_EXPORT(COMPONENT) float QuarticIn(float p);
57FTXUI_EXPORT(COMPONENT) float QuarticOut(float p);
58FTXUI_EXPORT(COMPONENT) float QuarticInOut(float p);
59
60// 五次イージング; p^5
61FTXUI_EXPORT(COMPONENT) float QuinticIn(float p);
62FTXUI_EXPORT(COMPONENT) float QuinticOut(float p);
63FTXUI_EXPORT(COMPONENT) float QuinticInOut(float p);
64
65// サイン波イージング; sin(p * PI/2)
66FTXUI_EXPORT(COMPONENT) float SineIn(float p);
67FTXUI_EXPORT(COMPONENT) float SineOut(float p);
68FTXUI_EXPORT(COMPONENT) float SineInOut(float p);
69
70// 円形イージング; sqrt(1 - p^2)
71FTXUI_EXPORT(COMPONENT) float CircularIn(float p);
72FTXUI_EXPORT(COMPONENT) float CircularOut(float p);
73FTXUI_EXPORT(COMPONENT) float CircularInOut(float p);
74
75// 指数イージング、底2
76FTXUI_EXPORT(COMPONENT) float ExponentialIn(float p);
77FTXUI_EXPORT(COMPONENT) float ExponentialOut(float p);
78FTXUI_EXPORT(COMPONENT) float ExponentialInOut(float p);
79
80// 指数減衰する正弦波イージング
81FTXUI_EXPORT(COMPONENT) float ElasticIn(float p);
82FTXUI_EXPORT(COMPONENT) float ElasticOut(float p);
83FTXUI_EXPORT(COMPONENT) float ElasticInOut(float p);
84
85// オーバーシュートする三次イージング;
86FTXUI_EXPORT(COMPONENT) float BackIn(float p);
87FTXUI_EXPORT(COMPONENT) float BackOut(float p);
88FTXUI_EXPORT(COMPONENT) float BackInOut(float p);
89
90// 指数的に減衰するバウンスイージング
91FTXUI_EXPORT(COMPONENT) float BounceIn(float p);
92FTXUI_EXPORT(COMPONENT) float BounceOut(float p);
93FTXUI_EXPORT(COMPONENT) float BounceInOut(float p);
94} // namespace easing
95
96class FTXUI_EXPORT(COMPONENT) Animator {
97 public:
98 explicit Animator(float* from,
99 float to = 0.f,
100 Duration duration = std::chrono::milliseconds(250),
101 easing::Function easing_function = easing::Linear,
102 Duration delay = std::chrono::milliseconds(0));
103
104 void OnAnimation(Params&);
105
106 float to() const { return to_; }
107
108 private:
109 float* value_;
110 float from_;
111 float to_;
112 Duration duration_;
113 easing::Function easing_function_;
114 Duration current_;
115};
116
117} // namespace ftxui::animation
118
119#endif /* end of include guard: FTXUI_ANIMATION_HPP */
#define FTXUI_EXPORT(component)
Definition export.hpp:25
FTXUIのftxui::animation::easing::名前空間
std::function< float(float)> Function
Definition animation.hpp:41
std::chrono::steady_clock Clock
Definition animation.hpp:24
std::chrono::duration< float > Duration
Definition animation.hpp:26
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:25
void RequestAnimationFrame()
Definition app.cpp:74
std::string value_