diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-09-22 19:39:42 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2020-10-06 11:20:51 +0200 |
commit | 5930a0ebc0b177b3359d461548a200531fe4774e (patch) | |
tree | a5b6e85c7860480c0fec81feb4d2580ae6f9f652 /src/plugins/styles | |
parent | 57d6f842eadcfe59337e223237ef024de3b0e433 (diff) |
macOS: Update slider metrics by explicitly asking it to layout
Pick-to: 5.15
Pick-to: 5.12
Change-Id: I283771624b513f4e8844c6130898ddf2531df0f1
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/plugins/styles')
-rw-r--r-- | src/plugins/styles/mac/qmacstyle_mac.mm | 37 |
1 files changed, 4 insertions, 33 deletions
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm index 4f51f63665..904f94fc95 100644 --- a/src/plugins/styles/mac/qmacstyle_mac.mm +++ b/src/plugins/styles/mac/qmacstyle_mac.mm @@ -489,38 +489,11 @@ static bool setupSlider(NSSlider *slider, const QStyleOptionSlider *sl) slider.numberOfTickMarks = 0; } - return true; -} + // Ensure the values set above are reflected when asking + // the cell for its metrics and to draw itself. + [slider layoutSubtreeIfNeeded]; -static void fixStaleGeometry(NSSlider *slider) -{ - // If it's later fixed in AppKit, this function is not needed. - // On macOS Mojave we suddenly have NSSliderCell with a cached - // (and stale) geometry, thus its -drawKnob, -drawBarInside:flipped:, - // -drawTickMarks fail to render the slider properly. Setting the number - // of tickmarks triggers an update in geometry. - - Q_ASSERT(slider); - - if (QOperatingSystemVersion::current() < QOperatingSystemVersion::MacOSMojave) - return; - - NSSliderCell *cell = slider.cell; - const NSRect barRect = [cell barRectFlipped:slider.isFlipped]; - const NSSize sliderSize = slider.frame.size; - CGFloat difference = 0.; - if (slider.vertical) - difference = std::abs(sliderSize.height - barRect.size.height); - else - difference = std::abs(sliderSize.width - barRect.size.width); - - if (difference > 6.) { - // Stale ... - const auto nOfTicks = slider.numberOfTickMarks; - // Non-zero, different from nOfTicks to force update - slider.numberOfTickMarks = nOfTicks + 10; - slider.numberOfTickMarks = nOfTicks; - } + return true; } static bool isInMacUnifiedToolbarArea(QWindow *window, int windowY) @@ -5377,8 +5350,6 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex } else #endif { - if (!hasDoubleTicks) - fixStaleGeometry(slider); NSSliderCell *cell = slider.cell; const int numberOfTickMarks = slider.numberOfTickMarks; |