FTXUI 6.1.9
C++ functional terminal UI.
Chargement...
Recherche...
Aucune correspondance
animation.hpp
Aller à la documentation de ce fichier.
1// Copyright 2022 Arthur Sonzogni. Tous droits réservés.
2// L'utilisation de ce code source est régie par la licence MIT qui se trouve dans
3// le fichier LICENSE.
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 est une fonction qui demande à ce qu'une nouvelle trame soit
12/// dessinée lors du prochain cycle d'animation.
13///
14/// @note Cette fonction est typiquement appelée par les composants qui ont besoin de
15/// mettre à jour leur état ou leur apparence au fil du temps, comme les animations ou
16/// les transitions. Ceci est utile lorsque le changement ne dépend pas des
17/// événements vus par le terminal, mais plutôt du temps qui passe.
18///
19/// Les composants qui n'ont pas terminé leur animation peuvent appeler cette fonction pour
20/// demander à ce qu'une nouvelle trame soit dessinée plus tard.
21///
22/// Lorsqu'il n'y a pas de nouveaux événements et pas d'animations à compléter, aucune nouvelle trame n'est
23/// dessinée.
24///
25/// @ingroup component
27
28using Clock = std::chrono::steady_clock;
29using TimePoint = std::chrono::time_point<Clock>;
30using Duration = std::chrono::duration<float>;
31
32// Paramètre de Component::OnAnimation(param).
33class Params {
34 public:
35 explicit Params(Duration duration) : duration_(duration) {}
36
37 /// La durée que représente cette étape d'animation.
38 Duration duration() const { return duration_; }
39
40 private:
41 Duration duration_;
42};
43
44namespace easing {
45using Function = std::function<float(float)>;
46// Interpolation linéaire (sans accélération/décélération)
47float Linear(float p);
48
49// Accélération/décélération quadratique; p^2
50float QuadraticIn(float p);
51float QuadraticOut(float p);
52float QuadraticInOut(float p);
53
54// Accélération/décélération cubique; p^3
55float CubicIn(float p);
56float CubicOut(float p);
57float CubicInOut(float p);
58
59// Accélération/décélération quartique; p^4
60float QuarticIn(float p);
61float QuarticOut(float p);
62float QuarticInOut(float p);
63
64// Accélération/décélération quintique; p^5
65float QuinticIn(float p);
66float QuinticOut(float p);
67float QuinticInOut(float p);
68
69// Accélération/décélération en onde sinusoïdale; sin(p * PI/2)
70float SineIn(float p);
71float SineOut(float p);
72float SineInOut(float p);
73
74// Accélération/décélération circulaire; sqrt(1 - p^2)
75float CircularIn(float p);
76float CircularOut(float p);
77float CircularInOut(float p);
78
79// Accélération/décélération exponentielle, base 2
80float ExponentialIn(float p);
81float ExponentialOut(float p);
82float ExponentialInOut(float p);
83
84// Accélération/décélération en onde sinusoïdale exponentiellement amortie
85float ElasticIn(float p);
86float ElasticOut(float p);
87float ElasticInOut(float p);
88
89// Accélération/décélération cubique avec dépassement;
90float BackIn(float p);
91float BackOut(float p);
92float BackInOut(float p);
93
94// Accélération/décélération de rebond à décroissance exponentielle
95float BounceIn(float p);
96float BounceOut(float p);
97float BounceInOut(float p);
98} // namespace easing
99
100class Animator {
101 public:
102 explicit Animator(float* from,
103 float to = 0.f,
104 Duration duration = std::chrono::milliseconds(250),
105 easing::Function easing_function = easing::Linear,
106 Duration delay = std::chrono::milliseconds(0));
107
108 void OnAnimation(Params&);
109
110 float to() const { return to_; }
111
112 private:
113 float* value_;
114 float from_;
115 float to_;
116 Duration duration_;
117 easing::Function easing_function_;
118 Duration current_;
119};
120
121} // namespace ftxui::animation
122
123#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:35
Duration duration() const
La durée que représente cette étape d'animation.
Definition animation.hpp:38
void RequestAnimationFrame()
RequestAnimationFrame est une fonction qui demande à ce qu'une nouvelle trame soit dessinée lors du p...
Le namespace 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:51
float CubicInOut(float p)
Definition animation.cpp:64
float Linear(float p)
Modélisé d'après la ligne y = x.
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:86
float QuadraticInOut(float p)
Definition animation.cpp:46
float QuarticOut(float p)
Definition animation.cpp:78
float CircularIn(float p)
float ExponentialOut(float p)
float QuadraticOut(float p)
Definition animation.cpp:39
float QuinticOut(float p)
float QuadraticIn(float p)
Modélisé d'après la parabole y = x^2.
Definition animation.cpp:34
float ExponentialIn(float p)
float QuinticIn(float p)
Definition animation.cpp:95
float BounceOut(float p)
float CubicOut(float p)
Definition animation.cpp:56
float ElasticOut(float p)
std::function< float(float)> Function
Definition animation.hpp:45
float QuarticIn(float p)
Definition animation.cpp:73
float QuinticInOut(float p)
Le namespace FTXUI ftxui::animation::
Definition animation.hpp:10
std::chrono::steady_clock Clock
Definition animation.hpp:28
std::chrono::duration< float > Duration
Definition animation.hpp:30
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:29