TTKMusicPlayer  4.1.3.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_animationEnabled(true),
15  m_imageRender(nullptr)
16 {
18 
19  m_animation = new QPropertyAnimation(this, {});
20  m_animation->setDuration(200);
21  m_animation->setEasingCurve(QEasingCurve::Linear);
22  m_animation->setStartValue(0);
23  m_animation->setEndValue(101);
24 
25  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(valueChanged(QVariant)));
26  connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
27 }
28 
30 {
31  delete m_animation;
32  delete m_imageRender;
33 }
34 
36 {
37  return m_renderPixmap;
38 }
39 
41 {
42  stop();
43  m_isAnimating = true;
44  m_animation->start();
45 }
46 
48 {
49  if(isRunning())
50  {
51  m_animation->stop();
53  }
54 }
55 
57 {
58  return m_animation->state() == QPropertyAnimation::Running;
59 }
60 
62 {
63  if(pix.isNull())
64  {
65  return;
66  }
67 
68  const QPixmap &pixmap = QtLablePixmap(this);
69  if(!m_animationEnabled || pixmap.isNull())
70  {
71  m_renderPixmap = pix;
72  QLabel::setPixmap(pix);
73  return;
74  }
75 
76  stop();
77 
78  m_previousPixmap = pixmap;
79  m_currentPixmap = pix;
80  m_isAnimating = true;
81 
83  switch(m_type)
84  {
85  case Module::FadeEffect:
86  {
87  m_animation->setDuration(500);
88  break;
89  }
91  {
92  m_animation->setDuration(500);
93  break;
94  }
95  case Module::CubeEffect:
96  {
97  delete m_imageRender;
99  m_imageRender->input(rect());
100  m_animation->setDuration(1000);
101  break;
102  }
103  case Module::WaterEffect:
104  {
105  delete m_imageRender;
106  m_imageRender = new QAlgorithm::WaterWave(m_currentPixmap.toImage(), height() / 6);
107  m_imageRender->input(rect());
108  m_animation->setDuration(1000);
109  break;
110  }
112  {
113  m_animation->setDuration(250);
114  break;
115  }
117  {
118  m_animation->setDuration(250);
119  break;
120  }
121  default: break;
122  }
123 
124  m_animation->start();
125 }
126 
128 {
129  m_currentValue = value.toFloat();
130  update();
131 }
132 
134 {
135  m_currentValue = 0;
136  m_isAnimating = false;
138 
139  QLabel::setPixmap(m_renderPixmap);
140 }
141 
143 {
144  if(m_isAnimating)
145  {
146  QPainter painter(this);
147  switch(m_type)
148  {
149  case Module::FadeEffect:
150  {
151  painter.drawPixmap(rect(), m_previousPixmap);
152  QPixmap pix(size());
153  pix.fill(Qt::transparent);
154  QPainter painter(&pix);
155  painter.fillRect(rect(), QColor(0xFF, 0xFF, 0xFF, 2.55 * m_currentValue));
156  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
157  painter.drawPixmap(rect(), m_currentPixmap);
158  m_renderPixmap = pix;
159  break;
160  }
162  {
163  QPixmap pix(m_previousPixmap);
164  QPainter painter(&pix);
165  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
166  constexpr int number = 10;
167  const int perHeight = height() / number;
168  for(int i = 0; i < number; ++i)
169  {
170  const QRect rect(0, perHeight * i, width(), perHeight * m_currentValue / 100.0);
171  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
172  }
173  m_renderPixmap = pix;
174  break;
175  }
176  case Module::CubeEffect:
177  {
178  painter.drawPixmap(rect(), m_previousPixmap);
180  break;
181  }
182  case Module::WaterEffect:
183  {
184  painter.drawPixmap(rect(), m_previousPixmap);
186  break;
187  }
189  {
190  QPixmap pix(m_previousPixmap);
191  QPainter painter(&pix);
192  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
193  const QRect rect(0, 0, width() * m_currentValue / 100.0, height());
194  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
195  m_renderPixmap = pix;
196  break;
197  }
199  {
200  QPixmap pix(m_previousPixmap);
201  QPainter painter(&pix);
202  painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
203  const QRect rect(0, 0, width(), height() * m_currentValue / 100.0);
204  painter.drawPixmap(rect, m_currentPixmap.copy(rect));
205  m_renderPixmap = pix;
206  break;
207  }
208  default: break;
209  }
210  painter.drawPixmap(rect(), m_renderPixmap);
211  }
212  else
213  {
214  QLabel::paintEvent(event);
215  }
216 }
#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 paintEvent(QPaintEvent *event) overridefinal
TTK_MODULE_EXPORT int random(int value=RAND_MAX)
Definition: ttktime.cpp:14
virtual void input(const QRect &region)
The class of the cube wave.
Definition: imagewrapper.h:88
MusicTransitionAnimationLabel(QWidget *parent=nullptr)
virtual QPixmap render(const QPixmap &pixmap, int value)=0
#define QtLablePixmap(p)
Lable pixmap.
Definition: ttkqtcompat.h:122