diff options
Diffstat (limited to 'src/widgets/styles')
-rw-r--r-- | src/widgets/styles/qcommonstyle.cpp | 3 | ||||
-rw-r--r-- | src/widgets/styles/qmacstyle_mac.mm | 62 | ||||
-rw-r--r-- | src/widgets/styles/qmacstyle_mac_p.h | 6 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.cpp | 5 | ||||
-rw-r--r-- | src/widgets/styles/qstyle.h | 1 | ||||
-rw-r--r-- | src/widgets/styles/qstylehelper.cpp | 29 | ||||
-rw-r--r-- | src/widgets/styles/qstylehelper_p.h | 5 | ||||
-rw-r--r-- | src/widgets/styles/qstyleoption.cpp | 12 | ||||
-rw-r--r-- | src/widgets/styles/qstylesheetstyle.cpp | 2 |
9 files changed, 67 insertions, 58 deletions
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp index 604422dc4f..92cd5cc0f1 100644 --- a/src/widgets/styles/qcommonstyle.cpp +++ b/src/widgets/styles/qcommonstyle.cpp @@ -5243,6 +5243,9 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget ret = QAbstractItemView::ScrollPerItem; break; #endif + case SH_TitleBar_ShowToolTipsOnButtons: + ret = true; + break; default: ret = 0; break; diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index a9aab10e0f..47193f2a84 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -394,10 +394,10 @@ void drawTabBase(QPainter *p, const QStyleOptionTabBarBase *tbb, const QWidget * static int getControlSize(const QStyleOption *option, const QWidget *widget) { - switch (QMacStyle::widgetSizePolicy(widget, option)) { - case QMacStyle::SizeSmall: + switch (QStyleHelper::widgetSizePolicy(widget, option)) { + case QStyleHelper::SizeSmall: return QAquaSizeSmall; - case QMacStyle::SizeMini: + case QStyleHelper::SizeMini: return QAquaSizeMini; default: break; @@ -1133,20 +1133,19 @@ QAquaWidgetSize QMacStylePrivate::aquaSizeConstrain(const QStyleOption *option, return QAquaSizeUnknown; } - Q_Q(const QMacStyle); QSize large = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeLarge), small = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeSmall), mini = qt_aqua_get_known_size(ct, widg, szHint, QAquaSizeMini); bool guess_size = false; QAquaWidgetSize ret = QAquaSizeUnknown; - QMacStyle::WidgetSizePolicy wsp = q->widgetSizePolicy(widg); - if (wsp == QMacStyle::SizeDefault) + QStyleHelper::WidgetSizePolicy wsp = QStyleHelper::widgetSizePolicy(widg); + if (wsp == QStyleHelper::SizeDefault) guess_size = true; - else if (wsp == QMacStyle::SizeMini) + else if (wsp == QStyleHelper::SizeMini) ret = QAquaSizeMini; - else if (wsp == QMacStyle::SizeSmall) + else if (wsp == QStyleHelper::SizeSmall) ret = QAquaSizeSmall; - else if (wsp == QMacStyle::SizeLarge) + else if (wsp == QStyleHelper::SizeLarge) ret = QAquaSizeLarge; if (guess_size) ret = qt_aqua_guess_size(widg, large, small, mini); @@ -1613,13 +1612,13 @@ void QMacStylePrivate::drawTableHeader(const HIRect &outerBounds, scrollButtonsCutoff is the smallest size where the up/down buttons is drawn. */ enum ScrollBarCutoffType { thumbIndicatorCutoff = 0, scrollButtonsCutoff = 1 }; -static int scrollButtonsCutoffSize(ScrollBarCutoffType cutoffType, QMacStyle::WidgetSizePolicy widgetSize) +static int scrollButtonsCutoffSize(ScrollBarCutoffType cutoffType, QStyleHelper::WidgetSizePolicy widgetSize) { // Mini scroll bars do not exist as of version 10.4. - if (widgetSize == QMacStyle::SizeMini) + if (widgetSize == QStyleHelper::SizeMini) return 0; - const int sizeIndex = (widgetSize == QMacStyle::SizeSmall) ? 1 : 0; + const int sizeIndex = (widgetSize == QStyleHelper::SizeSmall) ? 1 : 0; static const int sizeTable[2][2] = { { 61, 56 }, { 49, 44 } }; return sizeTable[sizeIndex][cutoffType]; } @@ -3041,6 +3040,10 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w case SH_ItemView_ScrollMode: ret = QAbstractItemView::ScrollPerPixel; break; + case SH_TitleBar_ShowToolTipsOnButtons: + // min/max/close buttons on windows don't show tool tips + ret = false; + break; default: ret = QCommonStyle::styleHint(sh, opt, w, hret); break; @@ -3104,35 +3107,6 @@ QPixmap QMacStyle::standardPixmap(StandardPixmap standardPixmap, const QStyleOpt return icon.pixmap(qt_getWindow(widget), QSize(size, size)); } -void QMacStyle::setWidgetSizePolicy(const QWidget *widget, WidgetSizePolicy policy) -{ - QWidget *wadget = const_cast<QWidget *>(widget); - wadget->setAttribute(Qt::WA_MacNormalSize, policy == SizeLarge); - wadget->setAttribute(Qt::WA_MacSmallSize, policy == SizeSmall); - wadget->setAttribute(Qt::WA_MacMiniSize, policy == SizeMini); -} - -QMacStyle::WidgetSizePolicy QMacStyle::widgetSizePolicy(const QWidget *widget, const QStyleOption *opt) -{ - while (widget) { - if (widget->testAttribute(Qt::WA_MacMiniSize)) { - return SizeMini; - } else if (widget->testAttribute(Qt::WA_MacSmallSize)) { - return SizeSmall; - } else if (widget->testAttribute(Qt::WA_MacNormalSize)) { - return SizeLarge; - } - widget = widget->parentWidget(); - } - - if (opt && opt->state & State_Mini) - return SizeMini; - else if (opt && opt->state & State_Small) - return SizeSmall; - - return SizeDefault; -} - void QMacStyle::drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const { @@ -5349,7 +5323,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex QMacStylePrivate::scrollBars.append(QPointer<QObject>(opt->styleObject)); const int scrollBarLength = (slider->orientation == Qt::Horizontal) ? slider->rect.width() : slider->rect.height(); - const QMacStyle::WidgetSizePolicy sizePolicy = widgetSizePolicy(widget, opt); + const QStyleHelper::WidgetSizePolicy sizePolicy = QStyleHelper::widgetSizePolicy(widget, opt); if (scrollBarLength < scrollButtonsCutoffSize(thumbIndicatorCutoff, sizePolicy)) tdi.attributes &= ~kThemeTrackShowThumb; if (scrollBarLength < scrollButtonsCutoffSize(scrollButtonsCutoff, sizePolicy)) @@ -6084,7 +6058,7 @@ QStyle::SubControl QMacStyle::hitTestComplexControl(ComplexControl cc, // exclude them from the hit test. const int scrollBarLength = (sb->orientation == Qt::Horizontal) ? sb->rect.width() : sb->rect.height(); - if (scrollBarLength < scrollButtonsCutoffSize(scrollButtonsCutoff, widgetSizePolicy(widget, opt))) + if (scrollBarLength < scrollButtonsCutoffSize(scrollButtonsCutoff, QStyleHelper::widgetSizePolicy(widget, opt))) sbi.enableState = kThemeTrackNothingToScroll; sbi.viewsize = sb->pageStep; @@ -6763,7 +6737,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt, case CT_ScrollBar : // Make sure that the scroll bar is large enough to display the thumb indicator. if (const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider *>(opt)) { - const int minimumSize = scrollButtonsCutoffSize(thumbIndicatorCutoff, widgetSizePolicy(widget, opt)); + const int minimumSize = scrollButtonsCutoffSize(thumbIndicatorCutoff, QStyleHelper::widgetSizePolicy(widget, opt)); if (slider->orientation == Qt::Horizontal) sz = sz.expandedTo(QSize(minimumSize, sz.height())); else diff --git a/src/widgets/styles/qmacstyle_mac_p.h b/src/widgets/styles/qmacstyle_mac_p.h index 7296539356..03f5d7280f 100644 --- a/src/widgets/styles/qmacstyle_mac_p.h +++ b/src/widgets/styles/qmacstyle_mac_p.h @@ -100,12 +100,6 @@ public: virtual int styleHint(StyleHint sh, const QStyleOption *opt = 0, const QWidget *w = 0, QStyleHintReturn *shret = 0) const; - enum WidgetSizePolicy { SizeSmall, SizeLarge, SizeMini, SizeDefault - }; - - static void setWidgetSizePolicy(const QWidget *w, WidgetSizePolicy policy); - static WidgetSizePolicy widgetSizePolicy(const QWidget *w, const QStyleOption *opt = 0); - QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt, const QWidget *widget = 0) const; diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp index 01d972af65..7b2ac49fa4 100644 --- a/src/widgets/styles/qstyle.cpp +++ b/src/widgets/styles/qstyle.cpp @@ -1987,6 +1987,11 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, by the style. Can be overridden with QAbstractItemView::setVerticalScrollMode() and QAbstractItemView::setHorizontalScrollMode(). This enum value has been introduced in Qt 5.7. + \value SH_TitleBar_ShowToolTipsOnButtons + Determines if tool tips are shown on window title bar buttons. + The Mac style, for example, sets this to false. + This enum value has been introduced in Qt 5.10. + \sa styleHint() */ diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h index ce33dbed62..ae5ddbcd1f 100644 --- a/src/widgets/styles/qstyle.h +++ b/src/widgets/styles/qstyle.h @@ -737,6 +737,7 @@ public: SH_Menu_SubMenuResetWhenReenteringParent, SH_Menu_SubMenuDontStartSloppyOnLeave, SH_ItemView_ScrollMode, + SH_TitleBar_ShowToolTipsOnButtons, // Add new style hint values here SH_CustomBase = 0xf0000000 diff --git a/src/widgets/styles/qstylehelper.cpp b/src/widgets/styles/qstylehelper.cpp index 9b381c383b..b315c14858 100644 --- a/src/widgets/styles/qstylehelper.cpp +++ b/src/widgets/styles/qstylehelper.cpp @@ -427,5 +427,34 @@ QWindow *styleObjectWindow(QObject *so) return 0; } +void setWidgetSizePolicy(const QWidget *widget, WidgetSizePolicy policy) +{ + QWidget *wadget = const_cast<QWidget *>(widget); + wadget->setAttribute(Qt::WA_MacNormalSize, policy == SizeLarge); + wadget->setAttribute(Qt::WA_MacSmallSize, policy == SizeSmall); + wadget->setAttribute(Qt::WA_MacMiniSize, policy == SizeMini); +} + +WidgetSizePolicy widgetSizePolicy(const QWidget *widget, const QStyleOption *opt) +{ + while (widget) { + if (widget->testAttribute(Qt::WA_MacMiniSize)) { + return SizeMini; + } else if (widget->testAttribute(Qt::WA_MacSmallSize)) { + return SizeSmall; + } else if (widget->testAttribute(Qt::WA_MacNormalSize)) { + return SizeLarge; + } + widget = widget->parentWidget(); + } + + if (opt && opt->state & QStyle::State_Mini) + return SizeMini; + else if (opt && opt->state & QStyle::State_Small) + return SizeSmall; + + return SizeDefault; +} + } QT_END_NAMESPACE diff --git a/src/widgets/styles/qstylehelper_p.h b/src/widgets/styles/qstylehelper_p.h index 88eb05f1d7..8c30d3f4eb 100644 --- a/src/widgets/styles/qstylehelper_p.h +++ b/src/widgets/styles/qstylehelper_p.h @@ -87,6 +87,11 @@ namespace QStyleHelper #endif QColor backgroundColor(const QPalette &pal, const QWidget* widget = 0); QWindow *styleObjectWindow(QObject *so); + + enum WidgetSizePolicy { SizeSmall, SizeLarge, SizeMini, SizeDefault }; + + void setWidgetSizePolicy(const QWidget *w, WidgetSizePolicy policy); + WidgetSizePolicy widgetSizePolicy(const QWidget *w, const QStyleOption *opt = 0); } diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp index c12b3285f1..a3bfbd2938 100644 --- a/src/widgets/styles/qstyleoption.cpp +++ b/src/widgets/styles/qstyleoption.cpp @@ -38,11 +38,9 @@ ****************************************************************************/ #include <QtWidgets/private/qtwidgetsglobal_p.h> +#include "private/qstylehelper_p.h" #include "qstyleoption.h" #include "qapplication.h" -#if QT_CONFIG(style_mac) -# include "qmacstyle_mac_p.h" -#endif #include <qdebug.h> #include <QtCore/qmath.h> @@ -205,18 +203,16 @@ void QStyleOption::init(const QWidget *widget) if (!(state & QStyle::State_Active) && !qt_mac_can_clickThrough(widget)) state &= ~QStyle::State_Enabled; #endif -#if QT_CONFIG(style_mac) - switch (QMacStyle::widgetSizePolicy(widget)) { - case QMacStyle::SizeSmall: + switch (QStyleHelper::widgetSizePolicy(widget)) { + case QStyleHelper::SizeSmall: state |= QStyle::State_Small; break; - case QMacStyle::SizeMini: + case QStyleHelper::SizeMini: state |= QStyle::State_Mini; break; default: ; } -#endif #ifdef QT_KEYPAD_NAVIGATION if (widget->hasEditFocus()) state |= QStyle::State_HasEditFocus; diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp index 2886093732..2b9f042862 100644 --- a/src/widgets/styles/qstylesheetstyle.cpp +++ b/src/widgets/styles/qstylesheetstyle.cpp @@ -685,6 +685,7 @@ static const char knownStyleHints[][45] = { "titlebar-minimize-icon", "titlebar-normal-icon", "titlebar-shade-icon", + "titlebar-show-tooltips-on-buttons", "titlebar-unshade-icon", "toolbutton-popup-delay", "trash-icon", @@ -5316,6 +5317,7 @@ int QStyleSheetStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWi } case SH_ItemView_ArrowKeysNavigateIntoChildren: s = QLatin1String("arrow-keys-navigate-into-children"); break; case SH_ItemView_PaintAlternatingRowColorsForEmptyArea: s = QLatin1String("paint-alternating-row-colors-for-empty-area"); break; + case SH_TitleBar_ShowToolTipsOnButtons: s = QLatin1String("titlebar-show-tooltips-on-buttons"); break; default: break; } if (!s.isEmpty() && rule.hasStyleHint(s)) { |