TTKMusicPlayer  4.3.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  painter.setRenderHint(QPainter::TextAntialiasing);
40 
41  QFont f(font());
42  f.setBold(false);
43  painter.setFont(f);
44 
45  const int textWidth = TTK::Widget::fontTextWidth(font(), m_text);
46  if(textWidth < 1)
47  {
48  return;
49  }
50 
51  int x = -m_offset;
52  while(x < width())
53  {
54  painter.drawText(x, 0, textWidth, height(), Qt::AlignLeft | Qt::AlignVCenter, m_text);
55  x += textWidth;
56  }
57 }
58 
59 void MusicMarqueeWidget::showEvent(QShowEvent *event)
60 {
61  QWidget::showEvent(event);
62  m_timerId = startTimer(30);
63 }
64 
65 void MusicMarqueeWidget::timerEvent(QTimerEvent *event)
66 {
67  if(event->timerId() == m_timerId)
68  {
69  ++m_offset;
71  {
72  m_offset = 0;
73  }
74  scroll(-1, 0);
75  }
76  else
77  {
78  QWidget::timerEvent(event);
79  }
80 }
81 
82 void MusicMarqueeWidget::hideEvent(QHideEvent *event)
83 {
84  QWidget::hideEvent(event);
85  killTimer(m_timerId);
86  m_timerId = 0;
87 }
88 
89 void MusicMarqueeWidget::resizeEvent(QResizeEvent *event)
90 {
91  QWidget::resizeEvent(event);
92  setText(text());
93 }
virtual void hideEvent(QHideEvent *event) overridefinal
virtual void showEvent(QShowEvent *event) overridefinal
QString text() const noexcept
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:172
virtual QSize sizeHint() const override
#define G_SETTING_PTR