TTKMusicPlayer  4.3.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicpreviewlabel.cpp
Go to the documentation of this file.
1 #include "musicpreviewlabel.h"
2 #include "musicwidgetutils.h"
3 
5  : TTKClickedLabel(parent)
6 {
7  m_linearGradient.setStart(0, 0);
8 }
9 
10 void MusicColorPreviewLabel::setColors(const QList<QColor> &colors)
11 {
12  QLinearGradient linearGradient;
13  for(int i = 0; i < colors.count(); ++i)
14  {
15  linearGradient.setColorAt((i + 1) * 1.0 / colors.count(), colors[i]);
16  }
17 
19  m_linearGradient = linearGradient;
20  update();
21 }
22 
23 QList<QColor> MusicColorPreviewLabel::colors() const noexcept
24 {
25  return m_gradientColors;
26 }
27 
29 {
30  return !m_gradientColors.empty() ? m_gradientColors.first() : QColor();
31 }
32 
34 {
35  QPainter painter(this);
36  painter.setRenderHints(QPainter::Antialiasing | QPainter::TextAntialiasing);
37 
38  painter.setBrush(Qt::white);
39  painter.drawRect(0, 0, width(), height());
40 
41  const int h = height() - 4 * 2;
42  painter.drawText(h + 2 * 4, 4, width() - h - 3 * 4, h, Qt::AlignCenter, text());
43 
44  m_linearGradient.setFinalStop(0, height());
45  painter.setBrush(m_linearGradient);
46  painter.drawRect(4, 4, h, h);
47 }
48 
49 
50 
52  : QLabel(parent),
53  m_transparent(255)
54 {
55  m_linearGradient.setStart(0, 0);
56  m_maskLinearGradient.setStart(0, 0);
57 }
58 
60 {
61  m_font.setFamily(item.m_family);
62  m_font.setPointSize(item.m_size);
63  m_font.setBold((item.m_type == 1 || item.m_type == 3));
64  m_font.setItalic((item.m_type == 2 || item.m_type == 3));
65 
67 }
68 
69 void MusicPreviewLabel::setLinearGradient(const QList<QColor> &front, const QList<QColor> &back)
70 {
71  QLinearGradient linearGradient, maskLinearGradient;
72  for(int i = 0; i < back.count(); ++i)
73  {
74  QColor rgb = back[i];
75  rgb.setAlpha(m_transparent);
76  linearGradient.setColorAt((i + 1) * 1.0 / back.count(), rgb);
77  }
78 
79  for(int i = 0; i < front.count(); ++i)
80  {
81  QColor rgb = front[i];
82  rgb.setAlpha(m_transparent);
83  maskLinearGradient.setColorAt((i + 1) * 1.0 / front.count(), rgb);
84  }
85 
86  m_linearGradient = linearGradient;
87  m_maskLinearGradient = maskLinearGradient;
88 }
89 
90 void MusicPreviewLabel::paintEvent(QPaintEvent *)
91 {
92  QPainter painter(this);
93  painter.setRenderHint(QPainter::TextAntialiasing);
94 
95  const int h = TTK::Widget::fontTextHeight(m_font);
96  const int begin = (rect().height() - h) / 2;
97  m_linearGradient.setFinalStop(0, h + begin);
98  m_maskLinearGradient.setFinalStop(0, h + begin);
99 
100  painter.setFont(m_font);
101  painter.drawText(rect(), Qt::AlignLeft | Qt::AlignVCenter, "This is TTKMusicPlayer");
102 
103  painter.setPen(QColor(0, 0, 0, 200));
104  painter.drawText(rect(), Qt::AlignLeft | Qt::AlignVCenter, "This is TTKMusicPlayer");
105 
106  painter.setPen(QPen(m_linearGradient, 0));
107  painter.drawText(1, 1, rect().width(), rect().height(), Qt::AlignLeft | Qt::AlignVCenter, "This is TTKMusicPlayer");
108 
109  painter.setPen(QPen(m_maskLinearGradient, 0));
110  painter.drawText(1, 1, 60, rect().height(), Qt::AlignLeft | Qt::AlignVCenter, "This is TTKMusicPlayer");
111 }
QList< QColor > m_background
The class of the label previewed.
QLinearGradient m_maskLinearGradient
virtual void paintEvent(QPaintEvent *event) overridefinal
The class of the label widget that can click.
QList< QColor > m_frontground
QLinearGradient m_linearGradient
void setColors(const QList< QColor > &colors)
virtual void paintEvent(QPaintEvent *event) overridefinal
QList< QColor > m_gradientColors
QLinearGradient m_linearGradient
void setLinearGradient(const MusicPreviewLabelItem &item)
TTK_MODULE_EXPORT int fontTextHeight(const QFont &font)
#define const
Definition: zconf.h:233
MusicPreviewLabel(QWidget *parent=nullptr)
QList< QColor > colors() const noexcept
MusicColorPreviewLabel(QWidget *parent=nullptr)