diff --git a/data/data.qrc b/data/data.qrc index 03c468856..35e6cf8c1 100644 --- a/data/data.qrc +++ b/data/data.qrc @@ -408,7 +408,6 @@ volumeslider-gradient.png volumeslider-handle_glow.png volumeslider-handle.png - volumeslider-inset.png vk/add.png vk/bookmarks.png vk/delete.png diff --git a/data/volumeslider-gradient.png b/data/volumeslider-gradient.png index d6dfab83a..057253ba9 100644 Binary files a/data/volumeslider-gradient.png and b/data/volumeslider-gradient.png differ diff --git a/data/volumeslider-inset.png b/data/volumeslider-inset.png deleted file mode 100644 index ca1110932..000000000 Binary files a/data/volumeslider-inset.png and /dev/null differ diff --git a/src/widgets/sliderwidget.cpp b/src/widgets/sliderwidget.cpp index c24bd8363..ac4f724c4 100644 --- a/src/widgets/sliderwidget.cpp +++ b/src/widgets/sliderwidget.cpp @@ -195,9 +195,12 @@ Amarok::VolumeSlider::VolumeSlider(QWidget* parent, uint max) : Amarok::Slider(Qt::Horizontal, parent, max), m_animCount(0), m_animTimer(new QTimer(this)), - m_pixmapInset(QPixmap(":volumeslider-inset.png")) { + m_pixmapInset(QPixmap(volumePixmapDraw ())) { setFocusPolicy(Qt::NoFocus); + // Store window text color to check theme change at paintEvent + m_previous_theme_text_color = palette().color(QPalette::WindowText); + // BEGIN Calculate handle animation pixmaps for mouse-over effect QImage pixmapHandle(":volumeslider-handle.png"); QImage pixmapHandleGlow(":volumeslider-handle_glow.png"); @@ -301,6 +304,12 @@ void Amarok::VolumeSlider::paintEvent(QPaintEvent*) { const int padding = 7; const int offset = int(double((width() - 2 * padding) * value()) / maximum()); + // If theme changed since last paintEvent, redraw the volume pixmap with new theme colors + if (m_previous_theme_text_color != palette().color(QPalette::WindowText)) { + m_pixmapInset = volumePixmapDraw(); + m_previous_theme_text_color = palette().color(QPalette::WindowText); + } + p.drawPixmap(0, 0, m_pixmapGradient, 0, 0, offset + padding, 0); p.drawPixmap(0, 0, m_pixmapInset); p.drawPixmap(offset - m_handlePixmaps[0].width() / 2 + padding, 0, @@ -335,3 +344,25 @@ void Amarok::VolumeSlider::leaveEvent(QEvent*) { void Amarok::VolumeSlider::paletteChange(const QPalette&) { generateGradient(); } + +QPixmap Amarok::VolumeSlider::volumePixmapDraw () const { + QPixmap pixmap(112, 36); + pixmap.fill(Qt::transparent); + QPainter painter(&pixmap); + QPen pen(palette().color(QPalette::WindowText), 0.3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin); + painter.setPen(pen); + + painter.setRenderHint(QPainter::Antialiasing); + painter.setRenderHint(QPainter::SmoothPixmapTransform); + // Draw volume control pixmap + QPolygon poly; + poly << QPoint(6, 21) << QPoint(104, 21) + << QPoint(104, 7) << QPoint(6, 16) + << QPoint(6, 21); + QPainterPath path; + path.addPolygon(poly); + painter.drawPolygon(poly); + painter.drawLine(6, 29, 104, 29); + // Return QPixmap + return pixmap; +} diff --git a/src/widgets/sliderwidget.h b/src/widgets/sliderwidget.h index 68abd8119..4243cbd59 100644 --- a/src/widgets/sliderwidget.h +++ b/src/widgets/sliderwidget.h @@ -98,6 +98,7 @@ class VolumeSlider : public Slider { public: VolumeSlider(QWidget* parent, uint max = 0); + QPixmap volumePixmapDraw() const; protected: virtual void paintEvent(QPaintEvent*); @@ -129,6 +130,8 @@ class VolumeSlider : public Slider { QPixmap m_pixmapInset; QPixmap m_pixmapGradient; + QColor m_previous_theme_text_color; + QList m_handlePixmaps; }; }