QMacStyle: fix NSBox geometry for Aqua theme
Apparently vertical shift and increased height were not enough, more adjustment needed horizontally also: the default NSBox draws itself smaller in both dimensions and shifted from the origin we wanted. Thus we trick it to think it's drawing a bigger thing. It will draw a smaller one (again), but closer to what we need. Fixes: QTBUG-72365 Change-Id: Ib3a4c0b3eafb9f2f9d3b24bcbdd8335e73053622 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>
This commit is contained in:
parent
9634055543
commit
1a54165756
@ -3096,13 +3096,18 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
|
||||
bool needTranslation = false;
|
||||
if (QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSMojave
|
||||
&& !qt_mac_applicationIsInDarkMode()) {
|
||||
// Another surprise from AppKit (SDK 10.14) - -displayRectIgnoringOpacity:
|
||||
// is different from drawRect: for some Apple-known reason box is smaller
|
||||
// in height than we need, resulting in tab buttons sitting too high/not
|
||||
// centered. Attempts to play with insets etc did not work - the same wrong
|
||||
// height. Simple translation is not working (too much space "at bottom"),
|
||||
// so we make it bigger and translate (otherwise it's clipped at bottom btw).
|
||||
adjustedRect.adjust(0, 0, 0, 3);
|
||||
// In Aqua theme we have to use the 'default' NSBox (as opposite
|
||||
// to the 'custom' QDarkNSBox we use in dark theme). Since -drawRect:
|
||||
// does nothing in default NSBox, we call -displayRectIgnoringOpaticty:.
|
||||
// Unfortunately, the resulting box is smaller then the actual rect we
|
||||
// wanted. This can be seen, e.g. because tabs (buttons) are misaligned
|
||||
// vertically and even worse, if QTabWidget has autoFillBackground
|
||||
// set, this background overpaints NSBox making it to disappear.
|
||||
// We trick our NSBox to render in a larger rectangle, so that
|
||||
// the actuall result (which is again smaller than requested),
|
||||
// more or less is what we really want. We'll have to adjust CTM
|
||||
// and translate accordingly.
|
||||
adjustedRect.adjust(0, 0, 6, 6);
|
||||
needTranslation = true;
|
||||
}
|
||||
d->drawNSViewInRect(box, adjustedRect, p, ^(CGContextRef ctx, const CGRect &rect) {
|
||||
@ -3117,7 +3122,7 @@ void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPai
|
||||
[box drawRect:rect];
|
||||
} else {
|
||||
if (needTranslation)
|
||||
CGContextTranslateCTM(ctx, 0.0, 4.0);
|
||||
CGContextTranslateCTM(ctx, -3.0, 5.0);
|
||||
[box displayRectIgnoringOpacity:box.bounds inContext:NSGraphicsContext.currentContext];
|
||||
}
|
||||
});
|
||||
|
Loading…
Reference in New Issue
Block a user