3#include <QtCore/QEasingCurve>
4#include <QtCore/QPointF>
6namespace qml_material::anim
8inline float get_fraction_in_range(qint32 playtime, qint32 start, qint32 duration) {
9 float fraction = (float)(playtime - start) / duration;
10 return std::clamp(fraction, 0.f, 1.f);
13inline auto emphasized() noexcept -> QEasingCurve {
14 auto out = QEasingCurve(QEasingCurve::BezierSpline);
16 out.addCubicBezierSegment({ 0.05, 0 }, { 0.133333, 0.06 }, { 0.166666, 0.4 });
17 out.addCubicBezierSegment({ 0.208333, 0.82 }, { 0.25, 1. }, { 1., 1. });
21inline auto emphasized_accelerate() noexcept -> QEasingCurve {
22 auto out = QEasingCurve(QEasingCurve::BezierSpline);
23 out.addCubicBezierSegment({ 0.3, 0. }, { 0.8, 0.15 }, { 1., 1. });
27inline auto emphasized_decelerate() noexcept -> QEasingCurve {
28 auto out = QEasingCurve(QEasingCurve::BezierSpline);
29 out.addCubicBezierSegment({ 0.05, 0.7 }, { 0.1, 1. }, { 1., 1. });
33inline auto standard() noexcept -> QEasingCurve {
34 auto out = QEasingCurve(QEasingCurve::BezierSpline);
35 out.addCubicBezierSegment({ 0.2, 0. }, { 0., 1. }, { 1., 1. });
39inline auto standard_accelerate() noexcept -> QEasingCurve {
40 auto out = QEasingCurve(QEasingCurve::BezierSpline);
41 out.addCubicBezierSegment({ 0.3, 0. }, { 1., 1. }, { 1., 1. });
45inline auto standard_decelerate() noexcept -> QEasingCurve {
46 auto out = QEasingCurve(QEasingCurve::BezierSpline);
47 out.addCubicBezierSegment({ 0., 0. }, { 0., 1. }, { 1., 1. });
51inline auto legacy() noexcept -> QEasingCurve {
52 auto out = QEasingCurve(QEasingCurve::BezierSpline);
53 out.addCubicBezierSegment({ 0.4, 0. }, { 0.2, 1. }, { 1., 1. });
57inline auto legacy_accelerate() noexcept -> QEasingCurve {
58 auto out = QEasingCurve(QEasingCurve::BezierSpline);
59 out.addCubicBezierSegment({ 0.4, 0. }, { 1., 1. }, { 1., 1. });
63inline auto legacy_decelerate() noexcept -> QEasingCurve {
64 auto out = QEasingCurve(QEasingCurve::BezierSpline);
65 out.addCubicBezierSegment({ 0., 0. }, { 0.2, 1. }, { 1., 1. });
69inline auto linear() noexcept -> QEasingCurve {
70 auto out = QEasingCurve(QEasingCurve::BezierSpline);
71 out.addCubicBezierSegment({ 0., 0. }, { 1., 1. }, { 1., 1. });
75inline auto fast_out_slow_in() noexcept -> QEasingCurve {
76 auto out = QEasingCurve(QEasingCurve::BezierSpline);
77 out.addCubicBezierSegment({ 0.4, 0. }, { 0.2, 1. }, { 1., 1. });
81namespace linear_indicator
83inline auto line1_head_curve() noexcept -> QEasingCurve {
84 auto out = QEasingCurve(QEasingCurve::BezierSpline);
85 out.addCubicBezierSegment({ 0.2, 0.0 }, { 0.8, 1.0 }, { 1.0, 1.0 });
88inline auto line1_tail_curve() noexcept -> QEasingCurve {
89 auto out = QEasingCurve(QEasingCurve::BezierSpline);
90 out.addCubicBezierSegment({ 0.4, 0.0 }, { 1.0, 1.0 }, { 1.0, 1.0 });
93inline auto line2_head_curve() noexcept -> QEasingCurve {
94 auto out = QEasingCurve(QEasingCurve::BezierSpline);
95 out.addCubicBezierSegment({ 0.0, 0.0 }, { 0.65, 1.0 }, { 1.0, 1.0 });
98inline auto line2_tail_curve() noexcept -> QEasingCurve {
99 auto out = QEasingCurve(QEasingCurve::BezierSpline);
100 out.addCubicBezierSegment({ 0.1, 0.0 }, { 0.45, 1.0 }, { 1.0, 1.0 });