QMacStyle: CE_Splitter is HITheme-free

Change-Id: I96a5ba5d685d1b8f95fd11489e4e95096d0fa9a4
Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
bb10
Gabriel de Dietrich 2018-01-18 15:28:58 -08:00
parent 86821094a9
commit 1e905927f0
2 changed files with 31 additions and 7 deletions

View File

@ -237,6 +237,19 @@ QT_NAMESPACE_ALIAS_OBJC_CLASS(QIndeterminateProgressIndicator);
@end
@interface QT_MANGLE_NAMESPACE(QVerticalSplitView) : NSSplitView
- (BOOL)isVertical;
@end
QT_NAMESPACE_ALIAS_OBJC_CLASS(QVerticalSplitView);
@implementation QVerticalSplitView
- (BOOL)isVertical
{
return YES;
}
@end
QT_BEGIN_NAMESPACE
// The following constants are used for adjusting the size
@ -1916,6 +1929,12 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
// at construction time, and it cannot be changed later.
bv = [[NSSlider alloc] initWithFrame:NSMakeRect(0, 0, 20, 200)];
break;
case SplitView_Horizontal:
bv = [[NSSplitView alloc] init];
break;
case SplitView_Vertical:
bv = [[QVerticalSplitView alloc] init];
break;
case TextField:
bv = [[NSTextField alloc] init];
break;
@ -4465,13 +4484,16 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
break;
}
case CE_Splitter:
if (opt->rect.width() > 1 && opt->rect.height() > 1){
HIThemeSplitterDrawInfo sdi;
sdi.version = qt_mac_hitheme_version;
sdi.state = tds;
sdi.adornment = kHIThemeSplitterAdornmentMetal;
CGRect cgRect = opt->rect.toCGRect();
HIThemeDrawPaneSplitter(&cgRect, &sdi, cg, kHIThemeOrientationNormal);
if (opt->rect.width() > 1 && opt->rect.height() > 1) {
const bool isVertical = !(opt->state & QStyle::State_Horizontal);
// Qt refers to the layout orientation, while Cocoa refers to the divider's.
const auto ct = isVertical ? QMacStylePrivate::SplitView_Horizontal : QMacStylePrivate::SplitView_Vertical;
const auto cw = QMacStylePrivate::CocoaControl(ct, QStyleHelper::SizeLarge);
auto *sv = static_cast<NSSplitView *>(d->cocoaControl(cw));
sv.frame = opt->rect.toCGRect();
d->drawNSViewInRect(cw, sv, opt->rect, p, w != nullptr, ^(CGContextRef ctx, const CGRect &rect) {
[sv drawDividerInRect:rect];
});
} else {
QPen oldPen = p->pen();
p->setPen(opt->palette.dark().color());

View File

@ -196,6 +196,8 @@ public:
Scroller_Vertical,
Slider_Horizontal,
Slider_Vertical,
SplitView_Horizontal,
SplitView_Vertical,
Stepper, // QSpinBox buttons
TextField
};