diff --git a/src/libs/solutions/spinner/icons/spinner_large.png b/src/libs/solutions/spinner/icons/spinner_large.png index c24ff1b77cf..0a3f894397b 100644 Binary files a/src/libs/solutions/spinner/icons/spinner_large.png and b/src/libs/solutions/spinner/icons/spinner_large.png differ diff --git a/src/libs/solutions/spinner/icons/spinner_large@2x.png b/src/libs/solutions/spinner/icons/spinner_large@2x.png new file mode 100644 index 00000000000..910a11bc756 Binary files /dev/null and b/src/libs/solutions/spinner/icons/spinner_large@2x.png differ diff --git a/src/libs/solutions/spinner/icons/spinner_medium.png b/src/libs/solutions/spinner/icons/spinner_medium.png index d64cc514e1b..6cb735f18ac 100644 Binary files a/src/libs/solutions/spinner/icons/spinner_medium.png and b/src/libs/solutions/spinner/icons/spinner_medium.png differ diff --git a/src/libs/solutions/spinner/icons/spinner_medium@2x.png b/src/libs/solutions/spinner/icons/spinner_medium@2x.png new file mode 100644 index 00000000000..3cd93d63e24 Binary files /dev/null and b/src/libs/solutions/spinner/icons/spinner_medium@2x.png differ diff --git a/src/libs/solutions/spinner/icons/spinner_small.png b/src/libs/solutions/spinner/icons/spinner_small.png index 254e9c82fc0..cd6e92a7370 100644 Binary files a/src/libs/solutions/spinner/icons/spinner_small.png and b/src/libs/solutions/spinner/icons/spinner_small.png differ diff --git a/src/libs/solutions/spinner/icons/spinner_small@2x.png b/src/libs/solutions/spinner/icons/spinner_small@2x.png new file mode 100644 index 00000000000..36821a92e19 Binary files /dev/null and b/src/libs/solutions/spinner/icons/spinner_small@2x.png differ diff --git a/src/libs/solutions/spinner/spinner.cpp b/src/libs/solutions/spinner/spinner.cpp index 2dc241db7e1..114fea537da 100644 --- a/src/libs/solutions/spinner/spinner.cpp +++ b/src/libs/solutions/spinner/spinner.cpp @@ -3,7 +3,9 @@ #include "spinner.h" +#include #include +#include #include #include #include @@ -81,7 +83,7 @@ private: int m_rotationStep = 45; int m_rotation = 0; QTimer m_timer; - QPixmap m_pixmap; + mutable QPixmap m_pixmap; UpdateCallback m_callback; }; @@ -98,6 +100,18 @@ static QString imageFileNameForSpinnerSize(SpinnerSize size) return {}; } +static QPixmap themedPixmapForSpinnerSize(SpinnerSize size, qreal dpr) +{ + QImage mask(qt_findAtNxFile(imageFileNameForSpinnerSize(size), dpr)); + mask.invertPixels(); + QImage themedImage(mask.size(), QImage::Format_ARGB32); + themedImage.fill(qApp->palette().text().color()); + themedImage.setAlphaChannel(mask); + QPixmap themedPixmap = QPixmap::fromImage(themedImage); + themedPixmap.setDevicePixelRatio(mask.devicePixelRatio()); + return themedPixmap; +} + SpinnerPainter::SpinnerPainter(SpinnerSize size) { m_timer.setSingleShot(false); @@ -114,11 +128,14 @@ void SpinnerPainter::setSize(SpinnerSize size) m_size = size; m_rotationStep = size == SpinnerSize::Small ? 45 : 30; m_timer.setInterval(size == SpinnerSize::Small ? 100 : 80); - m_pixmap = QPixmap(imageFileNameForSpinnerSize(size)); + m_pixmap = themedPixmapForSpinnerSize(size, qApp->devicePixelRatio()); } void SpinnerPainter::paint(QPainter &painter, const QRect &rect) const { + const qreal dpr = painter.device()->devicePixelRatioF(); + if (!qFuzzyCompare(m_pixmap.devicePixelRatio(), dpr)) + m_pixmap = themedPixmapForSpinnerSize(m_size, dpr); painter.save(); painter.setRenderHint(QPainter::SmoothPixmapTransform); QPoint translate(rect.x() + rect.width() / 2, rect.y() + rect.height() / 2); diff --git a/src/libs/solutions/spinner/spinner.qrc b/src/libs/solutions/spinner/spinner.qrc index 5ad85953e8d..0b8a980272e 100644 --- a/src/libs/solutions/spinner/spinner.qrc +++ b/src/libs/solutions/spinner/spinner.qrc @@ -1,7 +1,10 @@ icons/spinner_large.png + icons/spinner_large@2x.png icons/spinner_medium.png + icons/spinner_medium@2x.png icons/spinner_small.png + icons/spinner_small@2x.png diff --git a/src/tools/icons/qtcreatoricons.svg b/src/tools/icons/qtcreatoricons.svg index 17583cb29a2..155b5ee2729 100644 --- a/src/tools/icons/qtcreatoricons.svg +++ b/src/tools/icons/qtcreatoricons.svg @@ -1200,6 +1200,27 @@ y="0" x="0" /> + + +