QWindows11Style: Draw MDI SubWindows in Windows 11 style
Fixes: QTBUG-120633 Change-Id: I6ad4052ca45f7c90cd52a9d2440b508730d3685d Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> (cherry picked from commit a1f12273b2e355033ab2a9478d1e9702210a0733) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
cfdffa17a5
commit
e64861d416
@ -34,6 +34,7 @@ enum WINUI3Color {
|
|||||||
controlTextSecondary, //Color of text of sunken controls
|
controlTextSecondary, //Color of text of sunken controls
|
||||||
controlStrokeOnAccentSecondary, //Color of frame around Buttons in accent color
|
controlStrokeOnAccentSecondary, //Color of frame around Buttons in accent color
|
||||||
controlFillSolid, //Color for solid fill
|
controlFillSolid, //Color for solid fill
|
||||||
|
surfaceStroke, //Color of MDI window frames
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor WINUI3ColorsLight [] {
|
const static QColor WINUI3ColorsLight [] {
|
||||||
@ -52,6 +53,7 @@ const static QColor WINUI3ColorsLight [] {
|
|||||||
QColor(0x00,0x00,0x00,0x7F), //controlTextSecondary
|
QColor(0x00,0x00,0x00,0x7F), //controlTextSecondary
|
||||||
QColor(0x00,0x00,0x00,0x66), //controlStrokeOnAccentSecondary
|
QColor(0x00,0x00,0x00,0x66), //controlStrokeOnAccentSecondary
|
||||||
QColor(0xFF,0xFF,0xFF,0xFF), //controlFillSolid
|
QColor(0xFF,0xFF,0xFF,0xFF), //controlFillSolid
|
||||||
|
QColor(0x75,0x75,0x75,0x66), //surfaceStroke
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor WINUI3ColorsDark[] {
|
const static QColor WINUI3ColorsDark[] {
|
||||||
@ -70,6 +72,7 @@ const static QColor WINUI3ColorsDark[] {
|
|||||||
QColor(0xFF,0xFF,0xFF,0x87), //controlTextSecondary
|
QColor(0xFF,0xFF,0xFF,0x87), //controlTextSecondary
|
||||||
QColor(0xFF,0xFF,0xFF,0x14), //controlStrokeOnAccentSecondary
|
QColor(0xFF,0xFF,0xFF,0x14), //controlStrokeOnAccentSecondary
|
||||||
QColor(0x45,0x45,0x45,0xFF), //controlFillSolid
|
QColor(0x45,0x45,0x45,0xFF), //controlFillSolid
|
||||||
|
QColor(0x75,0x75,0x75,0x66), //surfaceStroke
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor* WINUI3Colors[] {
|
const static QColor* WINUI3Colors[] {
|
||||||
@ -77,6 +80,8 @@ const static QColor* WINUI3Colors[] {
|
|||||||
WINUI3ColorsDark
|
WINUI3ColorsDark
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const QColor shellCloseButtonColor(0xC4,0x2B,0x1C,0xFF); //Color of close Button in Titlebar
|
||||||
|
|
||||||
#if QT_CONFIG(toolbutton)
|
#if QT_CONFIG(toolbutton)
|
||||||
static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbutton,
|
static void drawArrow(const QStyle *style, const QStyleOptionToolButton *toolbutton,
|
||||||
const QRect &rect, QPainter *painter, const QWidget *widget = nullptr)
|
const QRect &rect, QPainter *painter, const QWidget *widget = nullptr)
|
||||||
@ -496,6 +501,144 @@ void QWindows11Style::drawComplexControl(ComplexControl control, const QStyleOpt
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CC_TitleBar:
|
||||||
|
if (const auto* titlebar = qstyleoption_cast<const QStyleOptionTitleBar*>(option)) {
|
||||||
|
painter->setPen(Qt::NoPen);
|
||||||
|
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][surfaceStroke]));
|
||||||
|
painter->setBrush(titlebar->palette.button());
|
||||||
|
painter->drawRect(titlebar->rect);
|
||||||
|
|
||||||
|
// draw title
|
||||||
|
QRect textRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarLabel, widget);
|
||||||
|
painter->setPen(titlebar->palette.text().color());
|
||||||
|
// Note workspace also does elliding but it does not use the correct font
|
||||||
|
QString title = painter->fontMetrics().elidedText(titlebar->text, Qt::ElideRight, textRect.width() - 14);
|
||||||
|
painter->drawText(textRect.adjusted(1, 1, 1, 1), title, QTextOption(Qt::AlignHCenter | Qt::AlignVCenter));
|
||||||
|
|
||||||
|
QFont buttonFont = QFont(assetFont);
|
||||||
|
buttonFont.setPointSize(8);
|
||||||
|
// min button
|
||||||
|
if ((titlebar->subControls & SC_TitleBarMinButton) && (titlebar->titleBarFlags & Qt::WindowMinimizeButtonHint) &&
|
||||||
|
!(titlebar->titleBarState& Qt::WindowMinimized)) {
|
||||||
|
const QRect minButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMinButton, widget);
|
||||||
|
if (minButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarMinButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(minButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE921");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(minButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// max button
|
||||||
|
if ((titlebar->subControls & SC_TitleBarMaxButton) && (titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint) &&
|
||||||
|
!(titlebar->titleBarState & Qt::WindowMaximized)) {
|
||||||
|
const QRectF maxButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarMaxButton, widget);
|
||||||
|
if (maxButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarMaxButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(maxButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE922");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(maxButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// close button
|
||||||
|
if ((titlebar->subControls & SC_TitleBarCloseButton) && (titlebar->titleBarFlags & Qt::WindowSystemMenuHint)) {
|
||||||
|
const QRect closeButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarCloseButton, widget);
|
||||||
|
if (closeButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarCloseButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(closeButtonRect,shellCloseButtonColor);
|
||||||
|
const QString textToDraw("\uE8BB");
|
||||||
|
painter->setPen(QPen(hover ? titlebar->palette.highlightedText().color() : titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(closeButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// normalize button
|
||||||
|
if ((titlebar->subControls & SC_TitleBarNormalButton) &&
|
||||||
|
(((titlebar->titleBarFlags & Qt::WindowMinimizeButtonHint) &&
|
||||||
|
(titlebar->titleBarState & Qt::WindowMinimized)) ||
|
||||||
|
((titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint) &&
|
||||||
|
(titlebar->titleBarState & Qt::WindowMaximized)))) {
|
||||||
|
const QRect normalButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarNormalButton, widget);
|
||||||
|
if (normalButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarNormalButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(normalButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE923");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(normalButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// context help button
|
||||||
|
if (titlebar->subControls & SC_TitleBarContextHelpButton
|
||||||
|
&& (titlebar->titleBarFlags & Qt::WindowContextHelpButtonHint)) {
|
||||||
|
const QRect contextHelpButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarContextHelpButton, widget);
|
||||||
|
if (contextHelpButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarCloseButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(contextHelpButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE897");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(contextHelpButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// shade button
|
||||||
|
if (titlebar->subControls & SC_TitleBarShadeButton && (titlebar->titleBarFlags & Qt::WindowShadeButtonHint)) {
|
||||||
|
const QRect shadeButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarShadeButton, widget);
|
||||||
|
if (shadeButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarShadeButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(shadeButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE010");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(shadeButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// unshade button
|
||||||
|
if (titlebar->subControls & SC_TitleBarUnshadeButton && (titlebar->titleBarFlags & Qt::WindowShadeButtonHint)) {
|
||||||
|
const QRect unshadeButtonRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarUnshadeButton, widget);
|
||||||
|
if (unshadeButtonRect.isValid()) {
|
||||||
|
bool hover = (titlebar->activeSubControls & SC_TitleBarUnshadeButton) && (titlebar->state & State_MouseOver);
|
||||||
|
if (hover)
|
||||||
|
painter->fillRect(unshadeButtonRect,WINUI3Colors[colorSchemeIndex][subtleHighlightColor]);
|
||||||
|
const QString textToDraw("\uE011");
|
||||||
|
painter->setPen(QPen(titlebar->palette.text().color()));
|
||||||
|
painter->setFont(buttonFont);
|
||||||
|
painter->drawText(unshadeButtonRect, Qt::AlignVCenter | Qt::AlignHCenter, textToDraw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// window icon for system menu
|
||||||
|
if ((titlebar->subControls & SC_TitleBarSysMenu) && (titlebar->titleBarFlags & Qt::WindowSystemMenuHint)) {
|
||||||
|
const QRect iconRect = proxy()->subControlRect(CC_TitleBar, titlebar, SC_TitleBarSysMenu, widget);
|
||||||
|
if (iconRect.isValid()) {
|
||||||
|
if (!titlebar->icon.isNull()) {
|
||||||
|
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();
|
||||||
|
proxy()->drawItemPixmap(painter, iconRect, Qt::AlignCenter, pm);
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
QWindowsVistaStyle::drawComplexControl(control, option, painter, widget);
|
QWindowsVistaStyle::drawComplexControl(control, option, painter, widget);
|
||||||
}
|
}
|
||||||
@ -782,6 +925,64 @@ void QWindows11Style::drawPrimitive(PrimitiveElement element, const QStyleOption
|
|||||||
#endif
|
#endif
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case QStyle::PE_FrameWindow:
|
||||||
|
if (const auto *frm = qstyleoption_cast<const QStyleOptionFrame *>(option)) {
|
||||||
|
|
||||||
|
QRectF rect= option->rect;
|
||||||
|
int fwidth = int((frm->lineWidth + frm->midLineWidth) / QWindowsStylePrivate::nativeMetricScaleFactor(widget));
|
||||||
|
|
||||||
|
QRectF bottomLeftCorner = QRectF(rect.left() + 1.0,
|
||||||
|
rect.bottom() - 1.0 - secondLevelRoundingRadius,
|
||||||
|
secondLevelRoundingRadius,
|
||||||
|
secondLevelRoundingRadius);
|
||||||
|
QRectF bottomRightCorner = QRectF(rect.right() - 1.0 - secondLevelRoundingRadius,
|
||||||
|
rect.bottom() - 1.0 - secondLevelRoundingRadius,
|
||||||
|
secondLevelRoundingRadius,
|
||||||
|
secondLevelRoundingRadius);
|
||||||
|
|
||||||
|
//Draw Mask
|
||||||
|
QBitmap mask(widget->width(), widget->height());
|
||||||
|
mask.clear();
|
||||||
|
|
||||||
|
QPainter maskPainter(&mask);
|
||||||
|
maskPainter.setRenderHint(QPainter::Antialiasing);
|
||||||
|
maskPainter.setBrush(Qt::color1);
|
||||||
|
maskPainter.setPen(Qt::NoPen);
|
||||||
|
maskPainter.drawRoundedRect(option->rect,secondLevelRoundingRadius,secondLevelRoundingRadius);
|
||||||
|
const_cast<QWidget*>(widget)->setMask(mask);
|
||||||
|
|
||||||
|
//Draw Window
|
||||||
|
painter->setPen(QPen(frm->palette.base(), fwidth));
|
||||||
|
painter->drawLine(QPointF(rect.left(), rect.top()),
|
||||||
|
QPointF(rect.left(), rect.bottom() - fwidth));
|
||||||
|
painter->drawLine(QPointF(rect.left() + fwidth, rect.bottom()),
|
||||||
|
QPointF(rect.right() - fwidth, rect.bottom()));
|
||||||
|
painter->drawLine(QPointF(rect.right(), rect.top()),
|
||||||
|
QPointF(rect.right(), rect.bottom() - fwidth));
|
||||||
|
|
||||||
|
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][surfaceStroke]));
|
||||||
|
painter->drawLine(QPointF(rect.left() + 0.5, rect.top() + 0.5),
|
||||||
|
QPointF(rect.left() + 0.5, rect.bottom() - 0.5 - secondLevelRoundingRadius));
|
||||||
|
painter->drawLine(QPointF(rect.left() + 0.5 + secondLevelRoundingRadius, rect.bottom() - 0.5),
|
||||||
|
QPointF(rect.right() - 0.5 - secondLevelRoundingRadius, rect.bottom() - 0.5));
|
||||||
|
painter->drawLine(QPointF(rect.right() - 0.5, rect.top() + 1.5),
|
||||||
|
QPointF(rect.right() - 0.5, rect.bottom() - 0.5 - secondLevelRoundingRadius));
|
||||||
|
|
||||||
|
painter->setPen(Qt::NoPen);
|
||||||
|
painter->setBrush(frm->palette.base());
|
||||||
|
painter->drawPie(bottomRightCorner.marginsAdded(QMargins(2.5,2.5,0.0,0.0)),
|
||||||
|
270 * 16,90 * 16);
|
||||||
|
painter->drawPie(bottomLeftCorner.marginsAdded(QMargins(0.0,2.5,2.5,0.0)),
|
||||||
|
-90 * 16,-90 * 16);
|
||||||
|
|
||||||
|
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][surfaceStroke]));
|
||||||
|
painter->setBrush(Qt::NoBrush);
|
||||||
|
painter->drawArc(bottomRightCorner,
|
||||||
|
0 * 16,-90 * 16);
|
||||||
|
painter->drawArc(bottomLeftCorner,
|
||||||
|
-90 * 16,-90 * 16);
|
||||||
|
}
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
QWindowsVistaStyle::drawPrimitive(element, option, painter, widget);
|
QWindowsVistaStyle::drawPrimitive(element, option, painter, widget);
|
||||||
}
|
}
|
||||||
@ -1464,6 +1665,94 @@ QRect QWindows11Style::subControlRect(ComplexControl control, const QStyleOption
|
|||||||
ret = visualRect(spinbox->direction, spinbox->rect, ret);
|
ret = visualRect(spinbox->direction, spinbox->rect, ret);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case CC_TitleBar:
|
||||||
|
if (const QStyleOptionTitleBar *titlebar = qstyleoption_cast<const QStyleOptionTitleBar *>(option)) {
|
||||||
|
SubControl sc = subControl;
|
||||||
|
ret = QCommonStyle::subControlRect(control, option, subControl, widget);
|
||||||
|
static constexpr int indent = 3;
|
||||||
|
static constexpr int controlWidthMargin = 2;
|
||||||
|
const int controlHeight = titlebar->rect.height();
|
||||||
|
const int controlWidth = 46;
|
||||||
|
const int iconSize = proxy()->pixelMetric(QStyle::PM_TitleBarButtonIconSize, option, widget);
|
||||||
|
int offset = -(controlWidthMargin + indent);
|
||||||
|
|
||||||
|
bool isMinimized = titlebar->titleBarState & Qt::WindowMinimized;
|
||||||
|
bool isMaximized = titlebar->titleBarState & Qt::WindowMaximized;
|
||||||
|
|
||||||
|
switch (sc) {
|
||||||
|
case SC_TitleBarLabel:
|
||||||
|
if (titlebar->titleBarFlags & (Qt::WindowTitleHint | Qt::WindowSystemMenuHint)) {
|
||||||
|
ret = titlebar->rect;
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowSystemMenuHint)
|
||||||
|
ret.adjust(iconSize + controlWidthMargin + indent, 0, -controlWidth, 0);
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowMinimizeButtonHint)
|
||||||
|
ret.adjust(0, 0, -controlWidth, 0);
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint)
|
||||||
|
ret.adjust(0, 0, -controlWidth, 0);
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowShadeButtonHint)
|
||||||
|
ret.adjust(0, 0, -controlWidth, 0);
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowContextHelpButtonHint)
|
||||||
|
ret.adjust(0, 0, -controlWidth, 0);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case SC_TitleBarContextHelpButton:
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowContextHelpButtonHint)
|
||||||
|
offset += controlWidth;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarMinButton:
|
||||||
|
if (!isMinimized && (titlebar->titleBarFlags & Qt::WindowMinimizeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarMinButton)
|
||||||
|
break;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarNormalButton:
|
||||||
|
if (isMinimized && (titlebar->titleBarFlags & Qt::WindowMinimizeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (isMaximized && (titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarNormalButton)
|
||||||
|
break;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarMaxButton:
|
||||||
|
if (!isMaximized && (titlebar->titleBarFlags & Qt::WindowMaximizeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarMaxButton)
|
||||||
|
break;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarShadeButton:
|
||||||
|
if (!isMinimized && (titlebar->titleBarFlags & Qt::WindowShadeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarShadeButton)
|
||||||
|
break;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarUnshadeButton:
|
||||||
|
if (isMinimized && (titlebar->titleBarFlags & Qt::WindowShadeButtonHint))
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarUnshadeButton)
|
||||||
|
break;
|
||||||
|
Q_FALLTHROUGH();
|
||||||
|
case SC_TitleBarCloseButton:
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowSystemMenuHint)
|
||||||
|
offset += controlWidth;
|
||||||
|
else if (sc == SC_TitleBarCloseButton)
|
||||||
|
break;
|
||||||
|
ret.setRect(titlebar->rect.right() - offset, titlebar->rect.top(),
|
||||||
|
controlWidth, controlHeight);
|
||||||
|
break;
|
||||||
|
case SC_TitleBarSysMenu:
|
||||||
|
if (titlebar->titleBarFlags & Qt::WindowSystemMenuHint) {
|
||||||
|
ret.setRect(titlebar->rect.left() + controlWidthMargin + indent, titlebar->rect.top() + iconSize/2,
|
||||||
|
iconSize, iconSize);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (widget && isMinimized && titlebar->rect.width() < offset)
|
||||||
|
const_cast<QWidget*>(widget)->resize(controlWidthMargin + indent + offset + iconSize + controlWidthMargin, controlWidth);
|
||||||
|
ret = visualRect(titlebar->direction, titlebar->rect, ret);
|
||||||
|
}
|
||||||
|
break;
|
||||||
#endif // Qt_NO_SPINBOX
|
#endif // Qt_NO_SPINBOX
|
||||||
default:
|
default:
|
||||||
ret = QWindowsVistaStyle::subControlRect(control, option, subControl, widget);
|
ret = QWindowsVistaStyle::subControlRect(control, option, subControl, widget);
|
||||||
@ -1517,7 +1806,10 @@ int QWindows11Style::pixelMetric(PixelMetric metric, const QStyleOption *option,
|
|||||||
case QStyle::PM_SliderLength:
|
case QStyle::PM_SliderLength:
|
||||||
res = int(QStyleHelper::dpiScaled(16, option));
|
res = int(QStyleHelper::dpiScaled(16, option));
|
||||||
break;
|
break;
|
||||||
|
case QStyle::PM_TitleBarButtonIconSize:
|
||||||
|
return 16;
|
||||||
|
case QStyle::PM_TitleBarButtonSize:
|
||||||
|
return 32;
|
||||||
default:
|
default:
|
||||||
res = QWindowsVistaStyle::pixelMetric(metric, option, widget);
|
res = QWindowsVistaStyle::pixelMetric(metric, option, widget);
|
||||||
}
|
}
|
||||||
@ -1561,7 +1853,7 @@ void QWindows11Style::polish(QWidget* widget)
|
|||||||
pal.setColor(QPalette::Base, pal.window().color());
|
pal.setColor(QPalette::Base, pal.window().color());
|
||||||
widget->setPalette(pal);
|
widget->setPalette(pal);
|
||||||
}
|
}
|
||||||
else if (widget->inherits("QAbstractScrollArea")) {
|
else if (widget->inherits("QAbstractScrollArea") && !widget->inherits("QMdiArea")) {
|
||||||
if (auto scrollarea = qobject_cast<QAbstractScrollArea*>(widget)) {
|
if (auto scrollarea = qobject_cast<QAbstractScrollArea*>(widget)) {
|
||||||
QPalette pal = widget->palette();
|
QPalette pal = widget->palette();
|
||||||
pal.setColor(scrollarea->viewport()->backgroundRole(), Qt::transparent);
|
pal.setColor(scrollarea->viewport()->backgroundRole(), Qt::transparent);
|
||||||
|
@ -4662,7 +4662,7 @@ void QWindowsVistaStyle::polish(QWidget *widget)
|
|||||||
pal.setColor(QPalette::Base, pal.window().color());
|
pal.setColor(QPalette::Base, pal.window().color());
|
||||||
widget->setPalette(pal);
|
widget->setPalette(pal);
|
||||||
}
|
}
|
||||||
else if (widget->inherits("QAbstractScrollArea")) {
|
else if (widget->inherits("QAbstractScrollArea") && !widget->inherits("QMdiArea")) {
|
||||||
if (auto scrollarea = qobject_cast<QAbstractScrollArea*>(widget)) {
|
if (auto scrollarea = qobject_cast<QAbstractScrollArea*>(widget)) {
|
||||||
QPalette pal = widget->palette();
|
QPalette pal = widget->palette();
|
||||||
pal.setColor(scrollarea->viewport()->backgroundRole(), Qt::transparent);
|
pal.setColor(scrollarea->viewport()->backgroundRole(), Qt::transparent);
|
||||||
|
@ -954,6 +954,8 @@ void tst_QMdiSubWindow::mouseDoubleClick()
|
|||||||
if (!window->style()->styleHint(QStyle::SH_TitleBar_NoBorder, &options, window))
|
if (!window->style()->styleHint(QStyle::SH_TitleBar_NoBorder, &options, window))
|
||||||
height += window->isMinimized() ? 8 : 4;
|
height += window->isMinimized() ? 8 : 4;
|
||||||
QPoint mousePosition(window->width() / 2, height - 1);
|
QPoint mousePosition(window->width() / 2, height - 1);
|
||||||
|
if (window->style()->inherits("QWindows11Style"))
|
||||||
|
mousePosition = QPoint(8, height - 1);
|
||||||
sendMouseMove(window, mousePosition, Qt::NoButton);
|
sendMouseMove(window, mousePosition, Qt::NoButton);
|
||||||
|
|
||||||
// Without Qt::WindowShadeButtonHint flag set
|
// Without Qt::WindowShadeButtonHint flag set
|
||||||
@ -981,8 +983,10 @@ void tst_QMdiSubWindow::mouseDoubleClick()
|
|||||||
|
|
||||||
window->showMinimized();
|
window->showMinimized();
|
||||||
QVERIFY(window->isMinimized());
|
QVERIFY(window->isMinimized());
|
||||||
|
//Process QEvent::WindowStateChange
|
||||||
|
QCoreApplication::processEvents();
|
||||||
sendMouseDoubleClick(window, mousePosition);
|
sendMouseDoubleClick(window, mousePosition);
|
||||||
QVERIFY(!window->isMinimized());
|
QTRY_VERIFY(!window->isMinimized());
|
||||||
QCOMPARE(window->geometry(), originalGeometry);
|
QCOMPARE(window->geometry(), originalGeometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user