1 // This file is part of Desktop App Toolkit,
2 // a set of libraries for developing nice desktop applications.
3 //
4 // For license and copyright information please follow this link:
5 // https://github.com/desktop-app/legal/blob/master/LEGAL
6 //
7 #include "ui/effects/animation_value.h"
8
9 #include "ui/painter.h"
10
11 #include <QtCore/QtMath> // M_PI
12
13 namespace anim {
14 namespace {
15
16 rpl::variable<bool> AnimationsDisabled = false;
17
18 } // namespace
19
__anon6e81a8760202(const float64 &delta, const float64 &dt) 20 transition linear = [](const float64 &delta, const float64 &dt) {
21 return delta * dt;
22 };
23
__anon6e81a8760302(const float64 &delta, const float64 &dt) 24 transition sineInOut = [](const float64 &delta, const float64 &dt) {
25 return -(delta / 2) * (cos(M_PI * dt) - 1);
26 };
27
__anon6e81a8760402(const float64 &delta, const float64 &dt) 28 transition halfSine = [](const float64 &delta, const float64 &dt) {
29 return delta * sin(M_PI * dt / 2);
30 };
31
__anon6e81a8760502(const float64 &delta, const float64 &dt) 32 transition easeOutBack = [](const float64 &delta, const float64 &dt) {
33 static constexpr auto s = 1.70158;
34
35 const float64 t = dt - 1;
36 return delta * (t * t * ((s + 1) * t + s) + 1);
37 };
38
__anon6e81a8760602(const float64 &delta, const float64 &dt) 39 transition easeInCirc = [](const float64 &delta, const float64 &dt) {
40 return -delta * (sqrt(1 - dt * dt) - 1);
41 };
42
__anon6e81a8760702(const float64 &delta, const float64 &dt) 43 transition easeOutCirc = [](const float64 &delta, const float64 &dt) {
44 const float64 t = dt - 1;
45 return delta * sqrt(1 - t * t);
46 };
47
__anon6e81a8760802(const float64 &delta, const float64 &dt) 48 transition easeInCubic = [](const float64 &delta, const float64 &dt) {
49 return delta * dt * dt * dt;
50 };
51
__anon6e81a8760902(const float64 &delta, const float64 &dt) 52 transition easeOutCubic = [](const float64 &delta, const float64 &dt) {
53 const float64 t = dt - 1;
54 return delta * (t * t * t + 1);
55 };
56
__anon6e81a8760a02(const float64 &delta, const float64 &dt) 57 transition easeInQuint = [](const float64 &delta, const float64 &dt) {
58 const float64 t2 = dt * dt;
59 return delta * t2 * t2 * dt;
60 };
61
__anon6e81a8760b02(const float64 &delta, const float64 &dt) 62 transition easeOutQuint = [](const float64 &delta, const float64 &dt) {
63 const float64 t = dt - 1, t2 = t * t;
64 return delta * (t2 * t2 * t + 1);
65 };
66
Disables()67 rpl::producer<bool> Disables() {
68 return AnimationsDisabled.value();
69 };
70
Disabled()71 bool Disabled() {
72 return AnimationsDisabled.current();
73 }
74
SetDisabled(bool disabled)75 void SetDisabled(bool disabled) {
76 AnimationsDisabled = disabled;
77 }
78
DrawStaticLoading(QPainter & p,QRectF rect,int stroke,QPen pen,QBrush brush)79 void DrawStaticLoading(
80 QPainter &p,
81 QRectF rect,
82 int stroke,
83 QPen pen,
84 QBrush brush) {
85 PainterHighQualityEnabler hq(p);
86
87 p.setBrush(brush);
88 pen.setWidthF(stroke);
89 pen.setCapStyle(Qt::RoundCap);
90 pen.setJoinStyle(Qt::RoundJoin);
91 p.setPen(pen);
92 p.drawEllipse(rect);
93
94 const auto center = rect.center();
95 const auto first = QPointF(center.x(), rect.y() + 1.5 * stroke);
96 const auto delta = center.y() - first.y();
97 const auto second = QPointF(center.x() + delta * 2 / 3., center.y());
98 if (delta > 0) {
99 QPainterPath path;
100 path.moveTo(first);
101 path.lineTo(center);
102 path.lineTo(second);
103 p.drawPath(path);
104 }
105 }
106
107 } // anim
108