Windows11/VistaStyle: pass dpr to QIcon::pixmap()

Pass the correct devicePixelRatio to QIcon::pixmap() to make sure the
best pixmap is used for the current dpr.

Pick-to: 6.9
Change-Id: I70014b649457cee819228fa0ead7beb7de944471
Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
Reviewed-by: Wladimir Leuschner <wladimir.leuschner@qt.io>
This commit is contained in:
Christian Ehrlicher 2025-04-19 14:01:06 +02:00
parent ecd63d469f
commit e34db561cf
2 changed files with 14 additions and 11 deletions

View File

@ -665,11 +665,11 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
titlebar->icon.paint(painter, iconRect);
} else {
QStyleOption tool = *titlebar;
QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool, widget).pixmap(16, 16);
tool.rect = iconRect;
painter->save();
const auto extent = proxy()->pixelMetric(PM_SmallIconSize, &tool, widget);
const auto dpr = QStyleHelper::getDpr(widget);
const auto icon = proxy()->standardIcon(SP_TitleBarMenuButton, &tool, widget);
const auto pm = icon.pixmap(QSize(extent, extent), dpr);
proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm);
painter->restore();
}
}
}

View File

@ -2790,7 +2790,9 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
break;
QPalette::ColorRole textRole = disabled ? QPalette::Text : QPalette::ButtonText;
QPixmap pix = mbi->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, option, widget), QIcon::Normal);
const auto dpr = QStyleHelper::getDpr(widget);
const auto extent = proxy()->pixelMetric(PM_SmallIconSize, option, widget);
const auto pix = mbi->icon.pixmap(QSize(extent, extent), dpr, QIcon::Normal);
int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine;
if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget))
@ -3088,7 +3090,6 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
else
stateId = CS_INACTIVE;
int titleHeight = rect.height() - 2;
rect = rect.adjusted(-fw, -fw, fw, 0);
QWindowsThemeData theme(widget, painter, themeNumber, 0, stateId);
@ -3105,7 +3106,9 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
QIcon ico = widget->windowIcon();
bool hasIcon = (ico.cacheKey() != QApplication::windowIcon().cacheKey());
if (hasIcon) {
QPixmap pxIco = ico.pixmap(titleHeight);
const auto titleHeight = rect.height() - 2;
const auto dpr = QStyleHelper::getDpr(widget);
const auto pxIco = ico.pixmap(QSize(titleHeight, titleHeight), dpr);
if (!verticalTitleBar && dwOpt->direction == Qt::RightToLeft)
painter->drawPixmap(rect.width() - titleHeight - pxIco.width(), rect.bottom() - titleHeight - 2, pxIco);
else
@ -3685,11 +3688,11 @@ void QWindowsVistaStyle::drawComplexControl(ComplexControl control, const QStyle
theme.partId = partId;
theme.stateId = stateId;
if (theme.size().isEmpty()) {
int iconSize = proxy()->pixelMetric(PM_SmallIconSize, tb, widget);
QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, tb, widget).pixmap(iconSize, iconSize);
painter->save();
const auto extent = proxy()->pixelMetric(PM_SmallIconSize, tb, widget);
const auto dpr = QStyleHelper::getDpr(widget);
const auto icon = proxy()->standardIcon(SP_TitleBarMenuButton, tb, widget);
const auto pm = icon.pixmap(QSize(extent, extent), dpr);
drawItemPixmap(painter, theme.rect, Qt::AlignCenter, pm);
painter->restore();
} else {
d->drawBackground(theme);
}