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;
};
}