Windows11/VistaStyle: Simplify painting icon for CE_MenuItem

Use QIcon::paint() instead retrieving a QPixmap from the icon and paint
it 'manually'.

Change-Id: I4e8e47bf8d7fdffa8e65f93e3b8501074d831c43
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
(cherry picked from commit a3b24c2842cf48bf0d82d8d52ce2dc0edd441fc4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Christian Ehrlicher 2025-04-18 22:50:14 +02:00 committed by Qt Cherry-pick Bot
parent f71e7ce350
commit a8d72fe9de
2 changed files with 7 additions and 11 deletions

View File

@ -1580,12 +1580,11 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal;
if (act && !dis)
mode = QIcon::Active;
QPixmap pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget),
mode, checked ? QIcon::On : QIcon::Off);
QRect pmr(QPoint(0, 0), pixmap.deviceIndependentSize().toSize());
const auto size = proxy()->pixelMetric(PM_SmallIconSize, option, widget);
QRect pmr(QPoint(0, 0), QSize(size, size));
pmr.moveCenter(vCheckRect.center());
painter->setPen(menuitem->palette.text().color());
painter->drawPixmap(pmr.topLeft(), pixmap);
menuitem->icon.paint(painter, pmr, Qt::AlignCenter, mode,
checked ? QIcon::On : QIcon::Off);
} else if (checked) {
painter->save();
if (dis)

View File

@ -2935,13 +2935,10 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
if (act && !dis)
mode = QIcon::Active;
const auto size = proxy()->pixelMetric(PM_SmallIconSize, option, widget);
const auto dpr = painter->device()->devicePixelRatio();
const auto pixmap = menuitem->icon.pixmap({size, size}, dpr, mode,
checked ? QIcon::On : QIcon::Off);
QRect pmr(QPoint(0, 0), pixmap.deviceIndependentSize().toSize());
QRect pmr(QPoint(0, 0), QSize(size, size));
pmr.moveCenter(vCheckRect.center());
painter->setPen(menuitem->palette.text().color());
painter->drawPixmap(pmr.topLeft(), pixmap);
menuitem->icon.paint(painter, vCheckRect, Qt::AlignCenter, mode,
checked ? QIcon::On : QIcon::Off);
}
painter->setPen(menuitem->palette.buttonText().color());