QMacStyle: fix tool buttons (in checked mode)
While switching to the 'momentary push in' button type, the old code that shows button as pressed/checked was removed. Since 'square' buttons were sharing this part with rounded push buttons, the change broke checked square buttons. So we retain the old code for this particular case. Also, add a minimal baseline test for this scenario: square button, triggering 'toolbutton' style with/out 'checked' state. Fixes: QTBUG-100802 Pick-to: 6.3 6.2 Change-Id: Ib7b15b13ead834c7bb2cd36de76ccd5bedb07810 Reviewed-by: Axel Spoerl <axel.spoerl@qt.io> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
81c6f224c4
commit
af05f278ed
@ -3722,9 +3722,14 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
|||||||
// not show its state otherwise):
|
// not show its state otherwise):
|
||||||
[pb highlight:isPressed];
|
[pb highlight:isPressed];
|
||||||
|
|
||||||
|
|
||||||
|
if (cw.type == QMacStylePrivate::Button_SquareButton) {
|
||||||
|
pb.state = isHighlighted && !isPressed ? NSControlStateValueOn : NSControlStateValueOff;
|
||||||
|
} else {
|
||||||
// For default/checked button this will give the required
|
// For default/checked button this will give the required
|
||||||
// button accent color:
|
// button accent color:
|
||||||
pb.keyEquivalent = isHighlighted ? @"\r" : @"";
|
pb.keyEquivalent = isHighlighted ? @"\r" : @"";
|
||||||
|
}
|
||||||
|
|
||||||
d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) {
|
d->drawNSViewInRect(pb, frameRect, p, ^(CGContextRef, const CGRect &r) {
|
||||||
[pb.cell drawBezelWithFrame:r inView:pb.superview];
|
[pb.cell drawBezelWithFrame:r inView:pb.superview];
|
||||||
|
@ -45,6 +45,8 @@ private slots:
|
|||||||
void tst_QPushButton_data();
|
void tst_QPushButton_data();
|
||||||
void tst_QPushButton();
|
void tst_QPushButton();
|
||||||
|
|
||||||
|
void tst_QPushButtonSquare();
|
||||||
|
|
||||||
void tst_QProgressBar_data();
|
void tst_QProgressBar_data();
|
||||||
void tst_QProgressBar();
|
void tst_QProgressBar();
|
||||||
|
|
||||||
@ -198,6 +200,29 @@ void tst_Widgets::tst_QPushButton()
|
|||||||
testButton->setDown(false);
|
testButton->setDown(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tst_Widgets::tst_QPushButtonSquare()
|
||||||
|
{
|
||||||
|
QVBoxLayout layout;
|
||||||
|
|
||||||
|
QPushButton button(testWindow());
|
||||||
|
button.setText(QLatin1String("Square"));
|
||||||
|
const auto sizeHint = button.sizeHint().width();
|
||||||
|
// Depending on the current QStyle, this may result in
|
||||||
|
// a different button look - on macOS it will look as
|
||||||
|
// a toolbutton:
|
||||||
|
button.setFixedSize(sizeHint, sizeHint);
|
||||||
|
|
||||||
|
layout.addWidget(&button);
|
||||||
|
testWindow()->setLayout(&layout);
|
||||||
|
|
||||||
|
takeStandardSnapshots();
|
||||||
|
|
||||||
|
button.setCheckable(true);
|
||||||
|
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "square_unchecked");
|
||||||
|
button.setChecked(true);
|
||||||
|
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "square_checked");
|
||||||
|
}
|
||||||
|
|
||||||
void tst_Widgets::tst_QProgressBar_data()
|
void tst_Widgets::tst_QProgressBar_data()
|
||||||
{
|
{
|
||||||
QTest::addColumn<Qt::Orientation>("orientation");
|
QTest::addColumn<Qt::Orientation>("orientation");
|
||||||
|
Loading…
Reference in New Issue
Block a user