QCommonStyle code cleanup

Consistently use int (instead of uint) type for alignment/text
formatting flags passed to QStyle::drawItemText (and overrides).

Clean variables in QCommonStyle::sizeFromContents
- use self-explaining variable names
- rename misleading variables
- define one variable per line
- use consts whereever possible
- insert new lines to make code easier to read
- correct wrong indentations
- use auto in qstyleoption_castis to respect maximum of 100
characters per line

Change-Id: Ie145c089606436213c813227154fac29962825d0
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
(cherry picked from commit c84f3fd370ef7b4d532e5bf6db7b4be819d676ea)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
Axel Spoerl 2023-01-04 08:27:32 +01:00 committed by Qt Cherry-pick Bot
parent 1fcfb6dd4b
commit d9d1deb89f

View File

@ -1325,7 +1325,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
case CE_PushButtonLabel: case CE_PushButtonLabel:
if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(opt)) { if (const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
QRect textRect = button->rect; QRect textRect = button->rect;
uint tf = Qt::AlignVCenter | Qt::TextShowMnemonic; int tf = Qt::AlignVCenter | Qt::TextShowMnemonic;
if (!proxy()->styleHint(SH_UnderlineShortcut, button, widget)) if (!proxy()->styleHint(SH_UnderlineShortcut, button, widget))
tf |= Qt::TextHideMnemonic; tf |= Qt::TextHideMnemonic;
@ -1410,7 +1410,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
case CE_RadioButtonLabel: case CE_RadioButtonLabel:
case CE_CheckBoxLabel: case CE_CheckBoxLabel:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) { if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
uint alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter); int alignment = visualAlignment(btn->direction, Qt::AlignLeft | Qt::AlignVCenter);
if (!proxy()->styleHint(SH_UnderlineShortcut, btn, widget)) if (!proxy()->styleHint(SH_UnderlineShortcut, btn, widget))
alignment |= Qt::TextHideMnemonic; alignment |= Qt::TextHideMnemonic;
@ -1454,7 +1454,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
#if QT_CONFIG(menubar) #if QT_CONFIG(menubar)
case CE_MenuBarItem: case CE_MenuBarItem:
if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) { if (const QStyleOptionMenuItem *mbi = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {
uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip int alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip
| Qt::TextSingleLine; | Qt::TextSingleLine;
if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget)) if (!proxy()->styleHint(SH_UnderlineShortcut, mbi, widget))
alignment |= Qt::TextHideMnemonic; alignment |= Qt::TextHideMnemonic;
@ -4852,125 +4852,141 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid
/*! /*!
\reimp \reimp
*/ */
QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, QSize QCommonStyle::sizeFromContents(ContentsType contentsType, const QStyleOption *opt,
const QSize &csz, const QWidget *widget) const const QSize &contentsSize, const QWidget *widget) const
{ {
Q_D(const QCommonStyle); Q_D(const QCommonStyle);
QSize sz(csz); QSize size(contentsSize);
switch (ct) { switch (contentsType) {
case CT_PushButton: case CT_PushButton:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) { if (const auto *buttonOpt = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
int w = csz.width(), int width = contentsSize.width();
h = csz.height(), int height = contentsSize.height();
bm = proxy()->pixelMetric(PM_ButtonMargin, btn, widget), const int buttonMargin = proxy()->pixelMetric(PM_ButtonMargin, buttonOpt, widget);
fw = proxy()->pixelMetric(PM_DefaultFrameWidth, btn, widget) * 2; const int defaultFrameWidth = proxy()->pixelMetric(PM_DefaultFrameWidth, buttonOpt, widget) * 2;
w += bm + fw; width += buttonMargin + defaultFrameWidth;
h += bm + fw; height += buttonMargin + defaultFrameWidth;
if (btn->features & QStyleOptionButton::AutoDefaultButton){ if (buttonOpt->features.testFlag(QStyleOptionButton::AutoDefaultButton)) {
int dbw = proxy()->pixelMetric(PM_ButtonDefaultIndicator, btn, widget) * 2; const int buttonIndicator = proxy()->pixelMetric(PM_ButtonDefaultIndicator,
w += dbw; buttonOpt,
h += dbw; widget) * 2;
width += buttonIndicator;
height += buttonIndicator;
} }
sz = QSize(w, h); size = QSize(width, height);
} }
break; break;
case CT_RadioButton: case CT_RadioButton:
case CT_CheckBox: case CT_CheckBox:
if (const QStyleOptionButton *btn = qstyleoption_cast<const QStyleOptionButton *>(opt)) { if (const auto *buttonOpt = qstyleoption_cast<const QStyleOptionButton *>(opt)) {
bool isRadio = (ct == CT_RadioButton); const bool isRadio = (contentsType == CT_RadioButton);
int w = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth const int width = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorWidth
: PM_IndicatorWidth, btn, widget); : PM_IndicatorWidth, buttonOpt, widget);
int h = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight const int height = proxy()->pixelMetric(isRadio ? PM_ExclusiveIndicatorHeight
: PM_IndicatorHeight, btn, widget); : PM_IndicatorHeight, buttonOpt, widget);
int margins = 0; int margins = 0;
// we add 4 pixels for label margins // we add 4 pixels for label margins
if (!btn->icon.isNull() || !btn->text.isEmpty()) if (!buttonOpt->icon.isNull() || !buttonOpt->text.isEmpty()) {
margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing margins = 4 + proxy()->pixelMetric(isRadio ? PM_RadioButtonLabelSpacing
: PM_CheckBoxLabelSpacing, opt, widget); : PM_CheckBoxLabelSpacing, opt, widget);
sz += QSize(w + margins, 4); }
sz.setHeight(qMax(sz.height(), h));
size += QSize(width + margins, 4);
size.setHeight(qMax(size.height(), height));
} }
break; break;
#if QT_CONFIG(menu) #if QT_CONFIG(menu)
case CT_MenuItem: case CT_MenuItem:
if (const QStyleOptionMenuItem *mi = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) { if (const auto *menuItemOpt = qstyleoption_cast<const QStyleOptionMenuItem *>(opt)) {
bool checkable = mi->menuHasCheckableItems; const bool checkable = menuItemOpt->menuHasCheckableItems;
int maxpmw = mi->maxIconWidth; const int maxpmw = menuItemOpt->maxIconWidth;
int w = sz.width(), h = sz.height(); int width = size.width();
if (mi->menuItemType == QStyleOptionMenuItem::Separator) { int height;
w = 10; if (menuItemOpt->menuItemType == QStyleOptionMenuItem::Separator) {
h = 2; width = 10;
height = 2;
} else { } else {
h = mi->fontMetrics.height() + 8; height = menuItemOpt->fontMetrics.height() + 8;
if (!mi->icon.isNull()) { if (!menuItemOpt->icon.isNull()) {
int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt); int iconExtent = proxy()->pixelMetric(PM_SmallIconSize, opt);
h = qMax(h, mi->icon.actualSize(QSize(iconExtent, iconExtent)).height() + 4); height = qMax(height,
menuItemOpt->icon.actualSize(QSize(iconExtent,
iconExtent)).height() + 4);
} }
} }
if (mi->text.contains(u'\t')) if (menuItemOpt->text.contains(u'\t'))
w += 12; width += 12;
if (maxpmw > 0) if (maxpmw > 0)
w += maxpmw + 6; width += maxpmw + 6;
if (checkable && maxpmw < 20) if (checkable && maxpmw < 20)
w += 20 - maxpmw; width += 20 - maxpmw;
if (checkable || maxpmw > 0) if (checkable || maxpmw > 0)
w += 2; width += 2;
w += 12; width += 12;
sz = QSize(w, h); size = QSize(width, height);
} }
break; break;
#endif // QT_CONFIG(menu) #endif // QT_CONFIG(menu)
#if QT_CONFIG(toolbutton) #if QT_CONFIG(toolbutton)
case CT_ToolButton: case CT_ToolButton:
sz = QSize(sz.width() + 6, sz.height() + 5); size = QSize(size.width() + 6, size.height() + 5);
break; break;
#endif // QT_CONFIG(toolbutton) #endif // QT_CONFIG(toolbutton)
#if QT_CONFIG(combobox) #if QT_CONFIG(combobox)
case CT_ComboBox: case CT_ComboBox:
if (const QStyleOptionComboBox *cmb = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) { if (const auto *comboBoxOpt = qstyleoption_cast<const QStyleOptionComboBox *>(opt)) {
int fw = cmb->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth, opt, widget) * 2 : 0; const int frameWidth = comboBoxOpt->frame ? proxy()->pixelMetric(PM_ComboBoxFrameWidth,
opt,
widget) * 2 : 0;
const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin, opt) + 1); const int textMargins = 2*(proxy()->pixelMetric(PM_FocusFrameHMargin, opt) + 1);
// QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins... // QItemDelegate::sizeHint expands the textMargins two times, thus the 2*textMargins...
int other = qMax(23, 2*textMargins + proxy()->pixelMetric(QStyle::PM_ScrollBarExtent, opt, widget)); const int other = qMax(23, 2 * textMargins
sz = QSize(sz.width() + fw + other, sz.height() + fw); + proxy()->pixelMetric(QStyle::PM_ScrollBarExtent,
opt, widget));
size = QSize(size.width() + frameWidth + other, size.height() + frameWidth);
} }
break; break;
#endif // QT_CONFIG(combobox) #endif // QT_CONFIG(combobox)
case CT_HeaderSection: case CT_HeaderSection:
if (const QStyleOptionHeader *hdr = qstyleoption_cast<const QStyleOptionHeader *>(opt)) { if (const auto *headerOpt = qstyleoption_cast<const QStyleOptionHeader *>(opt)) {
bool nullIcon = hdr->icon.isNull(); const bool nullIcon = headerOpt->icon.isNull();
int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr, widget); const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, headerOpt, widget);
int iconSize = nullIcon ? 0 : proxy()->pixelMetric(QStyle::PM_SmallIconSize, hdr, widget); const int iconSize = nullIcon ? 0 : proxy()->pixelMetric(QStyle::PM_SmallIconSize,
QSize txt = hdr->fontMetrics.size(0, hdr->text); headerOpt,
sz.setHeight(margin + qMax(iconSize, txt.height()) + margin); widget);
sz.setWidth((nullIcon ? 0 : margin) + iconSize const QSize textSize = headerOpt->fontMetrics.size(0, headerOpt->text);
+ (hdr->text.isNull() ? 0 : margin) + txt.width() + margin); size.setHeight(margin + qMax(iconSize, textSize.height()) + margin);
if (hdr->sortIndicator != QStyleOptionHeader::None) { size.setWidth((nullIcon ? 0 : margin) + iconSize
int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, hdr, widget); + (headerOpt->text.isNull() ? 0 : margin) + textSize.width() + margin);
if (hdr->orientation == Qt::Horizontal) if (headerOpt->sortIndicator != QStyleOptionHeader::None) {
sz.rwidth() += sz.height() + margin; const int margin = proxy()->pixelMetric(QStyle::PM_HeaderMargin, headerOpt, widget);
if (headerOpt->orientation == Qt::Horizontal)
size.rwidth() += size.height() + margin;
else else
sz.rheight() += sz.width() + margin; size.rheight() += size.width() + margin;
} }
} }
break; break;
case CT_TabWidget: case CT_TabWidget:
sz += QSize(4, 4); size += QSize(4, 4);
break; break;
case CT_LineEdit: case CT_LineEdit:
if (const QStyleOptionFrame *f = qstyleoption_cast<const QStyleOptionFrame *>(opt)) if (const auto *frameOpt = qstyleoption_cast<const QStyleOptionFrame *>(opt))
sz += QSize(2*f->lineWidth, 2*f->lineWidth); size += QSize(2 * frameOpt->lineWidth, 2 * frameOpt->lineWidth);
break; break;
#if QT_CONFIG(groupbox) #if QT_CONFIG(groupbox)
case CT_GroupBox: case CT_GroupBox:
if (const QStyleOptionGroupBox *styleOpt = qstyleoption_cast<const QStyleOptionGroupBox *>(opt)) if (const auto *groupBoxOpt = qstyleoption_cast<const QStyleOptionGroupBox *>(opt))
sz += QSize(styleOpt->features.testFlag(QStyleOptionFrame::Flat) ? 0 : 16, 0); size += QSize(groupBoxOpt->features.testFlag(QStyleOptionFrame::Flat) ? 0 : 16, 0);
break; break;
#endif // QT_CONFIG(groupbox) #endif // QT_CONFIG(groupbox)
case CT_MdiControls: case CT_MdiControls:
if (const QStyleOptionComplex *styleOpt = qstyleoption_cast<const QStyleOptionComplex *>(opt)) { if (const auto *styleOpt = qstyleoption_cast<const QStyleOptionComplex *>(opt)) {
const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, styleOpt, widget); const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, styleOpt, widget);
int width = 1; int width = 1;
if (styleOpt->subControls & SC_MdiMinButton) if (styleOpt->subControls & SC_MdiMinButton)
@ -4979,20 +4995,20 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
width += buttonSize + 1; width += buttonSize + 1;
if (styleOpt->subControls & SC_MdiCloseButton) if (styleOpt->subControls & SC_MdiCloseButton)
width += buttonSize + 1; width += buttonSize + 1;
sz = QSize(width, buttonSize); size = QSize(width, buttonSize);
} else { } else {
const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, opt, widget); const int buttonSize = proxy()->pixelMetric(PM_TitleBarButtonSize, opt, widget);
sz = QSize(1 + 3 * (buttonSize + 1), buttonSize); size = QSize(1 + 3 * (buttonSize + 1), buttonSize);
} }
break; break;
#if QT_CONFIG(itemviews) #if QT_CONFIG(itemviews)
case CT_ItemViewItem: case CT_ItemViewItem:
if (const QStyleOptionViewItem *vopt = qstyleoption_cast<const QStyleOptionViewItem *>(opt)) { if (const auto *viewItemOpt = qstyleoption_cast<const QStyleOptionViewItem *>(opt)) {
QRect decorationRect, displayRect, checkRect; QRect decorationRect, displayRect, checkRect;
d->viewItemLayout(vopt, &checkRect, &decorationRect, &displayRect, true); d->viewItemLayout(viewItemOpt, &checkRect, &decorationRect, &displayRect, true);
sz = (decorationRect|displayRect|checkRect).size(); size = (decorationRect|displayRect|checkRect).size();
if (decorationRect.isValid() && sz.height() == decorationRect.height()) if (decorationRect.isValid() && size.height() == decorationRect.height())
sz.rheight() += 2; // Prevent icons from overlapping. size.rheight() += 2; // Prevent icons from overlapping.
} }
break; break;
#else #else
@ -5000,13 +5016,15 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
#endif // QT_CONFIG(itemviews) #endif // QT_CONFIG(itemviews)
#if QT_CONFIG(spinbox) #if QT_CONFIG(spinbox)
case CT_SpinBox: case CT_SpinBox:
if (const QStyleOptionSpinBox *vopt = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) { if (const auto *spinBoxOpt = qstyleoption_cast<const QStyleOptionSpinBox *>(opt)) {
// Add button + frame widths // Add button + frame widths
const qreal dpi = QStyleHelper::dpi(opt); const qreal dpi = QStyleHelper::dpi(opt);
const bool hasButtons = (vopt->buttonSymbols != QAbstractSpinBox::NoButtons); const bool hasButtons = (spinBoxOpt->buttonSymbols != QAbstractSpinBox::NoButtons);
const int buttonWidth = hasButtons ? qRound(QStyleHelper::dpiScaled(16, dpi)) : 0; const int buttonWidth = hasButtons ? qRound(QStyleHelper::dpiScaled(16, dpi)) : 0;
const int fw = vopt->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth, vopt, widget) : 0; const int frameWidth = spinBoxOpt->frame ? proxy()->pixelMetric(PM_SpinBoxFrameWidth,
sz += QSize(buttonWidth + 2*fw, 2*fw); spinBoxOpt, widget) : 0;
size += QSize(buttonWidth + 2 * frameWidth, 2 * frameWidth);
} }
break; break;
#endif #endif
@ -5022,7 +5040,7 @@ QSize QCommonStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
default: default:
break; break;
} }
return sz; return size;
} }