diff --git a/kstyle/breezehelper.h b/kstyle/breezehelper.h --- a/kstyle/breezehelper.h +++ b/kstyle/breezehelper.h @@ -282,10 +282,12 @@ //* return a QRectF with the appropriate size for a rectangle with a pen stroke QRectF strokedRect( const QRect &rect, const int penWidth = PenWidth::Frame ) const; - - QPixmap coloredIcon(const QIcon &icon, const QPalette& palette, const QSize &size, + + QPixmap coloredIcon(QWindow *window, const QIcon &icon, const QPalette &palette, const QSize &size, QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off); + QWindow* getWindow(const QWidget *widget, const QObject *styleObject); + protected: //* return rounded path in a given rect, with only selected corners rounded, and for a given radius diff --git a/kstyle/breezehelper.cpp b/kstyle/breezehelper.cpp --- a/kstyle/breezehelper.cpp +++ b/kstyle/breezehelper.cpp @@ -29,6 +29,11 @@ #include #include +#if BREEZE_HAVE_QTQUICK +#include +#include +#endif + #if BREEZE_HAVE_X11 #include #endif @@ -1596,14 +1601,14 @@ return pixmap.devicePixelRatio(); } - QPixmap Helper::coloredIcon(const QIcon& icon, const QPalette& palette, const QSize &size, QIcon::Mode mode, QIcon::State state) + QPixmap Helper::coloredIcon(QWindow *window, const QIcon& icon, const QPalette &palette, const QSize &size, QIcon::Mode mode, QIcon::State state) { const QPalette activePalette = KIconLoader::global()->customPalette(); const bool changePalette = activePalette != palette; if (changePalette) { KIconLoader::global()->setCustomPalette(palette); } - const QPixmap pixmap = icon.pixmap(size, mode, state); + const QPixmap pixmap = icon.pixmap(window, size, mode, state); if (changePalette) { if (activePalette == QPalette()) { KIconLoader::global()->resetPalette(); @@ -1613,4 +1618,17 @@ } return pixmap; } + + QWindow* Helper::getWindow(const QWidget *widget, const QObject *styleObject) + { + QWindow *window = nullptr; + if (widget && widget->window()) { + window = widget->window()->windowHandle(); +#if BREEZE_HAVE_QTQUICK + } else if (auto quickItem = qobject_cast(styleObject)) { + window = quickItem->window(); +#endif + } + return window; + } } diff --git a/kstyle/breezestyle.cpp b/kstyle/breezestyle.cpp --- a/kstyle/breezestyle.cpp +++ b/kstyle/breezestyle.cpp @@ -1276,7 +1276,8 @@ const auto pixmapSize( button->icon().actualSize( button->iconSize() ) ); const QRect pixmapRect( QPoint( offset.x(), button->description().isEmpty() ? (button->height() - pixmapSize.height())/2:offset.y() ), pixmapSize ); - const QPixmap pixmap(_helper->coloredIcon(button->icon(), button->palette(), pixmapSize, + QWindow *window = _helper->getWindow(button, nullptr); + const QPixmap pixmap(_helper->coloredIcon(window, button->icon(), button->palette(), pixmapSize, enabled ? QIcon::Normal : QIcon::Disabled, button->isChecked() ? QIcon::On : QIcon::Off)); drawItemPixmap( &painter, pixmapRect, Qt::AlignCenter, pixmap ); @@ -3888,7 +3889,8 @@ const QSize iconSize( iconWidth, iconWidth ); // get pixmap - const QPixmap pixmap(_helper->coloredIcon(icon, option->palette, iconSize, iconMode, iconState)); + QWindow *window = _helper->getWindow(widget, option->styleObject); + const QPixmap pixmap(_helper->coloredIcon(window, icon, option->palette, iconSize, iconMode, iconState)); // render drawItemPixmap( painter, option->rect, Qt::AlignCenter, pixmap ); @@ -4203,7 +4205,8 @@ else if( mouseOver && flat ) iconMode = QIcon::Active; else iconMode = QIcon::Normal; - const auto pixmap = _helper->coloredIcon(buttonOption->icon, buttonOption->palette, iconSize, iconMode, iconState); + QWindow *window = _helper->getWindow(widget, buttonOption->styleObject); + const auto pixmap = _helper->coloredIcon(window, buttonOption->icon, buttonOption->palette, iconSize, iconMode, iconState); drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap ); } @@ -4329,7 +4332,8 @@ else if( mouseOver && flat ) iconMode = QIcon::Active; else iconMode = QIcon::Normal; - const QPixmap pixmap = _helper->coloredIcon(toolButtonOption->icon, toolButtonOption->palette, iconSize, iconMode, iconState); + QWindow *window = _helper->getWindow(widget, toolButtonOption->styleObject); + const QPixmap pixmap = _helper->coloredIcon(window, toolButtonOption->icon, toolButtonOption->palette, iconSize, iconMode, iconState); drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap ); } @@ -4378,7 +4382,8 @@ if( !buttonOption->icon.isNull() ) { const QIcon::Mode mode( enabled ? QIcon::Normal : QIcon::Disabled ); - const QPixmap pixmap(_helper->coloredIcon(buttonOption->icon, buttonOption->palette, buttonOption->iconSize, mode)); + QWindow *window = _helper->getWindow(widget, buttonOption->styleObject); + const QPixmap pixmap(_helper->coloredIcon(window, buttonOption->icon, buttonOption->palette, buttonOption->iconSize, mode)); drawItemPixmap( painter, rect, textFlags, pixmap ); // adjust rect (copied from QCommonStyle) @@ -4460,7 +4465,8 @@ else if( mouseOver && flat ) mode = QIcon::Active; else mode = QIcon::Normal; - const QPixmap pixmap = _helper->coloredIcon(cb->currentIcon,cb->palette, cb->iconSize, mode); + QWindow *window = _helper->getWindow(widget, cb->styleObject); + const QPixmap pixmap = _helper->coloredIcon(window, cb->currentIcon,cb->palette, cb->iconSize, mode); auto iconRect(editRect); iconRect.setWidth(cb->iconSize.width() + 4); iconRect = alignedRect(cb->direction, @@ -4545,7 +4551,8 @@ } - const auto pixmap = _helper->coloredIcon(menuItemOption->icon, menuItemOption->palette, iconRect.size(), iconMode, iconState); + QWindow *window = _helper->getWindow(widget, menuItemOption->styleObject); + const auto pixmap = _helper->coloredIcon(window, menuItemOption->icon, menuItemOption->palette, iconRect.size(), iconMode, iconState); drawItemPixmap( painter, iconRect, Qt::AlignCenter, pixmap ); // render outline @@ -4724,7 +4731,8 @@ // icon state const QIcon::State iconState( sunken ? QIcon::On:QIcon::Off ); - const QPixmap icon = _helper->coloredIcon(menuItemOption->icon, menuItemOption->palette, iconRect.size(), mode, iconState); + QWindow *window = _helper->getWindow(widget, menuItemOption->styleObject); + const QPixmap icon = _helper->coloredIcon(window, menuItemOption->icon, menuItemOption->palette, iconRect.size(), mode, iconState); painter->drawPixmap( iconRect, icon ); } @@ -5704,7 +5712,8 @@ iconRect = visualRect( option, iconRect ); const QIcon::Mode mode( enabled ? QIcon::Normal : QIcon::Disabled ); - const QPixmap pixmap(_helper->coloredIcon(toolBoxOption->icon, toolBoxOption->palette, iconRect.size(), mode)); + QWindow *window = _helper->getWindow(widget, toolBoxOption->styleObject); + const QPixmap pixmap(_helper->coloredIcon(window, toolBoxOption->icon, toolBoxOption->palette, iconRect.size(), mode)); drawItemPixmap( painter, iconRect, textFlags, pixmap ); } @@ -6586,7 +6595,8 @@ } // get pixmap and render - const QPixmap pixmap = _helper->coloredIcon(icon, option->palette, iconSize, iconMode, iconState); + QWindow *window = _helper->getWindow(widget, option->styleObject); + const QPixmap pixmap = _helper->coloredIcon(window, icon, option->palette, iconSize, iconMode, iconState); painter->drawPixmap( iconRect, pixmap ); }