Tweeny 4.1.0
A Tweening library for modern C++
Loading...
Searching...
No Matches
by-name.h
1/*
2This file is part of the Tweeny library.
3
4Copyright (c) 2016-2026 Leonardo Guilherme Lucena de Freitas
5Copyright (c) 2016 Guilherme R. Costa
6
7Permission is hereby granted, free of charge, to any person obtaining a copy of
8this software and associated documentation files (the "Software"), to deal in
9the Software without restriction, including without limitation the rights to
10use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
11the Software, and to permit persons to whom the Software is furnished to do so,
12subject to the following conditions:
13
14The above copyright notice and this permission notice shall be included in all
15copies or substantial portions of the Software.
16
17THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
19FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
20COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
21IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23*/
24
25#ifndef TWEENY_DETAIL_EASING_BY_NAME_H
26#define TWEENY_DETAIL_EASING_BY_NAME_H
27
28#include <stdexcept>
29#include <string>
30#include <string_view>
31
32namespace tweeny::easing {
33
39struct byNameEasing {
40private:
41 enum class id {
42 linear,
43 def,
44 stepped,
48 cubicIn,
69 backIn,
70 backOut,
75 };
76
77 id id_;
78
79 explicit byNameEasing(id i) : id_(i) {}
80
81 static id parse(std::string_view name) {
82 if (name == "linear") return id::linear;
83 if (name == "def") return id::def;
84 if (name == "stepped") return id::stepped;
85 if (name == "quadraticIn") return id::quadraticIn;
86 if (name == "quadraticOut") return id::quadraticOut;
87 if (name == "quadraticInOut") return id::quadraticInOut;
88 if (name == "cubicIn") return id::cubicIn;
89 if (name == "cubicOut") return id::cubicOut;
90 if (name == "cubicInOut") return id::cubicInOut;
91 if (name == "quarticIn") return id::quarticIn;
92 if (name == "quarticOut") return id::quarticOut;
93 if (name == "quarticInOut") return id::quarticInOut;
94 if (name == "quinticIn") return id::quinticIn;
95 if (name == "quinticOut") return id::quinticOut;
96 if (name == "quinticInOut") return id::quinticInOut;
97 if (name == "sinusoidalIn") return id::sinusoidalIn;
98 if (name == "sinusoidalOut") return id::sinusoidalOut;
99 if (name == "sinusoidalInOut") return id::sinusoidalInOut;
100 if (name == "exponentialIn") return id::exponentialIn;
101 if (name == "exponentialOut") return id::exponentialOut;
102 if (name == "exponentialInOut") return id::exponentialInOut;
103 if (name == "circularIn") return id::circularIn;
104 if (name == "circularOut") return id::circularOut;
105 if (name == "circularInOut") return id::circularInOut;
106 if (name == "elasticIn") return id::elasticIn;
107 if (name == "elasticOut") return id::elasticOut;
108 if (name == "elasticInOut") return id::elasticInOut;
109 if (name == "backIn") return id::backIn;
110 if (name == "backOut") return id::backOut;
111 if (name == "backInOut") return id::backInOut;
112 if (name == "bounceIn") return id::bounceIn;
113 if (name == "bounceOut") return id::bounceOut;
114 if (name == "bounceInOut") return id::bounceInOut;
115 throw std::invalid_argument("unknown easing name: " + std::string(name));
116 }
117
118 friend byNameEasing byName(std::string_view name);
119
120public:
121 template <typename T>
122 T operator()(const float position, T start, T end) const {
123 switch (id_) {
124 case id::linear: return linear(position, start, end);
125 case id::def: return def(position, start, end);
126 case id::stepped: return stepped(position, start, end);
127 case id::quadraticIn: return quadraticIn(position, start, end);
128 case id::quadraticOut: return quadraticOut(position, start, end);
129 case id::quadraticInOut: return quadraticInOut(position, start, end);
130 case id::cubicIn: return cubicIn(position, start, end);
131 case id::cubicOut: return cubicOut(position, start, end);
132 case id::cubicInOut: return cubicInOut(position, start, end);
133 case id::quarticIn: return quarticIn(position, start, end);
134 case id::quarticOut: return quarticOut(position, start, end);
135 case id::quarticInOut: return quarticInOut(position, start, end);
136 case id::quinticIn: return quinticIn(position, start, end);
137 case id::quinticOut: return quinticOut(position, start, end);
138 case id::quinticInOut: return quinticInOut(position, start, end);
139 case id::sinusoidalIn: return sinusoidalIn(position, start, end);
140 case id::sinusoidalOut: return sinusoidalOut(position, start, end);
141 case id::sinusoidalInOut: return sinusoidalInOut(position, start, end);
142 case id::exponentialIn: return exponentialIn(position, start, end);
143 case id::exponentialOut: return exponentialOut(position, start, end);
144 case id::exponentialInOut: return exponentialInOut(position, start, end);
145 case id::circularIn: return circularIn(position, start, end);
146 case id::circularOut: return circularOut(position, start, end);
147 case id::circularInOut: return circularInOut(position, start, end);
148 case id::elasticIn: return elasticIn(position, start, end);
149 case id::elasticOut: return elasticOut(position, start, end);
150 case id::elasticInOut: return elasticInOut(position, start, end);
151 case id::backIn: return backIn(position, start, end);
152 case id::backOut: return backOut(position, start, end);
153 case id::backInOut: return backInOut(position, start, end);
154 case id::bounceIn: return bounceIn(position, start, end);
155 case id::bounceOut: return bounceOut(position, start, end);
156 case id::bounceInOut: return bounceInOut(position, start, end);
157 }
158 throw std::invalid_argument("invalid easing id");
159 }
160};
161
178inline byNameEasing byName(std::string_view name) {
179 return byNameEasing{byNameEasing::parse(name)};
180}
181
182} // namespace tweeny::easing
183
184#endif // TWEENY_DETAIL_EASING_BY_NAME_H
constexpr detail::elasticInEasing elasticIn
Elastic easing with oscillating spring-like motion at the start.
Definition easing.h:618
constexpr detail::quadraticInEasing quadraticIn
Quadratic polynomial easing (t²) with gentle acceleration.
Definition easing.h:993
byNameEasing byName(std::string_view name)
Select a bundled easing by its identifier name.
Definition by-name.h:178
constexpr detail::quinticInEasing quinticIn
Quintic polynomial easing (t⁵) with very strong acceleration.
Definition easing.h:1220
constexpr detail::quadraticInOutEasing quadraticInOut
Quadratic polynomial easing with gentle acceleration and deceleration.
Definition easing.h:1069
constexpr detail::circularInEasing circularIn
Circular easing based on quarter-circle arc for smooth acceleration.
Definition easing.h:337
constexpr detail::sinusoidalInOutEasing sinusoidalInOut
Sinusoidal easing with smooth acceleration and deceleration.
Definition easing.h:1413
constexpr detail::quarticOutEasing quarticOut
Quartic polynomial easing (t⁴) with strong deceleration.
Definition easing.h:1146
constexpr detail::defaultEasing def
Default easing function, alias for linear easing.
Definition easing.h:569
constexpr detail::exponentialInOutEasing exponentialInOut
Exponential easing with extreme acceleration and deceleration.
Definition easing.h:899
constexpr detail::quinticOutEasing quinticOut
Quintic polynomial easing (t⁵) with very strong deceleration.
Definition easing.h:1261
constexpr detail::elasticInOutEasing elasticInOut
Elastic easing combining spring oscillation at both start and end.
Definition easing.h:738
constexpr detail::backInOutEasing backInOut
Easing function combining anticipation at the start and overshoot at the end.
Definition easing.h:171
constexpr detail::cubicInEasing cubicIn
Cubic polynomial easing (t³) with moderate acceleration.
Definition easing.h:457
constexpr detail::circularOutEasing circularOut
Circular easing based on quarter-circle arc for smooth deceleration.
Definition easing.h:377
constexpr detail::backInEasing backIn
Easing function that creates anticipation by pulling back before moving forward.
Definition easing.h:91
constexpr detail::sinusoidalOutEasing sinusoidalOut
Sinusoidal easing based on sine wave for smooth deceleration.
Definition easing.h:1374
constexpr detail::cubicInOutEasing cubicInOut
Cubic polynomial easing with balanced acceleration and deceleration.
Definition easing.h:546
constexpr detail::quarticInEasing quarticIn
Quartic polynomial easing (t⁴) with strong acceleration.
Definition easing.h:1106
constexpr detail::linearEasing linear
Linear easing function with constant velocity throughout the animation.
Definition easing.h:956
constexpr detail::exponentialInEasing exponentialIn
Exponential easing with very slow start and explosive acceleration.
Definition easing.h:791
constexpr detail::sinusoidalInEasing sinusoidalIn
Sinusoidal easing based on sine wave for smooth acceleration.
Definition easing.h:1335
constexpr detail::cubicOutEasing cubicOut
Cubic polynomial easing (t³) with moderate deceleration.
Definition easing.h:505
constexpr detail::backOutEasing backOut
Easing function that overshoots the target before settling back.
Definition easing.h:131
constexpr detail::steppedEasing stepped
Stepped easing that holds the start value until the keyframe completes.
Definition easing.h:1465
constexpr detail::bounceOutEasing bounceOut
Bounce easing simulating a ball dropping and bouncing to rest.
Definition easing.h:259
constexpr detail::quinticInOutEasing quinticInOut
Quintic polynomial easing with very strong acceleration and deceleration.
Definition easing.h:1298
constexpr detail::quadraticOutEasing quadraticOut
Quadratic polynomial easing (t²) with gentle deceleration.
Definition easing.h:1033
constexpr detail::quarticInOutEasing quarticInOut
Quartic polynomial easing with strong acceleration and deceleration.
Definition easing.h:1183
constexpr detail::elasticOutEasing elasticOut
Elastic easing with spring-like oscillation at the end.
Definition easing.h:678
constexpr detail::exponentialOutEasing exponentialOut
Exponential easing with explosive start and gradual slow-down.
Definition easing.h:843
constexpr detail::bounceInOutEasing bounceInOut
Bounce easing with bouncing at both start and end.
Definition easing.h:298
constexpr detail::bounceInEasing bounceIn
Bounce easing simulating a ball bouncing with increasing height at the start.
Definition easing.h:209
constexpr detail::circularInOutEasing circularInOut
Circular easing with smooth acceleration and deceleration.
Definition easing.h:416
Contains all built-in easing functions for controlling animation curves.
Definition by-name.h:32
friend byNameEasing byName(std::string_view name)
Select a bundled easing by its identifier name.
Definition by-name.h:178