From f2b96c3c51644da7b25f94e76507861ca687ac13 Mon Sep 17 00:00:00 2001 From: Jake Petroules Date: Sun, 6 Sep 2015 23:10:42 -0700 Subject: [PATCH] Get scroll bar metrics from public API instead of hardcoded numbers. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I8c6efcab44d6d238d7b20b7f57cb457455f4a17f Reviewed-by: Tor Arne Vestbø --- src/widgets/styles/qmacstyle_mac.mm | 38 ++++++++++---------------- src/widgets/styles/qmacstyle_mac_p_p.h | 3 ++ 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm index 95fb2f5b914..3bf7d63f89c 100644 --- a/src/widgets/styles/qmacstyle_mac.mm +++ b/src/widgets/styles/qmacstyle_mac.mm @@ -1105,6 +1105,17 @@ static void qt_drawFocusRingOnPath(CGContextRef cg, NSBezierPath *focusRingPath) CGContextRestoreGState(cg); } +QAquaWidgetSize QMacStylePrivate::effectiveAquaSizeConstrain(const QStyleOption *option, + const QWidget *widg, + QStyle::ContentsType ct, + QSize szHint, QSize *insz) const +{ + QAquaWidgetSize sz = aquaSizeConstrain(option, widg, ct, szHint, insz); + if (sz == QAquaSizeUnknown) + return QAquaSizeLarge; + return sz; +} + QAquaWidgetSize QMacStylePrivate::aquaSizeConstrain(const QStyleOption *option, const QWidget *widg, QStyle::ContentsType ct, QSize szHint, QSize *insz) const { @@ -2525,29 +2536,10 @@ int QMacStyle::pixelMetric(PixelMetric metric, const QStyleOption *opt, const QW } break; case PM_ScrollBarExtent: { - if ([NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay) { - switch (d->aquaSizeConstrain(opt, widget)) { - case QAquaSizeUnknown: - case QAquaSizeLarge: - ret = QSysInfo::macVersion() >= QSysInfo::MV_10_8 ? 16 : 9; - break; - case QAquaSizeMini: - case QAquaSizeSmall: - ret = QSysInfo::macVersion() >= QSysInfo::MV_10_8 ? 14 : 7; - break; - } - break; - } - switch (d->aquaSizeConstrain(opt, widget)) { - case QAquaSizeUnknown: - case QAquaSizeLarge: - GetThemeMetric(kThemeMetricScrollBarWidth, &ret); - break; - case QAquaSizeMini: - case QAquaSizeSmall: - GetThemeMetric(kThemeMetricSmallScrollBarWidth, &ret); - break; - } + const QAquaWidgetSize size = d->effectiveAquaSizeConstrain(opt, widget); + ret = static_cast([NSScroller + scrollerWidthForControlSize:static_cast(size) + scrollerStyle:[NSScroller preferredScrollerStyle]]); break; } case PM_IndicatorHeight: { switch (d->aquaSizeConstrain(opt, widget)) { diff --git a/src/widgets/styles/qmacstyle_mac_p_p.h b/src/widgets/styles/qmacstyle_mac_p_p.h index 33818568ec7..8e138ea8879 100644 --- a/src/widgets/styles/qmacstyle_mac_p_p.h +++ b/src/widgets/styles/qmacstyle_mac_p_p.h @@ -172,6 +172,9 @@ public: QAquaWidgetSize aquaSizeConstrain(const QStyleOption *option, const QWidget *widg, QStyle::ContentsType ct = QStyle::CT_CustomBase, QSize szHint=QSize(-1, -1), QSize *insz = 0) const; + QAquaWidgetSize effectiveAquaSizeConstrain(const QStyleOption *option, const QWidget *widg, + QStyle::ContentsType ct = QStyle::CT_CustomBase, + QSize szHint=QSize(-1, -1), QSize *insz = 0) const; void getSliderInfo(QStyle::ComplexControl cc, const QStyleOptionSlider *slider, HIThemeTrackDrawInfo *tdi, const QWidget *needToRemoveMe) const; inline int animateSpeed(Animates) const { return 33; }