TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musiclayoutanimationwidget.cpp
Go to the documentation of this file.
2 #include "musicwidgetheaders.h"
3 
4 #include <QPropertyAnimation>
5 
7  : QWidget(parent),
8  m_isAnimating(false),
9  m_currentValue(0),
10  m_widgetLayout(nullptr)
11 {
12 
13  QVBoxLayout *mainLayout = new QVBoxLayout(this);
14  mainLayout->setContentsMargins(0, 0, 0, 0);
15  mainLayout->setSpacing(0);
16 
17  m_mainWidget = new QWidget(this);
18  mainLayout->addWidget(m_mainWidget);
19  setLayout(mainLayout);
20 
21  m_animation = new QPropertyAnimation(m_mainWidget, {}, this);
22  m_animation->setDuration(TTK_DN_S2MS / 2);
23  m_animation->setEasingCurve(QEasingCurve::Linear);
24  m_animation->setStartValue(0.0f);
25  m_animation->setEndValue(0.0f);
26  connect(m_animation, SIGNAL(valueChanged(QVariant)), SLOT(valueChanged(QVariant)));
27  connect(m_animation, SIGNAL(finished()), SLOT(animationFinished()));
28 }
29 
31 {
32  delete m_widgetLayout;
33  delete m_mainWidget;
34  delete m_animation;
35 }
36 
38 {
39  if(m_isAnimating)
40  {
41  return;
42  }
43 
44  m_animation->setStartValue(0);
45 
46  m_mainWidget->hide();
47  m_isAnimating = true;
48  m_animation->start();
49 }
50 
52 {
53  m_isAnimating = false;
54  m_animation->stop();
55  m_mainWidget->show();
56 }
57 
59 {
60  connect(m_animation, SIGNAL(finished()), parent, SLOT(updateAnimationLrc()));
61 }
62 
64 {
65  m_widgetLayout->addStretch(stretch);
66 }
67 
68 void MusicLayoutAnimationWidget::addWidget(QWidget *widget, int stretch, Qt::Alignment alignment)
69 {
70  m_widgetLayout->addWidget(widget, stretch, alignment);
71 }
72 
74 {
75  m_widgetLayout->removeWidget(widget);
76 }
77 
78 void MusicLayoutAnimationWidget::valueChanged(const QVariant &value)
79 {
80  m_currentValue = -value.toFloat();
81  update();
82 }
83 
85 {
86  m_currentValue = 0;
87  m_isAnimating = false;
88  m_mainWidget->show();
89 }
90 
91 
92 
95 {
96  m_widgetLayout = new QVBoxLayout(m_mainWidget);
97  m_widgetLayout->setContentsMargins(0, 0, 0, 0);
98  m_widgetLayout->setSpacing(0);
99  m_mainWidget->setLayout(m_widgetLayout);
100 }
101 
103 {
104  if(m_isAnimating)
105  {
106  return;
107  }
108 
109  m_animation->setEndValue(height() / m_widgetLayout->count());
110 
112 }
113 
115 {
116  if(m_isAnimating)
117  {
118  QPixmap pix(size());
119  pix.fill(Qt::transparent);
120  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, true);
121  m_mainWidget->render(&pix);
122  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, false);
123 
124  QPainter painter(this);
125  painter.setRenderHint(QPainter::SmoothPixmapTransform);
126  painter.translate(0, m_currentValue);
127  painter.drawPixmap(0, 0, pix);
128  painter.drawPixmap(0, height(), pix);
129  }
130  else
131  {
132  QWidget::paintEvent(event);
133  }
134 }
135 
136 
137 
140 {
141  m_widgetLayout = new QHBoxLayout(m_mainWidget);
142  m_widgetLayout->setContentsMargins(0, 0, 0, 0);
143  m_widgetLayout->setSpacing(0);
144  m_mainWidget->setLayout(m_widgetLayout);
145 }
146 
148 {
149  if(m_isAnimating)
150  {
151  return;
152  }
153 
154  m_animation->setEndValue(width() / m_widgetLayout->count());
155 
157 }
158 
160 {
161  if(m_isAnimating)
162  {
163  QPixmap pix(size());
164  pix.fill(Qt::transparent);
165  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, true);
166  m_mainWidget->render(&pix);
167  m_mainWidget->setAttribute(Qt::WA_TranslucentBackground, false);
168 
169  QPainter painter(this);
170  painter.setRenderHint(QPainter::SmoothPixmapTransform);
171  painter.translate(m_currentValue, 0);
172  painter.drawPixmap(0, 0, pix);
173  painter.drawPixmap(width(), 0, pix);
174  }
175  else
176  {
177  QWidget::paintEvent(event);
178  }
179 }
The class of the layout float animation widget.
voidpf void uLong size
Definition: ioapi.h:136
virtual void paintEvent(QPaintEvent *event) overridefinal
void valueChanged(const QVariant &value)
MusicLayoutAnimationWidget(QWidget *parent=nullptr)
virtual void start() overridefinal
#define TTK_DN_S2MS
Definition: ttkglobal.h:355
virtual void paintEvent(QPaintEvent *event) overridefinal
MusicHLayoutAnimationWidget(QWidget *parent=nullptr)
virtual void start() overridefinal
void addWidget(QWidget *widget, int stretch=0, Qt::Alignment alignment=Qt::Alignment())
MusicVLayoutAnimationWidget(QWidget *parent=nullptr)