QmlMaterial 0.1.0
Loading...
Searching...
No Matches
interpolator.hpp
1#pragma once
2
3#include <QtCore/QEasingCurve>
4#include <QtCore/QPointF>
5
6namespace qml_material::anim
7{
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);
11}
12
13inline auto emphasized() noexcept -> QEasingCurve {
14 auto out = QEasingCurve(QEasingCurve::BezierSpline);
15 // M 0,0 C 0.05,0 0.133333,0.06 0.166666,0.4 C 0.208333,0.82 0.25,1, 1, 1)
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. });
18 return out;
19}
20
21inline auto emphasized_accelerate() noexcept -> QEasingCurve {
22 auto out = QEasingCurve(QEasingCurve::BezierSpline);
23 out.addCubicBezierSegment({ 0.3, 0. }, { 0.8, 0.15 }, { 1., 1. });
24 return out;
25}
26
27inline auto emphasized_decelerate() noexcept -> QEasingCurve {
28 auto out = QEasingCurve(QEasingCurve::BezierSpline);
29 out.addCubicBezierSegment({ 0.05, 0.7 }, { 0.1, 1. }, { 1., 1. });
30 return out;
31}
32
33inline auto standard() noexcept -> QEasingCurve {
34 auto out = QEasingCurve(QEasingCurve::BezierSpline);
35 out.addCubicBezierSegment({ 0.2, 0. }, { 0., 1. }, { 1., 1. });
36 return out;
37}
38
39inline auto standard_accelerate() noexcept -> QEasingCurve {
40 auto out = QEasingCurve(QEasingCurve::BezierSpline);
41 out.addCubicBezierSegment({ 0.3, 0. }, { 1., 1. }, { 1., 1. });
42 return out;
43}
44
45inline auto standard_decelerate() noexcept -> QEasingCurve {
46 auto out = QEasingCurve(QEasingCurve::BezierSpline);
47 out.addCubicBezierSegment({ 0., 0. }, { 0., 1. }, { 1., 1. });
48 return out;
49}
50
51inline auto legacy() noexcept -> QEasingCurve {
52 auto out = QEasingCurve(QEasingCurve::BezierSpline);
53 out.addCubicBezierSegment({ 0.4, 0. }, { 0.2, 1. }, { 1., 1. });
54 return out;
55}
56
57inline auto legacy_accelerate() noexcept -> QEasingCurve {
58 auto out = QEasingCurve(QEasingCurve::BezierSpline);
59 out.addCubicBezierSegment({ 0.4, 0. }, { 1., 1. }, { 1., 1. });
60 return out;
61}
62
63inline auto legacy_decelerate() noexcept -> QEasingCurve {
64 auto out = QEasingCurve(QEasingCurve::BezierSpline);
65 out.addCubicBezierSegment({ 0., 0. }, { 0.2, 1. }, { 1., 1. });
66 return out;
67}
68
69inline auto linear() noexcept -> QEasingCurve {
70 auto out = QEasingCurve(QEasingCurve::BezierSpline);
71 out.addCubicBezierSegment({ 0., 0. }, { 1., 1. }, { 1., 1. });
72 return out;
73}
74
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. });
78 return out;
79}
80
81namespace linear_indicator
82{
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 });
86 return out;
87}
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 });
91 return out;
92}
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 });
96 return out;
97}
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 });
101 return out;
102}
103} // namespace linear_indicator
104
105} // namespace qml_material::anim