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. 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
9
11/// @brief RequestAnimationFrame 是一個函式,它請求在下一個動畫週期中繪製新畫面。
12///
13/// @note 此函式通常由需要隨時間更新其狀態或外觀的元件呼叫,例如動畫或轉場。
14/// 當變更不依賴於終端機接收到的事件,而是依賴於時間的推移時,這非常有用。
15///
16/// 尚未完成動畫的元件可以呼叫此函式,以請求稍後繪製新畫面。
17///
18/// 當沒有新事件且沒有動畫要完成時,不會繪製新畫面。
19///
20/// @ingroup component
22
23using Clock = std::chrono::steady_clock;
24using TimePoint = std::chrono::time_point<Clock>;
25using Duration = std::chrono::duration<float>;
26
27// Parameter of Component::OnAnimation(param).
28class Params {
29 public:
30 explicit Params(Duration duration) : duration_(duration) {}
31
32 /// 此動畫步驟表示的持續時間。
33 Duration duration() const { return duration_; }
34
35 private:
36 Duration duration_;
37};
38
39namespace easing {
40using Function = std::function<float(float)>;
41// 線性插值(無緩動)
42float Linear(float p);
43
44// 二次緩動;p^2
45float QuadraticIn(float p);
46float QuadraticOut(float p);
47float QuadraticInOut(float p);
48
49// 三次緩動;p^3
50float CubicIn(float p);
51float CubicOut(float p);
52float CubicInOut(float p);
53
54// 四次緩動;p^4
55float QuarticIn(float p);
56float QuarticOut(float p);
57float QuarticInOut(float p);
58
59// 五次緩動;p^5
60float QuinticIn(float p);
61float QuinticOut(float p);
62float QuinticInOut(float p);
63
64// 正弦波緩動;sin(p * PI/2)
65float SineIn(float p);
66float SineOut(float p);
67float SineInOut(float p);
68
69// 圓形緩動;sqrt(1 - p^2)
70float CircularIn(float p);
71float CircularOut(float p);
72float CircularInOut(float p);
73
74// 指數緩動,基數 2
75float ExponentialIn(float p);
76float ExponentialOut(float p);
77float ExponentialInOut(float p);
78
79// 指數衰減正弦波緩動
80float ElasticIn(float p);
81float ElasticOut(float p);
82float ElasticInOut(float p);
83
84// 超調三次緩動;
85float BackIn(float p);
86float BackOut(float p);
87float BackInOut(float p);
88
89// 指數衰減彈跳緩動
90float BounceIn(float p);
91float BounceOut(float p);
92float BounceInOut(float p);
93} // namespace easing
94
95class Animator {
96 public:
97 explicit Animator(float* from,
98 float to = 0.f,
99 Duration duration = std::chrono::milliseconds(250),
100 easing::Function easing_function = easing::Linear,
101 Duration delay = std::chrono::milliseconds(0));
102
103 void OnAnimation(Params&);
104
105 float to() const { return to_; }
106
107 private:
108 float* value_;
109 float from_;
110 float to_;
111 Duration duration_;
112 easing::Function easing_function_;
113 Duration current_;
114};
115
116} // namespace ftxui::animation
117
118#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:30
Duration duration() const
此動畫步驟表示的持續時間。
Definition animation.hpp:33
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:49
float CubicInOut(float p)
Definition animation.cpp:62
float Linear(float p)
模仿直線 y = x
Definition animation.cpp:27
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:84
float QuadraticInOut(float p)
Definition animation.cpp:44
float QuarticOut(float p)
Definition animation.cpp:76
float CircularIn(float p)
float ExponentialOut(float p)
float QuadraticOut(float p)
Definition animation.cpp:37
float QuinticOut(float p)
Definition animation.cpp:98
float QuadraticIn(float p)
模仿拋物線 y = x^2
Definition animation.cpp:32
float ExponentialIn(float p)
float QuinticIn(float p)
Definition animation.cpp:93
float BounceOut(float p)
float CubicOut(float p)
Definition animation.cpp:54
float ElasticOut(float p)
std::function< float(float)> Function
Definition animation.hpp:40
float QuarticIn(float p)
Definition animation.cpp:71
float QuinticInOut(float p)
FTXUI ftxui::animation:: 命名空間
Definition animation.hpp:10
std::chrono::steady_clock Clock
Definition animation.hpp:23
std::chrono::duration< float > Duration
Definition animation.hpp:25
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:24