diff --git a/src/duckstation-qt/svgiconengine.cpp b/src/duckstation-qt/svgiconengine.cpp index 4ddcd958c..0e5213307 100644 --- a/src/duckstation-qt/svgiconengine.cpp +++ b/src/duckstation-qt/svgiconengine.cpp @@ -21,12 +21,24 @@ #include "moc_svgiconengine.cpp" -/// Returns the icon color for the given mode based on the application palette. -static QColor GetIconColorFromPalette(QIcon::Mode mode) +/// Returns the icon color for the given mode and state based on the application palette. +static QColor GetIconColorFromPalette(QIcon::Mode mode, QIcon::State state) { // Thank gosh these are copy-on-write... const QPalette palette = QApplication::palette(); + // For the "On" state (e.g., checked icons), use highlight/button colors + if (state == QIcon::On) + { + if (mode == QIcon::Disabled) + return palette.color(QPalette::Disabled, QPalette::ButtonText); + else if (mode == QIcon::Selected) + return palette.color(QPalette::Current, QPalette::HighlightedText); + else + return palette.color(QPalette::Normal, QPalette::ButtonText); + } + + // For the "Off" state (normal/unchecked) // NOTE: Active and Normal are the same in QPalette. if (mode == QIcon::Disabled) return palette.color(QPalette::Disabled, QPalette::WindowText); @@ -151,8 +163,6 @@ bool SVGIconEngine::ensureLoaded() const void SVGIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode, QIcon::State state) { - Q_UNUSED(state); - if (rect.isEmpty()) return; @@ -160,7 +170,7 @@ void SVGIconEngine::paint(QPainter* painter, const QRect& rect, QIcon::Mode mode const QPaintDevice* const device = painter->device(); const qreal dpr = device ? device->devicePixelRatio() : 1.0; const QSize size = QtUtils::ApplyDevicePixelRatioToSize(rect.size(), dpr); - const QColor color = GetIconColorFromPalette(mode); + const QColor color = GetIconColorFromPalette(mode, state); const QString cache_key = BuildCacheKey(m_resource_path, size, dpr, color); QPixmap pm; @@ -185,7 +195,7 @@ QPixmap SVGIconEngine::pixmap(const QSize& size, QIcon::Mode mode, QIcon::State if (size.isEmpty()) return {}; - const QColor color = GetIconColorFromPalette(mode); + const QColor color = GetIconColorFromPalette(mode, state); const QString cache_key = BuildCacheKey(m_resource_path, size, 1.0, color); QPixmap pm; @@ -207,7 +217,7 @@ QPixmap SVGIconEngine::scaledPixmap(const QSize& size, QIcon::Mode mode, QIcon:: if (scaled_size.isEmpty()) return {}; - const QColor color = GetIconColorFromPalette(mode); + const QColor color = GetIconColorFromPalette(mode, state); const QString cache_key = BuildCacheKey(m_resource_path, scaled_size, scale, color); QPixmap pm;