Windows: Use pixmaps at 1.0 scale for icons in the QPA menus

The Menu type from Qt Quick's libs.platform module on Windows uses the
Win32-based menus implemented in the Windows QPA backend. Those are not
High-DPI aware, so we cannot use a scaled up pixmap for the menu icons.
The native Windows icon engine returns scaled pixmaps (defaulting to the
QGuiApplication::devicePixelRatio value if not explicitly specified), so
we have to explicitly ask for pixmaps with scale factor 1.0.

Pick-to: 6.7
Fixes: QTBUG-127551
Change-Id: I191915127890ae265b169d5cd8d6c9f058e36a13
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
(cherry picked from commit fdfb360f4f60cbdb9ce7f29f424dad70f0679b17)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Volker Hilsheimer 2024-08-01 13:47:34 +02:00 committed by Qt Cherry-pick Bot
parent 5aafe2851f
commit 0f89dbb571

View File

@ -235,7 +235,9 @@ void QWindowsMenuItem::updateBitmap()
freeBitmap();
if (!m_icon.isNull()) {
const int size = m_iconSize ? m_iconSize : GetSystemMetrics(SM_CYMENUCHECK);
m_hbitmap = qt_pixmapToWinHBITMAP(m_icon.pixmap(QSize(size, size)), 1);
// native Win32 menus don't support high-DPI versions of icons, so always
// use the pixmap for a 1.0 scale factor.
m_hbitmap = qt_pixmapToWinHBITMAP(m_icon.pixmap(QSize(size, size), 1.0), 1);
}
MENUITEMINFO itemInfo;
menuItemInfoInit(itemInfo);