TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musictransitionanimationlabel.cpp
Go to the documentation of this file.
2 #include "ttktime.h"
3 
5 
6 #include <QPainter>
7 #include <QPropertyAnimation>
8 
10  : QLabel(parent),
11  m_type(Module::FadeEffect),
12  m_isAnimating(false),
13  m_currentValue(0),
14  m_noAnimationSet(false),
15  m_cubeWave(nullptr),
16  m_waterWave(nullptr)
17 {
19 
20  m_animation = new QPropertyAnimation(this, {});
21  m_animation->setDuration(200);
22  m_animation->setEasingCurve(QEasingCurve::Linear);
23  m_animation->setStartValue(0);
24  m_animation->setEndValue(101);
25 
26  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(valueChanged(QVariant)));
27  connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
28 }
29 
31 {
32  delete m_animation;
33 }
34 
36 {
37  return m_rendererPixmap;
38 }
39 
41 {
42  if(m_animation->state() == QPropertyAnimation::Running)
43  {
44  m_animation->stop();
46  }
47 }
48 
50 {
51  if(pix.isNull())
52  {
53  return;
54  }
55 
56  const QPixmap &pixmap = QtLablePixmap(this);
57  if(m_noAnimationSet || pixmap.isNull())
58  {
59  m_rendererPixmap = pix;
60  QLabel::setPixmap(pix);
61  return;
62  }
63 
64  stop();
65 
66  m_previousPixmap = pixmap;
67  m_currentPixmap = pix;
68  m_isAnimating = true;
69 
71  switch(m_type)
72  {
73  case Module::FadeEffect:
74  {
75  m_animation->setDuration(200);
76  break;
77  }
79  {
80  m_animation->setDuration(500);
81  break;
82  }
83  case Module::CubeEffect:
84  {
85  delete m_cubeWave;
87  m_cubeWave->input(rect());
88  m_animation->setDuration(500);
89  break;
90  }
92  {
93  delete m_waterWave;
94  m_waterWave = new QAlgorithm::WaterWave(m_currentPixmap.toImage(), height() / 6);
95  m_waterWave->input(rect());
96  m_animation->setDuration(1000);
97  break;
98  }
100  {
101  m_animation->setDuration(150);
102  break;
103  }
105  {
106  m_animation->setDuration(150);
107  break;
108  }
109  default: break;
110  }
111 
112  m_animation->start();
113 }
114 
116 {
117  m_currentValue = value.toFloat();
118  update();
119 }
120 
122 {
123  m_currentValue = 0;
124  m_isAnimating = false;
126 
127  QLabel::setPixmap(m_rendererPixmap);
128 }
129 
131 {
132  if(m_isAnimating)
133  {
134  QPainter painter(this);
135  switch(m_type)
136  {
137  case Module::FadeEffect:
138  {
139  painter.drawPixmap(rect(), m_previousPixmap);
140  QPixmap pix(size());
141  pix.fill(Qt::transparent);
142  QPainter painter(&pix);
143  painter.fillRect(rect(), QColor(0xFF, 0xFF, 0xFF, 2.55 * m_currentValue));
144  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
145  painter.drawPixmap(rect(), m_currentPixmap);
146  m_rendererPixmap = pix;
147  break;
148  }
150  {
151  QPixmap pix(m_previousPixmap);
152  QPainter painter(&pix);
153  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
154  constexpr int number = 10;
155  const int perHeight = height() / number;
156  for(int i = 0; i < number; ++i)
157  {
158  const QRect rect(0, perHeight * i, width(), perHeight * m_currentValue / 100.0);
159  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
160  }
161  m_rendererPixmap = pix;
162  break;
163  }
164  case Module::CubeEffect:
165  {
166  painter.drawPixmap(rect(), m_previousPixmap);
168  break;
169  }
170  case Module::WaterEffect:
171  {
172  painter.drawPixmap(rect(), m_previousPixmap);
174  break;
175  }
177  {
178  QPixmap pix(m_previousPixmap);
179  QPainter painter(&pix);
180  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
181  const QRect rect(0, 0, width() * m_currentValue / 100.0, height());
182  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
183  m_rendererPixmap = pix;
184  break;
185  }
187  {
188  QPixmap pix(m_previousPixmap);
189  QPainter painter(&pix);
190  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
191  const QRect rect(0, 0, width(), height() * m_currentValue / 100.0);
192  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
193  m_rendererPixmap = pix;
194  break;
195  }
196  default: break;
197  }
198  painter.drawPixmap(rect(), m_rendererPixmap);
199  }
200  else
201  {
202  QLabel::paintEvent(event);
203  }
204 }
#define TTKStaticCast(x, y)
Definition: ttkglobal.h:159
The class of the water wave.
Definition: imagewrapper.h:111
voidpf void uLong size
Definition: ioapi.h:136
TTK_MODULE_EXPORT void initRandom()
Definition: ttktime.cpp:7
virtual void input(const QRect &region)
virtual void paintEvent(QPaintEvent *event) overridefinal
TTK_MODULE_EXPORT int random(int value=RAND_MAX)
Definition: ttktime.cpp:14
virtual QPixmap render(const QPixmap &pixmap, int value)=0
The class of the cube wave.
Definition: imagewrapper.h:88
MusicTransitionAnimationLabel(QWidget *parent=nullptr)
#define QtLablePixmap(p)
Lable pixmap.
Definition: ttkqtcompat.h:122