QWindows11Style: Change appearance when Button is disabled/hovered
Fixes: QTBUG-126503 Fixes: QTBUG-125781 Pick-to: 6.7 Change-Id: Ib3e1ff2cab2c82c04445d238861766dd93237ce0 Reviewed-by: Oliver Wolff <oliver.wolff@qt.io> (cherry picked from commit 3aca4589b06c6614538c9d96cd1c38e548499e82) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
a6e399251a
commit
2a10643d44
@ -47,6 +47,8 @@ enum WINUI3Color {
|
|||||||
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
|
surfaceStroke, //Color of MDI window frames
|
||||||
|
controlAccentDisabled,
|
||||||
|
textAccentDisabled
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor WINUI3ColorsLight [] {
|
const static QColor WINUI3ColorsLight [] {
|
||||||
@ -66,6 +68,8 @@ const static QColor WINUI3ColorsLight [] {
|
|||||||
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
|
QColor(0x75,0x75,0x75,0x66), //surfaceStroke
|
||||||
|
QColor(0x00,0x00,0x00,0x37), //controlAccentDisabled
|
||||||
|
QColor(0xFF,0xFF,0xFF,0xFF), //textAccentDisabled
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor WINUI3ColorsDark[] {
|
const static QColor WINUI3ColorsDark[] {
|
||||||
@ -85,6 +89,8 @@ const static QColor WINUI3ColorsDark[] {
|
|||||||
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
|
QColor(0x75,0x75,0x75,0x66), //surfaceStroke
|
||||||
|
QColor(0xFF,0xFF,0xFF,0x28), //controlAccentDisabled
|
||||||
|
QColor(0xFF,0xFF,0xFF,0x87), //textAccentDisabled
|
||||||
};
|
};
|
||||||
|
|
||||||
const static QColor* WINUI3Colors[] {
|
const static QColor* WINUI3Colors[] {
|
||||||
@ -1132,6 +1138,8 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
const QString text = d->toolButtonElideText(toolbutton, rect, alignment);
|
const QString text = d->toolButtonElideText(toolbutton, rect, alignment);
|
||||||
if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText))
|
if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText))
|
||||||
painter->setPen(QPen(toolbutton->palette.buttonText().color()));
|
painter->setPen(QPen(toolbutton->palette.buttonText().color()));
|
||||||
|
else if (!(toolbutton->state & State_Enabled))
|
||||||
|
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textAccentDisabled]) : QPen(toolbutton->palette.buttonText().color()));
|
||||||
else
|
else
|
||||||
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
||||||
proxy()->drawItemText(painter, rect, alignment, toolbutton->palette,
|
proxy()->drawItemText(painter, rect, alignment, toolbutton->palette,
|
||||||
@ -1186,6 +1194,8 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
const QString text = d->toolButtonElideText(toolbutton, tr, alignment);
|
const QString text = d->toolButtonElideText(toolbutton, tr, alignment);
|
||||||
if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText))
|
if (toolbutton->state & State_Raised || toolbutton->palette.isBrushSet(QPalette::Current, QPalette::ButtonText))
|
||||||
painter->setPen(QPen(toolbutton->palette.buttonText().color()));
|
painter->setPen(QPen(toolbutton->palette.buttonText().color()));
|
||||||
|
else if (!(toolbutton->state & State_Enabled))
|
||||||
|
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textAccentDisabled]) : QPen(toolbutton->palette.buttonText().color()));
|
||||||
else
|
else
|
||||||
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
painter->setPen(QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
||||||
proxy()->drawItemText(painter, QStyle::visualRect(toolbutton->direction, rect, tr), alignment, toolbutton->palette,
|
proxy()->drawItemText(painter, QStyle::visualRect(toolbutton->direction, rect, tr), alignment, toolbutton->palette,
|
||||||
@ -1368,6 +1378,8 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
|
|
||||||
if (btn->state & State_Sunken)
|
if (btn->state & State_Sunken)
|
||||||
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textOnAccentSecondary]) : QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textOnAccentSecondary]) : QPen(WINUI3Colors[colorSchemeIndex][controlTextSecondary]));
|
||||||
|
else if (!(btn->state & State_Enabled))
|
||||||
|
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textAccentDisabled]) : QPen(btn->palette.buttonText().color()));
|
||||||
else
|
else
|
||||||
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textOnAccentPrimary]) : QPen(btn->palette.buttonText().color()));
|
painter->setPen(flags & State_On ? QPen(WINUI3Colors[colorSchemeIndex][textOnAccentPrimary]) : QPen(btn->palette.buttonText().color()));
|
||||||
proxy()->drawItemText(painter, textRect, tf, option->palette,btn->state & State_Enabled, btn->text);
|
proxy()->drawItemText(painter, textRect, tf, option->palette,btn->state & State_Enabled, btn->text);
|
||||||
@ -1387,15 +1399,15 @@ void QWindows11Style::drawControl(ControlElement element, const QStyleOption *op
|
|||||||
} else {
|
} else {
|
||||||
QRectF rect = btn->rect.marginsRemoved(QMargins(2,2,2,2));
|
QRectF rect = btn->rect.marginsRemoved(QMargins(2,2,2,2));
|
||||||
painter->setPen(Qt::NoPen);
|
painter->setPen(Qt::NoPen);
|
||||||
painter->setBrush(flags & State_On ? option->palette.accent() : option->palette.button());
|
if (flags & (State_Sunken))
|
||||||
|
painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(120) : WINUI3Colors[colorSchemeIndex][controlFillTertiary]);
|
||||||
|
else if (flags & State_MouseOver)
|
||||||
|
painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(110) : WINUI3Colors[colorSchemeIndex][controlFillSecondary]);
|
||||||
|
else if (!(flags & State_Enabled))
|
||||||
|
painter->setBrush(flags & State_On ? WINUI3Colors[colorSchemeIndex][controlAccentDisabled] : option->palette.button());
|
||||||
|
else
|
||||||
|
painter->setBrush(flags & State_On ? option->palette.accent() : option->palette.button());
|
||||||
painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius);
|
painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius);
|
||||||
if (flags.testFlags(State_Sunken | State_MouseOver)) {
|
|
||||||
if (flags & (State_Sunken))
|
|
||||||
painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(120) : WINUI3Colors[colorSchemeIndex][controlFillTertiary]);
|
|
||||||
else if (flags & State_MouseOver)
|
|
||||||
painter->setBrush(flags & State_On ? option->palette.accent().color().lighter(110) : WINUI3Colors[colorSchemeIndex][controlFillSecondary]);
|
|
||||||
painter->drawRoundedRect(rect, secondLevelRoundingRadius, secondLevelRoundingRadius);
|
|
||||||
}
|
|
||||||
|
|
||||||
rect.adjust(0.5,0.5,-0.5,-0.5);
|
rect.adjust(0.5,0.5,-0.5,-0.5);
|
||||||
painter->setBrush(Qt::NoBrush);
|
painter->setBrush(Qt::NoBrush);
|
||||||
@ -2057,6 +2069,17 @@ void QWindows11Style::polish(QWidget* widget)
|
|||||||
}
|
}
|
||||||
} else if (widget->inherits("QAbstractButton") || widget->inherits("QToolButton")) {
|
} else if (widget->inherits("QAbstractButton") || widget->inherits("QToolButton")) {
|
||||||
widget->setAutoFillBackground(false);
|
widget->setAutoFillBackground(false);
|
||||||
|
auto pal = widget->palette();
|
||||||
|
if (colorSchemeIndex == 0) {
|
||||||
|
pal.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(0x00,0x00,0x00,0x5C));
|
||||||
|
pal.setColor(QPalette::Disabled, QPalette::Button, QColor(0xF9,0xF9,0xF9,0x4D));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
pal.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(0xFF,0xFF,0xFF,0x87));
|
||||||
|
pal.setColor(QPalette::Disabled, QPalette::Button, QColor(0xFF,0xFF,0xFF,0x6B));
|
||||||
|
}
|
||||||
|
widget->setPalette(pal);
|
||||||
|
|
||||||
} else if (qobject_cast<QGraphicsView *>(widget) && !qobject_cast<QTextEdit *>(widget)) {
|
} else if (qobject_cast<QGraphicsView *>(widget) && !qobject_cast<QTextEdit *>(widget)) {
|
||||||
QPalette pal = widget->palette();
|
QPalette pal = widget->palette();
|
||||||
pal.setColor(QPalette::Base, pal.window().color());
|
pal.setColor(QPalette::Base, pal.window().color());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user