summaryrefslogtreecommitdiffstats
path: root/src/plugins/styles
diff options
context:
space:
mode:
authorGabriel de Dietrich <gabriel.dedietrich@qt.io>2018-03-13 18:04:30 -0700
committerGabriel de Dietrich <gabriel.dedietrich@qt.io>2018-03-22 21:23:59 +0000
commit3691c411159ff4d7cf7601dbb87dbf43cc8d46d4 (patch)
tree05471d14be0bb3c57d9fe5f9edf317090237bb13 /src/plugins/styles
parent14157a1a3e1d934e4892f469abc4e2cdf4e65f52 (diff)
QMacStyle: Make CocoaControl a full type
And one small code clean-up. Change-Id: I57c71ce2e18c95529ee45ba4fdfc68e21209e384 Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/styles')
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac.mm118
-rw-r--r--src/plugins/styles/mac/qmacstyle_mac_p_p.h12
2 files changed, 80 insertions, 50 deletions
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 9e8af78a8e..79109dbbfe 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -1210,13 +1210,13 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int h
QPainterPath focusRingPath;
qreal hOffset = 0.0;
qreal vOffset = 0.0;
- switch (cw.first) {
+ switch (cw.type) {
case Button_CheckBox: {
- const auto cbInnerRadius = (cw.second == QStyleHelper::SizeMini ? 2.0 : 3.0);
- const auto cbSize = cw.second == QStyleHelper::SizeLarge ? 13 :
- cw.second == QStyleHelper::SizeSmall ? 11 : 9; // As measured
- hOffset = hMargin + (cw.second == QStyleHelper::SizeLarge ? 2.5 :
- cw.second == QStyleHelper::SizeSmall ? 2.0 : 1.0); // As measured
+ const auto cbInnerRadius = (cw.size == QStyleHelper::SizeMini ? 2.0 : 3.0);
+ const auto cbSize = cw.size == QStyleHelper::SizeLarge ? 13 :
+ cw.size == QStyleHelper::SizeSmall ? 11 : 9; // As measured
+ hOffset = hMargin + (cw.size == QStyleHelper::SizeLarge ? 2.5 :
+ cw.size == QStyleHelper::SizeSmall ? 2.0 : 1.0); // As measured
vOffset = 0.5 * qreal(targetRect.height() - cbSize);
const auto cbInnerRect = QRectF(0, 0, cbSize, cbSize);
const auto cbOutterRadius = cbInnerRadius + focusRingWidth;
@@ -1227,10 +1227,10 @@ void QMacStylePrivate::drawFocusRing(QPainter *p, const QRect &targetRect, int h
break;
}
case Button_RadioButton: {
- const auto rbSize = cw.second == QStyleHelper::SizeLarge ? 15 :
- cw.second == QStyleHelper::SizeSmall ? 13 : 9; // As measured
- hOffset = hMargin + (cw.second == QStyleHelper::SizeLarge ? 1.5 :
- cw.second == QStyleHelper::SizeSmall ? 1.0 : 1.0); // As measured
+ const auto rbSize = cw.size == QStyleHelper::SizeLarge ? 15 :
+ cw.size == QStyleHelper::SizeSmall ? 13 : 9; // As measured
+ hOffset = hMargin + (cw.size == QStyleHelper::SizeLarge ? 1.5 :
+ cw.size == QStyleHelper::SizeSmall ? 1.0 : 1.0); // As measured
vOffset = 0.5 * qreal(targetRect.height() - rbSize);
const auto rbInnerRect = QRectF(0, 0, rbSize, rbSize);
const auto rbOutterRect = rbInnerRect.adjusted(-focusRingWidth, -focusRingWidth, focusRingWidth, focusRingWidth);
@@ -1501,6 +1501,26 @@ QSize QMacStylePrivate::pushButtonSizeFromContents(const QStyleOptionButton *btn
return csz;
}
+uint qHash(const QMacStylePrivate::CocoaControl &cw, uint seed = 0)
+{
+ return ((cw.type << 2) | cw.size) ^ seed;
+}
+
+QMacStylePrivate::CocoaControl::CocoaControl()
+ : type(NoControl), size(QStyleHelper::SizeDefault)
+{
+}
+
+QMacStylePrivate::CocoaControl::CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s)
+ : type(t), size(s)
+{
+}
+
+bool QMacStylePrivate::CocoaControl::operator==(const CocoaControl &other) const
+{
+ return other.type == type && other.size == size;
+}
+
/**
Checks if the actual contents of btn fits inside the free content bounds of
'buttonKindToCheck'. Meant as a helper function for 'initHIThemePushButton'
@@ -1605,8 +1625,8 @@ void QMacStylePrivate::initComboboxBdi(const QStyleOptionComboBox *combo, HIThem
bdi->state = tds;
QStyleHelper::WidgetSizePolicy aSize = aquaSizeConstrain(combo, widget);
- cw->first = combo->editable ? ComboBox : Button_PopupButton;
- cw->second = aSize;
+ cw->type = combo->editable ? ComboBox : Button_PopupButton;
+ cw->size = aSize;
switch (aSize) {
case QStyleHelper::SizeMini:
bdi->kind = combo->editable ? ThemeButtonKind(kThemeComboBoxMini)
@@ -1638,26 +1658,26 @@ void QMacStylePrivate::initComboboxBdi(const QStyleOptionComboBox *combo, HIThem
// or return any subcontrol size of the poor thing.
if (h < 9) {
bdi->kind = kThemeComboBoxMini;
- cw->second = QStyleHelper::SizeMini;
+ cw->size = QStyleHelper::SizeMini;
} else if (h < 22) {
bdi->kind = kThemeComboBoxSmall;
- cw->second = QStyleHelper::SizeSmall;
+ cw->size = QStyleHelper::SizeSmall;
} else {
bdi->kind = kThemeComboBox;
- cw->second = QStyleHelper::SizeLarge;
+ cw->size = QStyleHelper::SizeLarge;
}
} else
#endif
{
if (h < 21) {
bdi->kind = kThemeComboBoxMini;
- cw->second = QStyleHelper::SizeMini;
+ cw->size = QStyleHelper::SizeMini;
} else if (h < 26) {
bdi->kind = kThemeComboBoxSmall;
- cw->second = QStyleHelper::SizeSmall;
+ cw->size = QStyleHelper::SizeSmall;
} else {
bdi->kind = kThemeComboBox;
- cw->second = QStyleHelper::SizeLarge;
+ cw->size = QStyleHelper::SizeLarge;
}
}
} else {
@@ -1668,13 +1688,13 @@ void QMacStylePrivate::initComboboxBdi(const QStyleOptionComboBox *combo, HIThem
// the use of LargeButtons explicit.
if (h < 21) {
bdi->kind = kThemePopupButtonMini;
- cw->second = QStyleHelper::SizeMini;
+ cw->size = QStyleHelper::SizeMini;
} else if (h < 26) {
bdi->kind = kThemePopupButtonSmall;
- cw->second = QStyleHelper::SizeSmall;
+ cw->size = QStyleHelper::SizeSmall;
} else {
bdi->kind = kThemePopupButton;
- cw->second = QStyleHelper::SizeLarge;
+ cw->size = QStyleHelper::SizeLarge;
}
}
break;
@@ -1691,8 +1711,8 @@ CGRect QMacStylePrivate::comboboxInnerBounds(const CGRect &outerBounds, const Co
// Carbon draw parts of the view outside the rect.
// So make the rect a bit smaller to compensate
// (I wish HIThemeGetButtonBackgroundBounds worked)
- if (cocoaWidget.first == Button_PopupButton) {
- switch (cocoaWidget.second) {
+ if (cocoaWidget.type == Button_PopupButton) {
+ switch (cocoaWidget.size) {
case QStyleHelper::SizeSmall:
innerBounds.origin.x += 3;
innerBounds.origin.y += 3;
@@ -1712,8 +1732,8 @@ CGRect QMacStylePrivate::comboboxInnerBounds(const CGRect &outerBounds, const Co
innerBounds.size.width -= 5;
innerBounds.size.height -= 6;
}
- } else if (cocoaWidget.first == ComboBox) {
- switch (cocoaWidget.second) {
+ } else if (cocoaWidget.type == ComboBox) {
+ switch (cocoaWidget.size) {
case QStyleHelper::SizeSmall:
innerBounds.origin.x += 3;
innerBounds.origin.y += 3;
@@ -1866,28 +1886,28 @@ ThemeDrawState QMacStylePrivate::getDrawState(QStyle::State flags)
case kThemePopupButton:
case kThemePopupButtonSmall:
case kThemePopupButtonMini:
- w.first = Button_PopupButton;
+ w.type = Button_PopupButton;
break;
case kThemeComboBox:
- w.first = ComboBox;
+ w.type = ComboBox;
break;
case kThemeArrowButton:
- w.first = Button_Disclosure;
+ w.type = Button_Disclosure;
break;
case kThemeCheckBox:
case kThemeCheckBoxSmall:
case kThemeCheckBoxMini:
- w.first = Button_CheckBox;
+ w.type = Button_CheckBox;
break;
case kThemeRadioButton:
case kThemeRadioButtonSmall:
case kThemeRadioButtonMini:
- w.first = Button_RadioButton;
+ w.type = Button_RadioButton;
break;
case kThemePushButton:
case kThemePushButtonSmall:
case kThemePushButtonMini:
- w.first = Button_PushButton;
+ w.type = Button_PushButton;
break;
default:
break;
@@ -1898,16 +1918,16 @@ ThemeDrawState QMacStylePrivate::getDrawState(QStyle::State flags)
case kThemePopupButtonSmall:
case kThemeCheckBoxSmall:
case kThemeRadioButtonSmall:
- w.second = QStyleHelper::SizeSmall;
+ w.size = QStyleHelper::SizeSmall;
break;
case kThemePushButtonMini:
case kThemePopupButtonMini:
case kThemeCheckBoxMini:
case kThemeRadioButtonMini:
- w.second = QStyleHelper::SizeMini;
+ w.size = QStyleHelper::SizeMini;
break;
default:
- w.second = QStyleHelper::SizeLarge;
+ w.size = QStyleHelper::SizeLarge;
break;
}
@@ -1928,7 +1948,7 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
NSView *bv = cocoaControls.value(widget, nil);
if (!bv) {
- switch (widget.first) {
+ switch (widget.type) {
case Box: {
NSBox *bc = [[NSBox alloc] init];
bc.title = @"";
@@ -1948,7 +1968,7 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
case Button_PullDown: {
NSPopUpButton *bc = [[NSPopUpButton alloc] init];
bc.title = @"";
- if (widget.first == Button_PullDown)
+ if (widget.type == Button_PullDown)
bc.pullsDown = YES;
bv = bc;
break;
@@ -1963,7 +1983,7 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
case Button_WindowMiniaturize:
case Button_WindowZoom: {
const NSWindowButton button = [=] {
- switch (widget.first) {
+ switch (widget.type) {
case Button_WindowClose:
return NSWindowCloseButton;
case Button_WindowMiniaturize:
@@ -2030,7 +2050,7 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
if ([bv isKindOfClass:[NSControl class]]) {
auto *ctrl = static_cast<NSControl *>(bv);
- switch (widget.second) {
+ switch (widget.size) {
case QStyleHelper::SizeSmall:
ctrl.controlSize = NSSmallControlSize;
break;
@@ -2040,11 +2060,11 @@ NSView *QMacStylePrivate::cocoaControl(CocoaControl widget) const
default:
break;
}
- } else if (widget.first == ProgressIndicator_Determinate ||
- widget.first == ProgressIndicator_Indeterminate) {
+ } else if (widget.type == ProgressIndicator_Determinate ||
+ widget.type == ProgressIndicator_Indeterminate) {
auto *pi = static_cast<NSProgressIndicator *>(bv);
- pi.indeterminate = (widget.first == ProgressIndicator_Indeterminate);
- switch (widget.second) {
+ pi.indeterminate = (widget.type == ProgressIndicator_Indeterminate);
+ switch (widget.size) {
case QStyleHelper::SizeSmall:
pi.controlSize = NSSmallControlSize;
break;
@@ -2066,7 +2086,7 @@ NSCell *QMacStylePrivate::cocoaCell(CocoaControl widget) const
{
NSCell *cell = cocoaCells[widget];
if (!cell) {
- switch (widget.first) {
+ switch (widget.type) {
case Stepper:
cell = [[NSStepperCell alloc] init];
break;
@@ -2081,7 +2101,7 @@ NSCell *QMacStylePrivate::cocoaCell(CocoaControl widget) const
break;
}
- switch (widget.second) {
+ switch (widget.size) {
case QStyleHelper::SizeSmall:
cell.controlSize = NSSmallControlSize;
break;
@@ -3839,13 +3859,13 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
QMacStylePrivate::CocoaControl cw = QMacStylePrivate::cocoaControlFromHIThemeButtonKind(bdi.kind);
if (hasMenu)
- cw.first = QMacStylePrivate::Button_PullDown;
+ cw.type = QMacStylePrivate::Button_PullDown;
if (hasMenu && bdi.kind != kThemeBevelButton) {
NSPopUpButton *pdb = (NSPopUpButton *)d->cocoaControl(cw);
[pdb highlight:(bdi.state == kThemeStatePressed)];
pdb.enabled = bdi.state != kThemeStateUnavailable && bdi.state != kThemeStateUnavailableInactive;
QRect rect = opt->rect;
- rect.adjust(0, 0, cw.second == QStyleHelper::SizeSmall ? -4 : cw.second == QStyleHelper::SizeMini ? -9 : -6, 0);
+ rect.adjust(0, 0, cw.size == QStyleHelper::SizeSmall ? -4 : cw.size == QStyleHelper::SizeMini ? -9 : -6, 0);
d->drawNSViewInRect(cw, pdb, rect, p, w != 0);
} else if (hasMenu && bdi.state == kThemeStatePressed)
d->drawColorlessButton(newRect, &bdi, cw, p, opt);
@@ -4513,7 +4533,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
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) {
+ d->drawNSViewInRect(cw, sv, opt->rect, p, w != nullptr, ^(CGContextRef __unused ctx, const CGRect &rect) {
[sv drawDividerInRect:rect];
});
} else {
@@ -6467,8 +6487,8 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
if (const QStyleOptionComboBox *combo = qstyleoption_cast<const QStyleOptionComboBox *>(opt)){
const auto widgetSize = d->aquaSizeConstrain(opt, widget);
QMacStylePrivate::CocoaControl cw;
- cw.first = combo->editable ? QMacStylePrivate::ComboBox : QMacStylePrivate::Button_PopupButton;
- cw.second = widgetSize;
+ cw.type = combo->editable ? QMacStylePrivate::ComboBox : QMacStylePrivate::Button_PopupButton;
+ cw.size = widgetSize;
const CGRect diffRect = QMacStylePrivate::comboboxInnerBounds(CGRectZero, cw);
sz.rwidth() -= qRound(diffRect.size.width);
sz.rheight() -= qRound(diffRect.size.height);
diff --git a/src/plugins/styles/mac/qmacstyle_mac_p_p.h b/src/plugins/styles/mac/qmacstyle_mac_p_p.h
index 00dc8a9b53..1c4986dd06 100644
--- a/src/plugins/styles/mac/qmacstyle_mac_p_p.h
+++ b/src/plugins/styles/mac/qmacstyle_mac_p_p.h
@@ -206,7 +206,17 @@ public:
TextField
};
- typedef QPair<CocoaControlType, QStyleHelper::WidgetSizePolicy> CocoaControl;
+
+ struct CocoaControl {
+ CocoaControl();
+ CocoaControl(CocoaControlType t, QStyleHelper::WidgetSizePolicy s);
+
+ CocoaControlType type;
+ QStyleHelper::WidgetSizePolicy size;
+
+ bool operator==(const CocoaControl &other) const;
+ };
+
typedef void (^DrawRectBlock)(CGContextRef, const CGRect &);