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// El uso de este código fuente se rige por la licencia MIT que se puede encontrar en
3// el archivo 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 es una función que solicita que se dibuje un nuevo fotograma en el siguiente ciclo de animación.
12///
13/// @note Esta función es típicamente llamada por componentes que necesitan
14/// actualizar su estado o apariencia con el tiempo, como animaciones o
15/// transiciones. Esto es útil cuando el cambio no depende de los
16/// eventos vistos por la terminal, sino del paso del tiempo.
17///
18/// Los componentes que no han completado su animación pueden llamar a esta función para
19/// solicitar que se dibuje un nuevo fotograma más tarde.
20///
21/// Cuando no hay nuevos eventos y no hay animaciones que completar, no se
22/// dibuja ningún nuevo fotograma.
23///
24/// @ingroup component
26
27using Clock = std::chrono::steady_clock;
28using TimePoint = std::chrono::time_point<Clock>;
29using Duration = std::chrono::duration<float>;
30
31// Parámetro de Component::OnAnimation(param).
32class Params {
33 public:
34 explicit Params(Duration duration) : duration_(duration) {}
35
36 /// La duración que representa este paso de animación.
37 Duration duration() const { return duration_; }
38
39 private:
40 Duration duration_;
41};
42
43namespace easing {
44using Function = std::function<float(float)>;
45// Interpolación lineal (sin easing)
46float Linear(float p);
47
48// Easing cuadrático; p^2
49float QuadraticIn(float p);
50float QuadraticOut(float p);
51float QuadraticInOut(float p);
52
53// Easing cúbico; p^3
54float CubicIn(float p);
55float CubicOut(float p);
56float CubicInOut(float p);
57
58// Easing cuártico; p^4
59float QuarticIn(float p);
60float QuarticOut(float p);
61float QuarticInOut(float p);
62
63// Easing quíntico; p^5
64float QuinticIn(float p);
65float QuinticOut(float p);
66float QuinticInOut(float p);
67
68// Easing de onda sinusoidal; sin(p * PI/2)
69float SineIn(float p);
70float SineOut(float p);
71float SineInOut(float p);
72
73// Easing circular; sqrt(1 - p^2)
74float CircularIn(float p);
75float CircularOut(float p);
76float CircularInOut(float p);
77
78// Easing exponencial, base 2
79float ExponentialIn(float p);
80float ExponentialOut(float p);
81float ExponentialInOut(float p);
82
83// Easing de onda sinusoidal amortiguada exponencialmente
84float ElasticIn(float p);
85float ElasticOut(float p);
86float ElasticInOut(float p);
87
88// Easing cúbico con sobrepaso;
89float BackIn(float p);
90float BackOut(float p);
91float BackInOut(float p);
92
93// Easing de rebote con decaimiento exponencial
94float BounceIn(float p);
95float BounceOut(float p);
96float BounceInOut(float p);
97} // namespace easing
98
99class Animator {
100 public:
101 explicit Animator(float* from,
102 float to = 0.f,
103 Duration duration = std::chrono::milliseconds(250),
104 easing::Function easing_function = easing::Linear,
105 Duration delay = std::chrono::milliseconds(0));
106
107 void OnAnimation(Params&);
108
109 float to() const { return to_; }
110
111 private:
112 float* value_;
113 float from_;
114 float to_;
115 Duration duration_;
116 easing::Function easing_function_;
117 Duration current_;
118};
119
120} // namespace ftxui::animation
121
122#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:34
Duration duration() const
La duración que representa este paso de animación.
Definition animation.hpp:37
void RequestAnimationFrame()
RequestAnimationFrame es una función que solicita que se dibuje un nuevo fotograma en el siguiente ci...
El espacio de nombres ftxui::animation::easing:: de FTXUI.
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)
Modelado según la línea 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)
Modelado según la parábola 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:44
float QuarticIn(float p)
Definition animation.cpp:73
float QuinticInOut(float p)
El espacio de nombres ftxui::animation:: de FTXUI.
Definition animation.hpp:10
std::chrono::steady_clock Clock
Definition animation.hpp:27
std::chrono::duration< float > Duration
Definition animation.hpp:29
std::chrono::time_point< Clock > TimePoint
Definition animation.hpp:28