From 5fb6331a17a5c43b91daddf4a30e46ccbd1419b5 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 12 Dec 2012 11:22:36 +0100 Subject: [PATCH] Fix title bar height of Aero wizard on Windows 8. Windows 8 no longer allows for negative values to WM_NCCALCSIZE to shrink the title bar. Task-number: QTBUG-28435 Change-Id: I2e2e5e6aea9cc6781be4e9b06c9547e1e5ec86cb Reviewed-by: Miikka Heikkinen Reviewed-by: Oliver Wolff Reviewed-by: Joerg Bornemann --- src/widgets/dialogs/qwizard_win.cpp | 15 +++++++++++++++ src/widgets/dialogs/qwizard_win_p.h | 6 ++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/widgets/dialogs/qwizard_win.cpp b/src/widgets/dialogs/qwizard_win.cpp index e328a5f498..45484b906b 100644 --- a/src/widgets/dialogs/qwizard_win.cpp +++ b/src/widgets/dialogs/qwizard_win.cpp @@ -271,6 +271,8 @@ QVistaHelper::~QVistaHelper() void QVistaHelper::updateCustomMargins() { + if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8) + return; // Negative margins are not supported on Windows 8. if (QWindow *window = wizard->windowHandle()) { // Reduce top frame to zero since we paint it ourselves. const QMargins customMargins = vistaState() == VistaAero ? @@ -768,6 +770,19 @@ int QVistaHelper::titleOffset() return leftMargin() + iconOffset; } +int QVistaHelper::topOffset() +{ + if (vistaState() != VistaAero) + return titleBarSize() + 3; + static const int aeroOffset = + QSysInfo::WindowsVersion == QSysInfo::WV_WINDOWS7 ? + QStyleHelper::dpiScaled(4) : QStyleHelper::dpiScaled(13); + int result = aeroOffset; + if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8) + result += titleBarSize(); + return result; +} + QT_END_NAMESPACE #endif // QT_NO_STYLE_WINDOWSVISTA diff --git a/src/widgets/dialogs/qwizard_win_p.h b/src/widgets/dialogs/qwizard_win_p.h index 610812dd60..4dbb71f94b 100644 --- a/src/widgets/dialogs/qwizard_win_p.h +++ b/src/widgets/dialogs/qwizard_win_p.h @@ -105,10 +105,8 @@ public: return int(QStyleHelper::dpiScaled( QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? 4 : 6)); } - static int topOffset() { - static int aeroOffset = QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS7 ? - QStyleHelper::dpiScaled(4) : QStyleHelper::dpiScaled(13); - return (titleBarSize() + (vistaState() == VistaAero ? aeroOffset : 3)); } + static int topOffset(); + private: static HFONT getCaptionFont(HANDLE hTheme); bool drawTitleText(QPainter *painter, const QString &text, const QRect &rect, HDC hdc);