From efc318e05a2288f3fe62d9d7b2b892906e9263e0 Mon Sep 17 00:00:00 2001 From: Christian Ehrlicher Date: Tue, 24 Dec 2024 21:34:37 +0100 Subject: [PATCH] Widgets: pass dpr to QIcon::pixmap() Change the remaining calls to QIcon::pixmap() to pass a valid devicePixelRatio parameter. Pick-to: 6.9 Change-Id: I0e71e20c8109e296446e9e13cddba31d53c05df9 Reviewed-by: Volker Hilsheimer --- src/widgets/dialogs/qmessagebox.cpp | 3 +-- src/widgets/doc/snippets/code/doc_src_styles.cpp | 4 +++- src/widgets/itemviews/qitemdelegate.cpp | 4 +++- src/widgets/styles/qfusionstyle.cpp | 3 ++- src/widgets/styles/qwindowsstyle.cpp | 9 ++++----- src/widgets/util/qsystemtrayicon.cpp | 2 +- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp index 2a950228cd2..b2a7ad274b2 100644 --- a/src/widgets/dialogs/qmessagebox.cpp +++ b/src/widgets/dialogs/qmessagebox.cpp @@ -1924,8 +1924,7 @@ void QMessageBox::about(QWidget *parent, const QString &title, const QString &te ); msgBox->setAttribute(Qt::WA_DeleteOnClose); QIcon icon = msgBox->windowIcon(); - QSize size = icon.actualSize(QSize(64, 64)); - msgBox->setIconPixmap(icon.pixmap(size)); + msgBox->setIconPixmap(icon.pixmap(QSize(64, 64), msgBox->devicePixelRatio())); // should perhaps be a style hint #ifdef Q_OS_MAC diff --git a/src/widgets/doc/snippets/code/doc_src_styles.cpp b/src/widgets/doc/snippets/code/doc_src_styles.cpp index 72382217a2b..ba91ac2b9ff 100644 --- a/src/widgets/doc/snippets/code/doc_src_styles.cpp +++ b/src/widgets/doc/snippets/code/doc_src_styles.cpp @@ -78,7 +78,9 @@ QPixmap pix; QRect textRect = btn->rect; if (!btn->icon.isNull()) { - pix = btn->icon.pixmap(btn->iconSize, btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled); + const auto dpr = p->device()->devicePixelRatio(); + pix = btn->icon.pixmap(btn->iconSize, dpr, + btn->state & State_Enabled ? QIcon::Normal : QIcon::Disabled); drawItemPixmap(p, btn->rect, alignment, pix); if (btn->direction == Qt::RightToLeft) textRect.setRight(textRect.right() - btn->iconSize.width() - 4); diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index b50287a4ad6..be17dcc8c74 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -934,7 +935,8 @@ QPixmap QItemDelegate::decoration(const QStyleOptionViewItem &option, const QVar case QMetaType::QIcon: { QIcon::Mode mode = d->iconMode(option.state); QIcon::State state = d->iconState(option.state); - return qvariant_cast(variant).pixmap(option.decorationSize, mode, state); } + const auto dpr = QStyleHelper::getDpr(option.widget); + return qvariant_cast(variant).pixmap(option.decorationSize, dpr, mode, state); } case QMetaType::QColor: { static QPixmap pixmap(option.decorationSize); pixmap.fill(qvariant_cast(variant)); diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp index 558e4d98c57..45ca248b479 100644 --- a/src/widgets/styles/qfusionstyle.cpp +++ b/src/widgets/styles/qfusionstyle.cpp @@ -2182,7 +2182,8 @@ void QFusionStyle::drawComplexControl(ComplexControl control, const QStyleOption titleBar->icon.paint(painter, iconRect); } else { QStyleOption tool = *titleBar; - QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool, widget).pixmap(16, 16); + QPixmap pm = proxy()->standardIcon(SP_TitleBarMenuButton, &tool, widget) + .pixmap(QSize(16, 16), QStyleHelper::getDpr(painter)); tool.rect = iconRect; painter->save(); proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm); diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp index ca1ab05e4a7..4adfd4b08c5 100644 --- a/src/widgets/styles/qwindowsstyle.cpp +++ b/src/widgets/styles/qwindowsstyle.cpp @@ -1055,11 +1055,10 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai QIcon::Mode mode = dis ? QIcon::Disabled : QIcon::Normal; if (act && !dis) mode = QIcon::Active; - QPixmap pixmap; - if (checked) - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode, QIcon::On); - else - pixmap = menuitem->icon.pixmap(proxy()->pixelMetric(PM_SmallIconSize, opt, widget), mode); + const auto size = proxy()->pixelMetric(PM_SmallIconSize, opt, widget); + const auto dpr = QStyleHelper::getDpr(p); + const auto state = checked ? QIcon::On : QIcon::Off; + const auto pixmap = menuitem->icon.pixmap(QSize(size, size), dpr, mode, state); QRect pmr(QPoint(0, 0), pixmap.deviceIndependentSize().toSize()); pmr.moveCenter(vCheckRect.center()); p->setPen(menuitem->palette.text().color()); diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp index a21f84bb7cb..cd098eaffe0 100644 --- a/src/widgets/util/qsystemtrayicon.cpp +++ b/src/widgets/util/qsystemtrayicon.cpp @@ -520,7 +520,7 @@ QBalloonTip::QBalloonTip(const QIcon &icon, const QString &title, #if QT_CONFIG(label) if (!icon.isNull()) { QLabel *iconLabel = new QLabel; - iconLabel->setPixmap(icon.pixmap(iconSize, iconSize)); + iconLabel->setPixmap(icon.pixmap(QSize(iconSize, iconSize), devicePixelRatio())); iconLabel->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); iconLabel->setMargin(2); layout->addWidget(iconLabel, 0, 0);