25#ifndef TWEENY_DETAIL_EASING_BY_NAME_H
26#define TWEENY_DETAIL_EASING_BY_NAME_H
79 explicit byNameEasing(
id i) : id_(i) {}
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));
118 friend byNameEasing
byName(std::string_view name);
121 template <
typename T>
122 T operator()(
const float position, T start, T end)
const {
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);
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);
158 throw std::invalid_argument(
"invalid easing id");
178inline byNameEasing
byName(std::string_view name) {
179 return byNameEasing{byNameEasing::parse(name)};
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