TTKMusicPlayer  3.7.0.0
TTKMusicPlayer imitates Kugou UI, the music player uses of qmmp core library based on Qt for windows and linux
musicmarqueewidget.cpp
Go to the documentation of this file.
1 #include "musicmarqueewidget.h"
2 #include "musicsettingmanager.h"
3 #include "musicwidgetutils.h"
4 
6  : QWidget(parent),
7  m_offset(0),
8  m_timerId(0),
9  m_effectOnResize(false)
10 {
11 
12 }
13 
14 void MusicMarqueeWidget::setText(const QString &newText)
15 {
16  int width = 0;
18  {
19  width = (G_SETTING_PTR->value(MusicSettingManager::WidgetSize).toSize().width() - WINDOW_WIDTH_MIN) / 10;
20  }
21 
22  int length = TTK::Widget::fontTextWidth(font(), newText);
23  length = (length >= this->width()) ? (45 + width) : (25 + width);
24  m_text = newText.leftJustified(length, ' ');
25 
26  update();
27  updateGeometry();
28 }
29 
31 {
32  return fontMetrics().size(0, m_text);
33 }
34 
35 void MusicMarqueeWidget::paintEvent(QPaintEvent *event)
36 {
37  QWidget::paintEvent(event);
38  QPainter painter(this);
39 
40  QFont f(font());
41  f.setBold(false);
42  painter.setFont(f);
43 
44  const int textWidth = TTK::Widget::fontTextWidth(font(), m_text);
45  if(textWidth < 1)
46  {
47  return;
48  }
49 
50  int x = -m_offset;
51  while(x < width())
52  {
53  painter.drawText(x, 0, textWidth, height(), Qt::AlignLeft | Qt::AlignVCenter, m_text);
54  x += textWidth;
55  }
56 }
57 
58 void MusicMarqueeWidget::showEvent(QShowEvent *event)
59 {
60  QWidget::showEvent(event);
61  m_timerId = startTimer(30);
62 }
63 
64 void MusicMarqueeWidget::timerEvent(QTimerEvent *event)
65 {
66  if(event->timerId() == m_timerId)
67  {
68  ++m_offset;
70  {
71  m_offset = 0;
72  }
73  scroll(-1, 0);
74  }
75  else
76  {
77  QWidget::timerEvent(event);
78  }
79 }
80 
81 void MusicMarqueeWidget::hideEvent(QHideEvent *event)
82 {
83  QWidget::hideEvent(event);
84  killTimer(m_timerId);
85  m_timerId = 0;
86 }
87 
88 void MusicMarqueeWidget::resizeEvent(QResizeEvent *event)
89 {
90  QWidget::resizeEvent(event);
91  setText(text());
92 }
QString text() const
virtual void hideEvent(QHideEvent *event) overridefinal
virtual void showEvent(QShowEvent *event) overridefinal
virtual void paintEvent(QPaintEvent *event) overridefinal
virtual void timerEvent(QTimerEvent *event) overridefinal
void setText(const QString &newText)
TTK_MODULE_EXPORT int fontTextWidth(const QFont &font, const QString &text)
MusicMarqueeWidget(QWidget *parent=nullptr)
virtual void resizeEvent(QResizeEvent *event) overridefinal
#define WINDOW_WIDTH_MIN
Definition: musicobject.h:153
virtual QSize sizeHint() const override
#define G_SETTING_PTR