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 es una función que solicita que se dibuje un nuevo fotograma en el siguiente ciclo de animación.
13///
14/// @note Esta función es típicamente llamada por componentes que necesitan
15/// actualizar su estado o apariencia con el tiempo, como animaciones o
16/// transiciones. Esto es útil cuando el cambio no depende de los
17/// eventos vistos por la terminal, sino del paso del tiempo.
18///
19/// Los componentes que no han completado su animación pueden llamar a esta función para
20/// solicitar que se dibuje un nuevo fotograma más tarde.
21///
22/// Cuando no hay nuevos eventos y no hay animaciones que completar, no se
23/// dibuja ningún nuevo fotograma.
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// Parámetro de Component::OnAnimation(param).
33class FTXUI_EXPORT(COMPONENT) Params {
34 public:
35 explicit Params(Duration duration) : duration_(duration) {}
36
37 /// La duración que representa este paso de animación.
38 Duration duration() const { return duration_; }
39
40 private:
41 Duration duration_;
42};
43
44namespace easing {
45using Function = std::function<float(float)>;
46// Interpolación lineal (sin easing)
47FTXUI_EXPORT(COMPONENT) float Linear(float p);
48
49// Easing cuadrático; p^2
50FTXUI_EXPORT(COMPONENT) float QuadraticIn(float p);
51FTXUI_EXPORT(COMPONENT) float QuadraticOut(float p);
52FTXUI_EXPORT(COMPONENT) float QuadraticInOut(float p);
53
54// Easing cúbico; p^3
55FTXUI_EXPORT(COMPONENT) float CubicIn(float p);
56FTXUI_EXPORT(COMPONENT) float CubicOut(float p);
57FTXUI_EXPORT(COMPONENT) float CubicInOut(float p);
58
59// Easing cuártico; p^4
60FTXUI_EXPORT(COMPONENT) float QuarticIn(float p);
61FTXUI_EXPORT(COMPONENT) float QuarticOut(float p);
62FTXUI_EXPORT(COMPONENT) float QuarticInOut(float p);
63
64// Easing quíntico; p^5
65FTXUI_EXPORT(COMPONENT) float QuinticIn(float p);
66FTXUI_EXPORT(COMPONENT) float QuinticOut(float p);
67FTXUI_EXPORT(COMPONENT) float QuinticInOut(float p);
68
69// Easing de onda sinusoidal; sin(p * PI/2)
70FTXUI_EXPORT(COMPONENT) float SineIn(float p);
71FTXUI_EXPORT(COMPONENT) float SineOut(float p);
72FTXUI_EXPORT(COMPONENT) float SineInOut(float p);
73
74// Easing circular; sqrt(1 - p^2)
75FTXUI_EXPORT(COMPONENT) float CircularIn(float p);
76FTXUI_EXPORT(COMPONENT) float CircularOut(float p);
77FTXUI_EXPORT(COMPONENT) float CircularInOut(float p);
78
79// Easing exponencial, base 2
80FTXUI_EXPORT(COMPONENT) float ExponentialIn(float p);
81FTXUI_EXPORT(COMPONENT) float ExponentialOut(float p);
82FTXUI_EXPORT(COMPONENT) float ExponentialInOut(float p);
83
84// Easing de onda sinusoidal amortiguada exponencialmente
85FTXUI_EXPORT(COMPONENT) float ElasticIn(float p);
86FTXUI_EXPORT(COMPONENT) float ElasticOut(float p);
87FTXUI_EXPORT(COMPONENT) float ElasticInOut(float p);
88
89// Easing cúbico con sobrepaso;
90FTXUI_EXPORT(COMPONENT) float BackIn(float p);
91FTXUI_EXPORT(COMPONENT) float BackOut(float p);
92FTXUI_EXPORT(COMPONENT) float BackInOut(float p);
93
94// Easing de rebote con decaimiento exponencial
95FTXUI_EXPORT(COMPONENT) float BounceIn(float p);
96FTXUI_EXPORT(COMPONENT) float BounceOut(float p);
97FTXUI_EXPORT(COMPONENT) float BounceInOut(float p);
98} // namespace easing
99
100class FTXUI_EXPORT(COMPONENT) 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 */
#define FTXUI_EXPORT(component)
Definition export.hpp:24
El espacio de nombres ftxui::animation::easing:: de FTXUI.
std::function< float(float)> Function
Definition animation.hpp:45
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
void RequestAnimationFrame()
Definition app.cpp:74
std::string value_