QWizard: Fix frame when using Vista style/MSVC2012
Work around GetSystemMetrics() returning the wrong value using MSVC2012 and later. The special handling of Windows 8 and later is then no longer required. [ChangeLog][QtWidgets][QWizard] Fixed frame when using Vista style/MSVC2012. Task-number: QTBUG-36192 Change-Id: I39c2ab70a266f12cd65fa740b10b86edffa60417 Reviewed-by: Joerg Bornemann <joerg.bornemann@digia.com>
This commit is contained in:
parent
f34cba5db4
commit
852308114f
@ -280,8 +280,6 @@ QVistaHelper::~QVistaHelper()
|
|||||||
|
|
||||||
void QVistaHelper::updateCustomMargins(bool vistaMargins)
|
void QVistaHelper::updateCustomMargins(bool vistaMargins)
|
||||||
{
|
{
|
||||||
if (QSysInfo::WindowsVersion >= QSysInfo::WV_WINDOWS8)
|
|
||||||
return; // Negative margins are not supported on Windows 8.
|
|
||||||
if (QWindow *window = wizard->windowHandle()) {
|
if (QWindow *window = wizard->windowHandle()) {
|
||||||
// Reduce top frame to zero since we paint it ourselves.
|
// Reduce top frame to zero since we paint it ourselves.
|
||||||
const QMargins customMargins = vistaMargins ?
|
const QMargins customMargins = vistaMargins ?
|
||||||
@ -770,6 +768,33 @@ bool QVistaHelper::drawBlackRect(const QRect &rect, HDC hdc)
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(_MSC_VER) || _MSC_VER < 1700
|
||||||
|
static inline int getWindowBottomMargin()
|
||||||
|
{
|
||||||
|
return GetSystemMetrics(SM_CYSIZEFRAME);
|
||||||
|
}
|
||||||
|
#else // !_MSC_VER || _MSC_VER < 1700
|
||||||
|
// QTBUG-36192, GetSystemMetrics(SM_CYSIZEFRAME) returns bogus values
|
||||||
|
// for MSVC2012 which leads to the custom margin having no effect since
|
||||||
|
// that only works when removing the entire margin.
|
||||||
|
static inline int getWindowBottomMargin()
|
||||||
|
{
|
||||||
|
RECT rect = {0, 0, 0, 0};
|
||||||
|
AdjustWindowRectEx(&rect, WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_THICKFRAME | WS_DLGFRAME, FALSE, 0);
|
||||||
|
return qAbs(rect.bottom);
|
||||||
|
}
|
||||||
|
#endif // _MSC_VER >= 1700
|
||||||
|
|
||||||
|
int QVistaHelper::frameSize()
|
||||||
|
{
|
||||||
|
return getWindowBottomMargin();
|
||||||
|
}
|
||||||
|
|
||||||
|
int QVistaHelper::captionSize()
|
||||||
|
{
|
||||||
|
return GetSystemMetrics(SM_CYCAPTION);
|
||||||
|
}
|
||||||
|
|
||||||
bool QVistaHelper::resolveSymbols()
|
bool QVistaHelper::resolveSymbols()
|
||||||
{
|
{
|
||||||
static bool tried = false;
|
static bool tried = false;
|
||||||
@ -828,10 +853,7 @@ int QVistaHelper::topOffset()
|
|||||||
static const int aeroOffset =
|
static const int aeroOffset =
|
||||||
QSysInfo::WindowsVersion == QSysInfo::WV_WINDOWS7 ?
|
QSysInfo::WindowsVersion == QSysInfo::WV_WINDOWS7 ?
|
||||||
QStyleHelper::dpiScaled(4) : QStyleHelper::dpiScaled(13);
|
QStyleHelper::dpiScaled(4) : QStyleHelper::dpiScaled(13);
|
||||||
int result = aeroOffset;
|
return aeroOffset + titleBarSize();
|
||||||
if (QSysInfo::WindowsVersion < QSysInfo::WV_WINDOWS8)
|
|
||||||
result += titleBarSize();
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -117,8 +117,8 @@ private:
|
|||||||
bool drawTitleText(QPainter *painter, const QString &text, const QRect &rect, HDC hdc);
|
bool drawTitleText(QPainter *painter, const QString &text, const QRect &rect, HDC hdc);
|
||||||
static bool drawBlackRect(const QRect &rect, HDC hdc);
|
static bool drawBlackRect(const QRect &rect, HDC hdc);
|
||||||
|
|
||||||
static int frameSize() { return GetSystemMetrics(SM_CYSIZEFRAME); }
|
static int frameSize();
|
||||||
static int captionSize() { return GetSystemMetrics(SM_CYCAPTION); }
|
static int captionSize();
|
||||||
|
|
||||||
static int backButtonSize() { return int(QStyleHelper::dpiScaled(30)); }
|
static int backButtonSize() { return int(QStyleHelper::dpiScaled(30)); }
|
||||||
static int iconSize() { return 16; } // Standard Aero
|
static int iconSize() { return 16; } // Standard Aero
|
||||||
|
Loading…
x
Reference in New Issue
Block a user