QMacStyle - fix tab rendering
In BigSur NSPopupButton, it would appear, is slightly different. But different enough so that a fragment of a disclose 'arrow' button became visible within the clipping region, making it appear as some blue strange thing in between inactive (non-selected) tabs. Task-number: QTBUG-86513 Change-Id: Ib03af48069056b5ecbb8b4afebd851005583293a Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>bb10
parent
0f9675768d
commit
40fb97e97f
|
|
@ -3844,6 +3844,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
|||
const auto cs = d->effectiveAquaSizeConstrain(opt, w);
|
||||
// Extra hacks to get the proper pressed appreance when not selected or selected and inactive
|
||||
const bool needsInactiveHack = (!isActive && isSelected);
|
||||
const bool isBigSurOrAbove = QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSBigSur;
|
||||
const auto ct = !needsInactiveHack && (isSelected || tp == QStyleOptionTab::OnlyOneTab) ?
|
||||
QMacStylePrivate::Button_PushButton :
|
||||
QMacStylePrivate::Button_PopupButton;
|
||||
|
|
@ -3852,6 +3853,12 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
|||
auto *pb = static_cast<NSButton *>(d->cocoaControl(cw));
|
||||
|
||||
auto vOffset = isPopupButton ? 1 : 2;
|
||||
if (isBigSurOrAbove) {
|
||||
// Make it 1, otherwise, offset is very visible compared
|
||||
// to selected tab (which is not a popup button).
|
||||
vOffset = 1;
|
||||
}
|
||||
|
||||
if (tabDirection == QMacStylePrivate::East)
|
||||
vOffset -= 1;
|
||||
const auto outerAdjust = isPopupButton ? 1 : 4;
|
||||
|
|
@ -3925,7 +3932,10 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
|||
NSPopUpArrowPosition oldPosition = NSPopUpArrowAtCenter;
|
||||
NSPopUpButtonCell *pbCell = nil;
|
||||
auto rAdjusted = r;
|
||||
if (isPopupButton && tp == QStyleOptionTab::OnlyOneTab) {
|
||||
if (isPopupButton && (tp == QStyleOptionTab::OnlyOneTab || isBigSurOrAbove)) {
|
||||
// Note: starting from macOS BigSur NSPopupButton has this
|
||||
// arrow 'button' in a different place and it became
|
||||
// quite visible 'in between' inactive tabs.
|
||||
pbCell = static_cast<NSPopUpButtonCell *>(pb.cell);
|
||||
oldPosition = pbCell.arrowPosition;
|
||||
pbCell.arrowPosition = NSPopUpNoArrow;
|
||||
|
|
@ -3933,6 +3943,12 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
|
|||
// NSPopUpButton in this state is smaller.
|
||||
rAdjusted.origin.x -= 3;
|
||||
rAdjusted.size.width += 6;
|
||||
if (isBigSurOrAbove) {
|
||||
rAdjusted.origin.y -= 1;
|
||||
rAdjusted.size.height += 1;
|
||||
if (tp == QStyleOptionTab::End)
|
||||
rAdjusted.origin.x -= 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue